import dotenv from 'dotenv'; dotenv.config(); // Validate required environment variables const requiredEnvVars = [ 'DATABASE_URL', 'JWT_SECRET', 'PORT' ]; requiredEnvVars.forEach(key => { if (!process.env[key]) { throw new Error(`Missing required environment variable: ${key}`); } }); export const config = { // Application nodeEnv: process.env.NODE_ENV || 'development', port: parseInt(process.env.PORT || '4000', 10), appUrl: process.env.APP_URL || 'http://localhost:4000', // Database databaseUrl: process.env.DATABASE_URL!, // Redis redis: { url: process.env.REDIS_URL || 'redis://localhost:6379', password: process.env.REDIS_PASSWORD }, // MinIO/S3 s3: { endpoint: process.env.S3_ENDPOINT || 'http://localhost:9000', accessKey: process.env.S3_ACCESS_KEY || 'minioadmin', secretKey: process.env.S3_SECRET_KEY || 'minioadmin', bucket: process.env.S3_BUCKET || 'e-learning', useSSL: process.env.S3_USE_SSL === 'true' }, // JWT jwt: { secret: process.env.JWT_SECRET!, expiresIn: process.env.JWT_EXPIRES_IN || '24h', refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '7d' }, // Email smtp: { host: process.env.SMTP_HOST || 'localhost', port: parseInt(process.env.SMTP_PORT || '1025', 10), user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, from: process.env.SMTP_FROM || 'noreply@elearning.local' }, // File Upload upload: { maxVideoSize: parseInt(process.env.MAX_VIDEO_SIZE || '524288000', 10), // 500MB maxAttachmentSize: parseInt(process.env.MAX_ATTACHMENT_SIZE || '104857600', 10), // 100MB maxAttachmentsPerLesson: parseInt(process.env.MAX_ATTACHMENTS_PER_LESSON || '10', 10) }, // CORS cors: { origin: process.env.CORS_ORIGIN || 'http://localhost:3000' }, // Rate Limiting rateLimit: { windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '900000', 10), // 15 minutes maxRequests: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '100', 10) } };