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