diff --git a/libs/config/src/data-providers.ts b/libs/config/src/data-providers.ts index ada5071..26df731 100644 --- a/libs/config/src/data-providers.ts +++ b/libs/config/src/data-providers.ts @@ -1,7 +1,7 @@ /** * Data provider configurations for market data */ -import { getEnvVar, validateConfig } from './core'; +import { getEnvVar, validateConfig, createConfigLoader } from './core'; import { dataProvidersConfigSchema, DataProvidersConfig, DataProviderConfig } from './types'; /** @@ -67,6 +67,18 @@ export function loadDataProviderConfigs(): DataProvidersConfig { return validateConfig(config, dataProvidersConfigSchema); } +/** + * Creates a dynamic configuration loader for data providers + */ +export const createDataProvidersConfig = createConfigLoader( + 'data-providers', + dataProvidersConfigSchema, + { + providers: defaultDataProviders, + defaultProvider: 'alpaca' + } +); + /** * Singleton data provider configurations */ diff --git a/libs/config/src/database.ts b/libs/config/src/database.ts index 8a45ad0..cba2e4d 100644 --- a/libs/config/src/database.ts +++ b/libs/config/src/database.ts @@ -2,7 +2,7 @@ * Database configuration for Stock Bot services */ import { z } from 'zod'; -import { getEnvVar, getNumericEnvVar, validateConfig } from './core'; +import { getEnvVar, getNumericEnvVar, validateConfig, createConfigLoader } from './core'; import { databaseConfigSchema, DatabaseConfig } from './types'; /** @@ -76,6 +76,15 @@ export function loadDatabaseConfig(): DatabaseConfig { return validateConfig(config, databaseConfigSchema); } +/** + * Creates a dynamic configuration loader for database config + */ +export const createDatabaseConfig = createConfigLoader( + 'database', + databaseConfigSchema, + defaultDatabaseConfig +); + /** * Singleton database configuration */ diff --git a/libs/config/src/logging.ts b/libs/config/src/logging.ts index a9ca718..62f0b5d 100644 --- a/libs/config/src/logging.ts +++ b/libs/config/src/logging.ts @@ -2,7 +2,7 @@ * Loki logging configuration for Stock Bot platform */ import { z } from 'zod'; -import { getEnvVar, getNumericEnvVar, getBooleanEnvVar } from './core'; +import { getEnvVar, getNumericEnvVar, getBooleanEnvVar, createConfigLoader, validateConfig } from './core'; /** * Loki configuration schema @@ -49,11 +49,27 @@ function parseLabels(labelsStr?: string): Record { return labels; } +/** + * Default logging configuration + */ +const defaultLoggingConfig: LoggingConfig = { + level: 'info', + console: true, + loki: { + host: 'localhost', + port: 3100, + retentionDays: 30, + labels: {}, + batchSize: 100, + flushIntervalMs: 5000 + } +}; + /** * Load logging configuration from environment variables */ export function loadLoggingConfig(): LoggingConfig { - return { + const config = { level: (getEnvVar('LOG_LEVEL') || 'info') as 'debug' | 'info' | 'warn' | 'error', console: getBooleanEnvVar('LOG_CONSOLE', true), loki: { @@ -67,8 +83,19 @@ export function loadLoggingConfig(): LoggingConfig { flushIntervalMs: getNumericEnvVar('LOKI_FLUSH_INTERVAL_MS', 5000) } }; + + return validateConfig(config, loggingConfigSchema); } +/** + * Creates a dynamic configuration loader for logging + */ +export const createLoggingConfig = createConfigLoader( + 'logging', + loggingConfigSchema, + defaultLoggingConfig +); + /** * Singleton logging configuration */ diff --git a/libs/config/src/risk.ts b/libs/config/src/risk.ts index f7798b3..e56f4db 100644 --- a/libs/config/src/risk.ts +++ b/libs/config/src/risk.ts @@ -1,7 +1,7 @@ /** * Risk management configuration for trading operations */ -import { getNumericEnvVar, validateConfig } from './core'; +import { getNumericEnvVar, validateConfig, createConfigLoader } from './core'; import { riskConfigSchema, RiskConfig } from './types'; /** @@ -30,6 +30,15 @@ export function loadRiskConfig(): RiskConfig { return validateConfig(config, riskConfigSchema); } +/** + * Creates a dynamic configuration loader for risk management + */ +export const createRiskConfig = createConfigLoader( + 'risk', + riskConfigSchema, + defaultRiskConfig +); + /** * Singleton risk configuration */