import dotenv from 'dotenv'; import path from 'path'; // Load environment variables from .env file dotenv.config(); interface Config { port: number; nodeEnv: string; perplexityApiKey: string; openai: { apiKey: string; }; elevenlabs: { apiKey: string; defaultVoice: string; model: string; }; twilio: { accountSid: string; authToken: string; phoneNumber: string; }; sessionTimeout: number; upload: { maxFileSizeMB: number; allowedAudioFormats: string[]; }; } const config: Config = { port: parseInt(process.env.PORT || '3000', 10), nodeEnv: process.env.NODE_ENV || 'development', perplexityApiKey: process.env.PERPLEXITY_API_KEY || '', openai: { apiKey: process.env.OPENAI_API_KEY || '', }, elevenlabs: { apiKey: process.env.ELEVENLABS_API_KEY || '', defaultVoice: process.env.ELEVENLABS_DEFAULT_VOICE || 'EXAVITQu4vr4xnSDxMaL', model: process.env.ELEVENLABS_MODEL || 'eleven_multilingual_v2', }, twilio: { accountSid: process.env.TWILIO_ACCOUNT_SID || '', authToken: process.env.TWILIO_AUTH_TOKEN || '', phoneNumber: process.env.TWILIO_PHONE_NUMBER || '', }, sessionTimeout: parseInt(process.env.SESSION_TIMEOUT_MINUTES || '60', 10), upload: { maxFileSizeMB: parseInt(process.env.MAX_FILE_SIZE_MB || '10', 10), allowedAudioFormats: (process.env.ALLOWED_AUDIO_FORMATS || 'mp3,wav,m4a,ogg').split(','), }, }; // Validate required environment variables const requiredEnvVars = [ 'PERPLEXITY_API_KEY', 'OPENAI_API_KEY', 'ELEVENLABS_API_KEY', 'TWILIO_ACCOUNT_SID', 'TWILIO_AUTH_TOKEN', 'TWILIO_PHONE_NUMBER', ]; const missingEnvVars = requiredEnvVars.filter( (envVar) => !process.env[envVar] ); if (missingEnvVars.length > 0) { throw new Error( `Missing required environment variables: ${missingEnvVars.join(', ')}` ); } export default config;