/** * Database configuration using envalid */ import { cleanEnv, str, port, bool, num } from 'envalid'; /** * Database configuration with validation and defaults */ export const databaseConfig = cleanEnv(process.env, { // PostgreSQL Configuration DB_HOST: str({ default: 'localhost', desc: 'Database host' }), DB_PORT: port({ default: 5432, desc: 'Database port' }), DB_NAME: str({ default: 'stockbot', desc: 'Database name' }), DB_USER: str({ default: 'stockbot', desc: 'Database user' }), DB_PASSWORD: str({ default: '', desc: 'Database password' }), // Connection Pool Settings DB_POOL_MIN: num({ default: 2, desc: 'Minimum pool connections' }), DB_POOL_MAX: num({ default: 10, desc: 'Maximum pool connections' }), DB_POOL_IDLE_TIMEOUT: num({ default: 30000, desc: 'Pool idle timeout in ms' }), // SSL Configuration DB_SSL: bool({ default: false, desc: 'Enable SSL for database connection' }), DB_SSL_REJECT_UNAUTHORIZED: bool({ default: true, desc: 'Reject unauthorized SSL certificates' }), // Additional Settings DB_QUERY_TIMEOUT: num({ default: 30000, desc: 'Query timeout in ms' }), DB_CONNECTION_TIMEOUT: num({ default: 5000, desc: 'Connection timeout in ms' }), DB_STATEMENT_TIMEOUT: num({ default: 30000, desc: 'Statement timeout in ms' }), DB_LOCK_TIMEOUT: num({ default: 10000, desc: 'Lock timeout in ms' }), DB_IDLE_IN_TRANSACTION_SESSION_TIMEOUT: num({ default: 60000, desc: 'Idle in transaction timeout in ms' }), }); // Export typed configuration object export type DatabaseConfig = typeof databaseConfig; // Export individual config values for convenience export const { DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD, DB_POOL_MIN, DB_POOL_MAX, DB_POOL_IDLE_TIMEOUT, DB_SSL, DB_SSL_REJECT_UNAUTHORIZED, DB_QUERY_TIMEOUT, DB_CONNECTION_TIMEOUT, DB_STATEMENT_TIMEOUT, DB_LOCK_TIMEOUT, DB_IDLE_IN_TRANSACTION_SESSION_TIMEOUT, } = databaseConfig;