54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
/**
|
|
* 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;
|