/** * Admin interfaces configuration using envalid * PgAdmin, Mongo Express, Redis Insight for database management */ import { cleanEnv, str, port, bool } from 'envalid'; /** * PgAdmin configuration with validation and defaults */ export const pgAdminConfig = cleanEnv(process.env, { // PgAdmin Server PGADMIN_HOST: str({ default: 'localhost', desc: 'PgAdmin host' }), PGADMIN_PORT: port({ default: 8080, desc: 'PgAdmin port' }), // Authentication PGADMIN_DEFAULT_EMAIL: str({ default: 'admin@tradingbot.local', desc: 'PgAdmin default admin email' }), PGADMIN_DEFAULT_PASSWORD: str({ default: 'admin123', desc: 'PgAdmin default admin password' }), // Configuration PGADMIN_SERVER_MODE: bool({ default: false, desc: 'Enable server mode (multi-user)' }), PGADMIN_DISABLE_POSTFIX: bool({ default: true, desc: 'Disable postfix for email' }), PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION: bool({ default: true, desc: 'Enhanced cookie protection' }), // Security PGADMIN_MASTER_PASSWORD_REQUIRED: bool({ default: false, desc: 'Require master password' }), PGADMIN_SESSION_TIMEOUT: str({ default: '60', desc: 'Session timeout in minutes' }), }); /** * Mongo Express configuration with validation and defaults */ export const mongoExpressConfig = cleanEnv(process.env, { // Mongo Express Server MONGO_EXPRESS_HOST: str({ default: 'localhost', desc: 'Mongo Express host' }), MONGO_EXPRESS_PORT: port({ default: 8081, desc: 'Mongo Express port' }), // MongoDB Connection MONGO_EXPRESS_MONGODB_SERVER: str({ default: 'mongodb', desc: 'MongoDB server name/host' }), MONGO_EXPRESS_MONGODB_PORT: port({ default: 27017, desc: 'MongoDB port' }), MONGO_EXPRESS_MONGODB_ADMINUSERNAME: str({ default: 'trading_admin', desc: 'MongoDB admin username' }), MONGO_EXPRESS_MONGODB_ADMINPASSWORD: str({ default: '', desc: 'MongoDB admin password' }), // Basic Authentication for Mongo Express MONGO_EXPRESS_BASICAUTH_USERNAME: str({ default: 'admin', desc: 'Basic auth username for Mongo Express' }), MONGO_EXPRESS_BASICAUTH_PASSWORD: str({ default: 'admin123', desc: 'Basic auth password for Mongo Express' }), // Configuration MONGO_EXPRESS_ENABLE_ADMIN: bool({ default: true, desc: 'Enable admin features' }), MONGO_EXPRESS_OPTIONS_EDITOR_THEME: str({ default: 'rubyblue', desc: 'Editor theme (rubyblue, 3024-night, etc.)' }), MONGO_EXPRESS_REQUEST_SIZE: str({ default: '100kb', desc: 'Maximum request size' }), }); /** * Redis Insight configuration with validation and defaults */ export const redisInsightConfig = cleanEnv(process.env, { // Redis Insight Server REDIS_INSIGHT_HOST: str({ default: 'localhost', desc: 'Redis Insight host' }), REDIS_INSIGHT_PORT: port({ default: 8001, desc: 'Redis Insight port' }), // Redis Connection Settings REDIS_INSIGHT_REDIS_HOSTS: str({ default: 'local:dragonfly:6379', desc: 'Redis hosts in format name:host:port,name:host:port' }), // Configuration REDIS_INSIGHT_LOG_LEVEL: str({ default: 'info', choices: ['error', 'warn', 'info', 'verbose', 'debug'], desc: 'Redis Insight log level' }), REDIS_INSIGHT_DISABLE_ANALYTICS: bool({ default: true, desc: 'Disable analytics collection' }), REDIS_INSIGHT_BUILD_TYPE: str({ default: 'DOCKER', desc: 'Build type identifier' }), }); // Export typed configuration objects export type PgAdminConfig = typeof pgAdminConfig; export type MongoExpressConfig = typeof mongoExpressConfig; export type RedisInsightConfig = typeof redisInsightConfig; // Export individual config values for convenience export const { PGADMIN_HOST, PGADMIN_PORT, PGADMIN_DEFAULT_EMAIL, PGADMIN_DEFAULT_PASSWORD, PGADMIN_SERVER_MODE, PGADMIN_DISABLE_POSTFIX, PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION, PGADMIN_MASTER_PASSWORD_REQUIRED, PGADMIN_SESSION_TIMEOUT, } = pgAdminConfig; export const { MONGO_EXPRESS_HOST, MONGO_EXPRESS_PORT, MONGO_EXPRESS_MONGODB_SERVER, MONGO_EXPRESS_MONGODB_PORT, MONGO_EXPRESS_MONGODB_ADMINUSERNAME, MONGO_EXPRESS_MONGODB_ADMINPASSWORD, MONGO_EXPRESS_BASICAUTH_USERNAME, MONGO_EXPRESS_BASICAUTH_PASSWORD, MONGO_EXPRESS_ENABLE_ADMIN, MONGO_EXPRESS_OPTIONS_EDITOR_THEME, MONGO_EXPRESS_REQUEST_SIZE, } = mongoExpressConfig; export const { REDIS_INSIGHT_HOST, REDIS_INSIGHT_PORT, REDIS_INSIGHT_REDIS_HOSTS, REDIS_INSIGHT_LOG_LEVEL, REDIS_INSIGHT_DISABLE_ANALYTICS, REDIS_INSIGHT_BUILD_TYPE, } = redisInsightConfig;