77 lines
2.6 KiB
TypeScript
77 lines
2.6 KiB
TypeScript
/**
|
|
* 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;
|