/** * MongoDB configuration using Yup * Document storage for sentiment data, raw documents, and unstructured data */ import { cleanEnv, envValidators } from './env-utils'; const { str, port, bool, num, strWithChoices } = envValidators; /** * MongoDB configuration with validation and defaults */ export const mongodbConfig = cleanEnv(process.env, { // MongoDB Connection MONGODB_HOST: str('localhost', 'MongoDB host'), MONGODB_PORT: port(27017, 'MongoDB port'), MONGODB_DATABASE: str('trading_documents', 'MongoDB database name'), // Authentication MONGODB_USERNAME: str('trading_admin', 'MongoDB username'), MONGODB_PASSWORD: str('', 'MongoDB password'), MONGODB_AUTH_SOURCE: str('admin', 'MongoDB authentication database'), // Connection URI (alternative to individual settings) MONGODB_URI: str('', 'Complete MongoDB connection URI (overrides individual settings)'), // Connection Pool Settings MONGODB_MAX_POOL_SIZE: num(10, 'Maximum connection pool size'), MONGODB_MIN_POOL_SIZE: num(0, 'Minimum connection pool size'), MONGODB_MAX_IDLE_TIME: num(30000, 'Maximum idle time for connections in ms'), // Timeouts MONGODB_CONNECT_TIMEOUT: num(10000, 'Connection timeout in ms'), MONGODB_SOCKET_TIMEOUT: num(30000, 'Socket timeout in ms'), MONGODB_SERVER_SELECTION_TIMEOUT: num(5000, 'Server selection timeout in ms'), // SSL/TLS Settings MONGODB_TLS: bool(false, 'Enable TLS for MongoDB connection'), MONGODB_TLS_INSECURE: bool(false, 'Allow invalid certificates in TLS mode'), MONGODB_TLS_CA_FILE: str('', 'Path to TLS CA certificate file'), // Additional Settings MONGODB_RETRY_WRITES: bool(true, 'Enable retryable writes'), MONGODB_JOURNAL: bool(true, 'Enable write concern journal'), MONGODB_READ_PREFERENCE: strWithChoices( ['primary', 'primaryPreferred', 'secondary', 'secondaryPreferred', 'nearest'], 'primary', 'MongoDB read preference' ), MONGODB_WRITE_CONCERN: str('majority', 'Write concern level'), }); // Export typed configuration object export type MongoDbConfig = typeof mongodbConfig; // Export individual config values for convenience export const { MONGODB_HOST, MONGODB_PORT, MONGODB_DATABASE, MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_AUTH_SOURCE, MONGODB_URI, MONGODB_MAX_POOL_SIZE, MONGODB_MIN_POOL_SIZE, MONGODB_MAX_IDLE_TIME, MONGODB_CONNECT_TIMEOUT, MONGODB_SOCKET_TIMEOUT, MONGODB_SERVER_SELECTION_TIMEOUT, MONGODB_TLS, MONGODB_TLS_INSECURE, MONGODB_TLS_CA_FILE, MONGODB_RETRY_WRITES, MONGODB_JOURNAL, MONGODB_READ_PREFERENCE, MONGODB_WRITE_CONCERN, } = mongodbConfig;