diff --git a/src/config.js b/src/config.js index a19fbfe..25174a8 100644 --- a/src/config.js +++ b/src/config.js @@ -21,6 +21,7 @@ export function loadConfig() { 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), }; diff --git a/test/config.test.js b/test/config.test.js index eb1d5d2..fc8df86 100644 --- a/test/config.test.js +++ b/test/config.test.js @@ -49,6 +49,20 @@ describe('loadConfig', () => { expect(config.workerConcurrency).toBe(3); }); + it('defaults ebookJobTimeoutMs to 180000ms and reads EBOOK_JOB_TIMEOUT_MS when set', () => { + process.env.STORAGE_DIR = './storage'; + process.env.DB_HOST = 'localhost'; + process.env.DB_USER = 'user'; + process.env.DB_PASSWORD = 'pass'; + process.env.DB_NAME = 'db'; + delete process.env.EBOOK_JOB_TIMEOUT_MS; + + expect(loadConfig().ebookJobTimeoutMs).toBe(180000); + + process.env.EBOOK_JOB_TIMEOUT_MS = '240000'; + expect(loadConfig().ebookJobTimeoutMs).toBe(240000); + }); + it('throws listing every missing required variable', () => { for (const key of REQUIRED_VARS) delete process.env[key];