// backend/src/config/configuration.ts export interface Config { port: number; database: { url: string; }; jwt: { secret: string; expiresIn: string; }; throttle: { ttl: number; limit: number; }; } export default (): Config => { // Helper function to get required env var with type safety const getEnvVar = (key: string): string => { const value = process.env[key]; if (!value) { throw new Error(`❌ Environment variable ${key} is required but not set`); } return value; }; // Helper for optional env vars with defaults const getEnvVarWithDefault = (key: string, defaultValue: string): string => { return process.env[key] || defaultValue; }; const getEnvVarAsNumber = (key: string, defaultValue: number): number => { const value = process.env[key]; if (!value) return defaultValue; const parsed = parseInt(value, 10); return isNaN(parsed) ? defaultValue : parsed; }; return { port: getEnvVarAsNumber('PORT', 3000), database: { url: getEnvVar('DATABASE_URL'), }, jwt: { secret: getEnvVar('JWT_SECRET'), expiresIn: getEnvVarWithDefault('JWT_EXPIRES_IN', '7d'), }, throttle: { ttl: getEnvVarAsNumber('THROTTLE_TTL', 60), limit: getEnvVarAsNumber('THROTTLE_LIMIT', 100), }, }; };