import 'dotenv/config'; const REQUIRED_VARS = ['STORAGE_DIR', 'DB_HOST', 'DB_USER', 'DB_PASSWORD', 'DB_NAME']; export function loadConfig() { const missing = REQUIRED_VARS.filter((key) => !process.env[key]); if (missing.length > 0) { throw new Error(`Missing required environment variables: ${missing.join(', ')}`); } return { port: Number(process.env.PORT ?? 3000), storageDir: process.env.STORAGE_DIR, db: { host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, }, maxFileSizeMb: Number(process.env.MAX_FILE_SIZE_MB ?? 100), retentionHours: Number(process.env.RETENTION_HOURS ?? 1), workerPollIntervalMs: Number(process.env.WORKER_POLL_INTERVAL_MS ?? 1500), workerConcurrency: Number(process.env.WORKER_CONCURRENCY ?? 3), ebookJobTimeoutMs: Number(process.env.EBOOK_JOB_TIMEOUT_MS ?? 180000), rateLimitMaxJobs: Number(process.env.RATE_LIMIT_MAX_JOBS ?? 20), rateLimitWindowMinutes: Number(process.env.RATE_LIMIT_WINDOW_MINUTES ?? 10), }; }