Files
proxmox/rpc-translator-138/src/config.ts
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

100 lines
2.8 KiB
TypeScript

/**
* Configuration management for RPC Translator
*/
import dotenv from 'dotenv';
dotenv.config();
export interface Config {
server: {
httpPort: number;
wsPort: number;
nodeEnv: string;
};
besu: {
httpUrls: string[];
wsUrls: string[];
chainId: number;
};
web3signer: {
url: string;
timeout: number;
};
redis: {
host: string;
port: number;
password?: string;
db: number;
keyPrefix: string;
};
vault: {
addr: string;
roleId?: string;
secretId?: string;
translatorConfigPath: string;
};
policy: {
walletAllowlist: string[];
maxGasLimit: bigint;
maxGasPriceWei: bigint;
minGasPriceWei: bigint;
};
allowPrivateNetworkMethods: boolean;
}
function parseStringArray(value: string | undefined, separator: string = ','): string[] {
if (!value) return [];
return value.split(separator).map(s => s.trim()).filter(s => s.length > 0);
}
function parseBigInt(value: string | undefined, defaultValue: bigint): bigint {
if (!value) return defaultValue;
try {
return BigInt(value);
} catch {
return defaultValue;
}
}
export function loadConfig(): Config {
const walletAllowlistEnv = process.env.WALLET_ALLOWLIST;
return {
server: {
httpPort: parseInt(process.env.HTTP_PORT || '9545', 10),
wsPort: parseInt(process.env.WS_PORT || '9546', 10),
nodeEnv: process.env.NODE_ENV || 'production',
},
besu: {
httpUrls: parseStringArray(process.env.BESU_HTTP_URLS),
wsUrls: parseStringArray(process.env.BESU_WS_URLS),
chainId: parseInt(process.env.CHAIN_ID || '138', 10),
},
web3signer: {
url: process.env.WEB3SIGNER_URL || 'http://localhost:9000',
timeout: parseInt(process.env.WEB3SIGNER_TIMEOUT || '5000', 10),
},
redis: {
host: process.env.REDIS_HOST || 'localhost',
port: parseInt(process.env.REDIS_PORT || '6379', 10),
password: process.env.REDIS_PASSWORD || undefined,
db: parseInt(process.env.REDIS_DB || '0', 10),
keyPrefix: process.env.REDIS_KEY_PREFIX || 'rpc-translator:138',
},
vault: {
addr: process.env.VAULT_ADDR || 'http://localhost:8200',
roleId: process.env.VAULT_ROLE_ID || undefined,
secretId: process.env.VAULT_SECRET_ID || undefined,
translatorConfigPath: process.env.VAULT_PATH_TRANSLATOR_CONFIG || 'secret/data/chain138/translator',
},
policy: {
walletAllowlist: parseStringArray(walletAllowlistEnv),
maxGasLimit: parseBigInt(process.env.MAX_GAS_LIMIT, BigInt(30000000)),
maxGasPriceWei: parseBigInt(process.env.MAX_GAS_PRICE_WEI, BigInt('100000000000')),
minGasPriceWei: parseBigInt(process.env.MIN_GAS_PRICE_WEI, BigInt('1000000000')),
},
allowPrivateNetworkMethods: process.env.ALLOW_PRIVATE_NETWORK_METHODS !== 'false', // Default: true
};
}