// config.js - Configuration handling import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; // Configure paths relative to this file const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const CONFIG_PATH = path.resolve(__dirname, '../config.json'); // Determine environment const NODE_ENV = process.env.NODE_ENV || 'development'; // Load config file function loadConfig() { try { if (!fs.existsSync(CONFIG_PATH)) { throw new Error(`Configuration file not found at ${CONFIG_PATH}`); } const configData = fs.readFileSync(CONFIG_PATH, 'utf8'); const config = JSON.parse(configData); if (!config[NODE_ENV]) { throw new Error(`Configuration for environment '${NODE_ENV}' not found in config.json`); } const envConfig = config[NODE_ENV]; // Override secrets with environment variables if available if (process.env.KEYCLOAK_CLIENT_SECRET) { if (!envConfig.auth) { envConfig.auth = {}; } if (!envConfig.auth.keycloak) { envConfig.auth.keycloak = {}; } envConfig.auth.keycloak.clientSecret = process.env.KEYCLOAK_CLIENT_SECRET; } if (process.env.SESSION_SECRET) { if (!envConfig.auth) { envConfig.auth = {}; } envConfig.auth.sessionSecret = process.env.SESSION_SECRET; } return envConfig; } catch (err) { console.error('Error loading config:', err); throw err; } } // Get current environment export function getEnvironment() { return NODE_ENV; } // Export singleton config instance const config = loadConfig(); export default config;