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;