import dotenv from 'dotenv'; import path from 'path'; // Load environment variables from .env file dotenv.config({ path: path.join(__dirname, '../.env') }); // Validate required environment variables const requiredEnvVars = [ 'NEXTAUTH_SECRET', 'GITHUB_CLIENT_ID', 'GITHUB_CLIENT_SECRET' ]; const missingEnvVars = requiredEnvVars.filter(envVar => !process.env[envVar]); if (missingEnvVars.length > 0) { console.error('Missing required environment variables:', missingEnvVars.join(', ')); console.error('Please check your .env file and ensure all required variables are set.'); process.exit(1); } // Warn about default secrets in production if (process.env.NODE_ENV === 'production') { if (process.env.NEXTAUTH_SECRET == "") { console.error('CRITICAL: Default session secret detected in production!'); console.error('Please change NEXTAUTH_SECRET in your .env file.'); process.exit(1); } } export const config = { server: { port: parseInt(process.env.PORT || '3000', 10), nodeEnv: process.env.NODE_ENV || 'development' }, security: { sessionSecret: process.env.NEXTAUTH_SECRET!, githubClientId: process.env.GITHUB_CLIENT_ID!, githubClientSecret: process.env.GITHUB_CLIENT_SECRET!, corsOrigin: process.env.NODE_ENV === 'development' ? ['http://localhost:3000', 'http://localhost:5173'] : 'http://localhost:3000' }, rateLimit: { windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '900000', 10), // 15 minutes maxRequests: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '100', 10) }, slowDown: { windowMs: parseInt(process.env.SLOW_DOWN_WINDOW_MS || '60000', 10), // 1 minute delayMs: parseInt(process.env.SLOW_DOWN_DELAY_MS || '500', 10) // 500ms delay }, logging: { level: process.env.LOG_LEVEL || 'info' } };