Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 7x 7x 7x 21x 21x 7x 7x 7x 7x 7x 7x 7x 14x 7x 7x | const dotenv = require('dotenv');
dotenv.config();
const optionalNumber = (value, fallback) => {
const parsed = parseInt(value, 10);
return Number.isFinite(parsed) ? parsed : fallback;
};
const deriveDatabaseUrl = () => {
Iif (process.env.DATABASE_URL) {
return process.env.DATABASE_URL;
}
const {
POSTGRES_USER = 'merchantsofhope_user',
POSTGRES_PASSWORD,
POSTGRES_DB = 'merchantsofhope_supplyanddemandportal',
POSTGRES_HOST = 'merchantsofhope-supplyanddemandportal-database',
POSTGRES_PORT = '5432'
} = process.env;
Iif (!POSTGRES_PASSWORD) {
return undefined;
}
return `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}`;
};
const config = {
env: process.env.NODE_ENV || 'development',
host: process.env.HOST || process.env.BACKEND_HOST || '0.0.0.0',
port: optionalNumber(process.env.PORT || process.env.BACKEND_PORT, 3001),
databaseUrl: deriveDatabaseUrl(),
jwtSecret: process.env.JWT_SECRET,
corsOrigin: process.env.CORS_ORIGIN || '*',
logLevel: process.env.LOG_LEVEL || 'info',
uploadDir: process.env.UPLOAD_DIR || 'uploads/resumes',
rateLimit: {
windowMs: optionalNumber(process.env.RATE_LIMIT_WINDOW_MS, 15 * 60 * 1000),
max: optionalNumber(process.env.RATE_LIMIT_MAX, 100)
}
};
const required = ['databaseUrl', 'jwtSecret'];
const missingKeys = required.filter((key) => !config[key]);
Iif (missingKeys.length > 0) {
throw new Error(`Missing required environment variables: ${missingKeys.join(', ')}`);
}
module.exports = config;
|