import process from 'process'; const apiKey = process.env.API_KEY || ''; if (apiKey.length < 32) { console.error(`FATAL: API_KEY must be at least 32 characters long, current length: ${apiKey.length}`); process.exit(1); } /** * Parses duration strings like "20s", "1m" to milliseconds. * @param {string|undefined} val * @param {number} defaultMs * @returns {number} */ const parseDuration = (val, defaultMs) => { if (!val) return defaultMs; const match = val.match(/^(\d+)(s|m|h|ms)$/); if (!match) return defaultMs; const num = parseInt(match[1], 10); const unit = match[2]; switch (unit) { case 'ms': return num; case 's': return num * 1000; case 'm': return num * 60 * 1000; case 'h': return num * 60 * 60 * 1000; default: return defaultMs; } }; export const config = { serverAddr: process.env.SERVER_ADDR || '127.0.0.1:47880', apiKey: apiKey, logLevel: process.env.LOG_LEVEL || 'info', maxMessageBytes: parseInt(process.env.MAX_MESSAGE_BYTES || '4096', 10), heartbeatInterval: parseDuration(process.env.HEARTBEAT_INTERVAL, 20000), // 20s heartbeatTimeout: parseDuration(process.env.HEARTBEAT_TIMEOUT, 30000), // 30s sessionDuration: parseDuration(process.env.SESSION_DURATION, 60000), // 60s rateLimitPerMin: parseInt(process.env.RATE_LIMIT_PER_MIN || '10', 10), environment: process.env.ENVIRONMENT || 'production', dbHost: process.env.DB_HOST || '127.0.0.1', dbPort: parseInt(process.env.DB_PORT || '3306', 10), dbDatabase: process.env.DB_DATABASE || 'callDB', dbUsername: process.env.DB_USERNAME || '', dbPassword: process.env.DB_PASSWORD || '', turnUrl: process.env.TURN_URL || '', turnUsername: process.env.TURN_USERNAME || '', turnCredential: process.env.TURN_CREDENTIAL || '', };