29 lines
1.1 KiB
JavaScript
29 lines
1.1 KiB
JavaScript
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),
|
|
};
|
|
}
|