stock-bot/libs/config/src/mongodb.ts

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;