@morojs/moro 1.8.13 → 1.8.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../../src/core/config/config-validator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Configuration Validator - Type-Safe Schema Validation\n *\n * This module provides runtime validation for configuration objects using\n * simple TypeScript functions that match the type definitions exactly.\n */\n\nimport { AppConfig, OriginFunction } from '../../types/config.js';\nimport { createFrameworkLogger } from '../logger/index.js';\n\nconst logger = createFrameworkLogger('ConfigValidator');\n\n/**\n * Configuration validation error with detailed context\n */\nexport class ConfigValidationError extends Error {\n constructor(\n public readonly field: string,\n public readonly value: unknown,\n public readonly expectedType: string,\n message: string\n ) {\n super(`Configuration validation failed for '${field}': ${message}`);\n this.name = 'ConfigValidationError';\n }\n}\n\n/**\n * Validate and normalize a complete configuration object\n * This ensures type safety and provides helpful error messages\n */\nexport function validateConfig(config: any): AppConfig {\n logger.debug('Validating configuration');\n\n try {\n const validatedConfig: AppConfig = {\n server: validateServerConfig(config.server, 'server'),\n serviceDiscovery: validateServiceDiscoveryConfig(config.serviceDiscovery, 'serviceDiscovery'),\n database: validateDatabaseConfig(config.database, 'database'),\n modules: validateModuleDefaultsConfig(config.modules, 'modules'),\n routing: validateRoutingConfig(config.routing, 'routing'),\n logging: validateLoggingConfig(config.logging, 'logging'),\n security: validateSecurityConfig(config.security, 'security'),\n external: validateExternalServicesConfig(config.external, 'external'),\n performance: validatePerformanceConfig(config.performance, 'performance'),\n websocket: validateWebSocketConfig(config.websocket, 'websocket'),\n jobs: validateJobsConfig(config.jobs, 'jobs'),\n queue: validateQueueConfig(config.queue, 'queue'),\n };\n\n logger.debug('Configuration validation successful');\n return validatedConfig;\n } catch (error) {\n if (error instanceof ConfigValidationError) {\n logger.error(`❌ Configuration validation failed for '${error.field}':`, error.message);\n\n // Provide helpful hints\n provideValidationHints(error);\n\n throw error;\n }\n\n logger.error('❌ Unexpected configuration validation error:', String(error));\n throw new Error(`Configuration validation failed: ${String(error)}`);\n }\n}\n\n/**\n * Validate server configuration\n */\nfunction validateServerConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Server configuration must be an object'\n );\n }\n\n const result: any = {\n port: validatePort(config.port, `${path}.port`),\n host: validateString(config.host, `${path}.host`),\n // min 0: 0 = unlimited / disabled (these were never applied before, so 0\n // preserves the historical observed behavior — see schema.ts).\n maxConnections: validateNumber(config.maxConnections, `${path}.maxConnections`, { min: 0 }),\n timeout: validateNumber(config.timeout, `${path}.timeout`, { min: 0 }),\n bodySizeLimit: validateString(config.bodySizeLimit, `${path}.bodySizeLimit`),\n maxUploadSize: validateString(config.maxUploadSize, `${path}.maxUploadSize`),\n requestTracking: {\n enabled: validateBoolean(config.requestTracking?.enabled, `${path}.requestTracking.enabled`),\n },\n requestLogging: {\n enabled: validateBoolean(config.requestLogging?.enabled, `${path}.requestLogging.enabled`),\n },\n errorBoundary: {\n enabled: validateBoolean(config.errorBoundary?.enabled, `${path}.errorBoundary.enabled`),\n },\n };\n\n // Optional per-phase timeouts (all ms, >= 0 where 0 = default/disabled).\n if (config.timeouts !== undefined) {\n result.timeouts = validateServerTimeouts(config.timeouts, `${path}.timeouts`);\n }\n // `timeout` is a deprecated alias for `timeouts.request`. Fold it forward\n // when set and the canonical field is absent (matching the useUWebSockets\n // deprecation pattern).\n if (config.timeout && config.timeout > 0 && result.timeouts?.request === undefined) {\n result.timeouts = { ...(result.timeouts ?? {}), request: result.timeout };\n if (config.timeouts?.request === undefined) {\n logger.warn(`${path}.timeout is deprecated - use ${path}.timeouts.request instead`);\n }\n }\n\n // Optional fine-grained limits.\n if (config.limits !== undefined) {\n result.limits = validateServerLimits(config.limits, `${path}.limits`);\n }\n // Optional TCP backlog.\n if (config.backlog !== undefined) {\n result.backlog = validateNumber(config.backlog, `${path}.backlog`, { min: 0 });\n }\n // Optional HTTP/2 (boolean or options object).\n if (config.http2 !== undefined) {\n result.http2 = validateHttp2Config(config.http2, `${path}.http2`);\n }\n\n // Optional HTTP engine selection ('moro' | 'node' | 'uws')\n if (config.engine !== undefined) {\n // Map legacy values from the earlier 'auto'/'native' scheme to 'moro'\n let engine = config.engine;\n if (engine === 'auto' || engine === 'native') {\n logger.warn(`${path}.engine: '${engine}' is deprecated - use 'moro' (Moro's native engine)`);\n engine = 'moro';\n }\n result.engine = validateEnum(engine, ['moro', 'node', 'uws'], `${path}.engine`);\n }\n\n // Optional uWebSockets configuration (deprecated alias for engine: 'uws')\n if (config.useUWebSockets !== undefined) {\n result.useUWebSockets = validateBoolean(config.useUWebSockets, `${path}.useUWebSockets`);\n // The default config merges useUWebSockets: false in, so only an actual\n // opt-in warrants the deprecation nudge\n if (result.useUWebSockets && config.engine === undefined) {\n logger.warn(`${path}.useUWebSockets is deprecated - use ${path}.engine: 'uws' instead`);\n }\n }\n\n // Optional SSL configuration\n if (config.ssl !== undefined) {\n result.ssl = validateSSLConfig(config.ssl, `${path}.ssl`);\n }\n\n return result;\n}\n\n/**\n * Validate the unified SSL configuration (superset of both historical\n * shapes). Passes recognized keys through, folds the legacy uWS aliases, and\n * rejects a partial key-without-cert (or vice versa) so a half-configured TLS\n * server fails loudly at boot instead of silently serving plaintext.\n */\nfunction validateSSLConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'SSL configuration must be an object');\n }\n\n const result: any = {};\n // File-path shape (both the uWS key_file_name and node keyFile spellings).\n if (config.keyFile !== undefined)\n result.keyFile = validateString(config.keyFile, `${path}.keyFile`);\n if (config.certFile !== undefined)\n result.certFile = validateString(config.certFile, `${path}.certFile`);\n if (config.key_file_name !== undefined) {\n result.key_file_name = validateString(config.key_file_name, `${path}.key_file_name`);\n }\n if (config.cert_file_name !== undefined) {\n result.cert_file_name = validateString(config.cert_file_name, `${path}.cert_file_name`);\n }\n if (config.ca_file_name !== undefined) result.ca_file_name = config.ca_file_name;\n if (config.caFile !== undefined) result.caFile = config.caFile;\n // Inline-PEM shape (string or Buffer — pass through without stringifying).\n if (config.key !== undefined) result.key = config.key;\n if (config.cert !== undefined) result.cert = config.cert;\n if (config.ca !== undefined) result.ca = config.ca;\n if (config.passphrase !== undefined) {\n result.passphrase = validateString(config.passphrase, `${path}.passphrase`);\n }\n if (config.minVersion !== undefined) {\n result.minVersion = validateEnum(\n config.minVersion,\n ['TLSv1.2', 'TLSv1.3'],\n `${path}.minVersion`\n );\n }\n if (config.requestCert !== undefined) {\n result.requestCert = validateBoolean(config.requestCert, `${path}.requestCert`);\n }\n // Certificate rotation on file change: true, or { debounceMs }\n if (config.watch !== undefined) {\n if (typeof config.watch === 'boolean') {\n result.watch = config.watch;\n } else if (config.watch && typeof config.watch === 'object') {\n result.watch = {};\n if (config.watch.debounceMs !== undefined) {\n result.watch.debounceMs = validateNumber(\n config.watch.debounceMs,\n `${path}.watch.debounceMs`,\n { min: 1 }\n );\n }\n } else {\n throw new ConfigValidationError(\n `${path}.watch`,\n config.watch,\n 'boolean | { debounceMs }',\n 'ssl.watch must be a boolean or an object'\n );\n }\n }\n if (config.rejectUnauthorized !== undefined) {\n result.rejectUnauthorized = validateBoolean(\n config.rejectUnauthorized,\n `${path}.rejectUnauthorized`\n );\n }\n\n const hasKey = Boolean(result.key || result.keyFile || result.key_file_name);\n const hasCert = Boolean(result.cert || result.certFile || result.cert_file_name);\n if (hasKey !== hasCert) {\n throw new ConfigValidationError(\n path,\n config,\n 'key + cert',\n 'SSL configuration must supply BOTH a key and a certificate (or neither)'\n );\n }\n\n return result;\n}\n\n/** Size fields accept a number of bytes or a size string ('16kb', '10mb'). */\nfunction validateSize(value: any, path: string): number | string {\n if (typeof value === 'number') return validateNumber(value, path, { min: 0 });\n if (typeof value === 'string') {\n if (!/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb)?$/i.test(value.trim())) {\n throw new ConfigValidationError(path, value, 'size', `Invalid size string: ${value}`);\n }\n return value;\n }\n throw new ConfigValidationError(\n path,\n value,\n 'number|string',\n 'Size must be a number or size string'\n );\n}\n\nfunction validateServerTimeouts(config: any, path: string) {\n if (typeof config !== 'object' || config === null) {\n throw new ConfigValidationError(path, config, 'object', 'timeouts must be an object');\n }\n const result: any = {};\n for (const key of ['request', 'idle', 'keepAlive', 'headers']) {\n if (config[key] !== undefined) {\n result[key] = validateNumber(config[key], `${path}.${key}`, { min: 0 });\n }\n }\n return result;\n}\n\nfunction validateServerLimits(config: any, path: string) {\n if (typeof config !== 'object' || config === null) {\n throw new ConfigValidationError(path, config, 'object', 'limits must be an object');\n }\n const result: any = {};\n for (const key of [\n 'maxHeaderSize',\n 'wsMaxMessageSize',\n 'wsBackpressureLimit',\n 'writeHighWaterMark',\n 'maxPendingBytes',\n ]) {\n if (config[key] !== undefined) result[key] = validateSize(config[key], `${path}.${key}`);\n }\n if (config.maxHeaders !== undefined) {\n result.maxHeaders = validateNumber(config.maxHeaders, `${path}.maxHeaders`, { min: 1 });\n }\n if (config.multipart !== undefined) {\n const m = config.multipart;\n if (typeof m !== 'object' || m === null) {\n throw new ConfigValidationError(\n `${path}.multipart`,\n m,\n 'object',\n 'multipart must be an object'\n );\n }\n const mp: any = {};\n if (m.maxParts !== undefined)\n mp.maxParts = validateNumber(m.maxParts, `${path}.multipart.maxParts`, { min: 1 });\n if (m.maxFiles !== undefined)\n mp.maxFiles = validateNumber(m.maxFiles, `${path}.multipart.maxFiles`, { min: 0 });\n if (m.maxPartHeaderBytes !== undefined)\n mp.maxPartHeaderBytes = validateSize(\n m.maxPartHeaderBytes,\n `${path}.multipart.maxPartHeaderBytes`\n );\n if (m.maxFileSize !== undefined)\n mp.maxFileSize = validateSize(m.maxFileSize, `${path}.multipart.maxFileSize`);\n result.multipart = mp;\n }\n return result;\n}\n\nfunction validateHttp2Config(config: any, path: string) {\n if (typeof config === 'boolean') return config;\n if (typeof config !== 'object' || config === null) {\n throw new ConfigValidationError(\n path,\n config,\n 'boolean|object',\n 'http2 must be a boolean or an options object'\n );\n }\n const result: any = {};\n if (config.allowHTTP1 !== undefined)\n result.allowHTTP1 = validateBoolean(config.allowHTTP1, `${path}.allowHTTP1`);\n if (config.maxSessionMemory !== undefined) {\n result.maxSessionMemory = validateNumber(config.maxSessionMemory, `${path}.maxSessionMemory`, {\n min: 1,\n });\n }\n if (config.settings !== undefined) {\n if (typeof config.settings !== 'object' || config.settings === null) {\n throw new ConfigValidationError(\n `${path}.settings`,\n config.settings,\n 'object',\n 'http2.settings must be an object'\n );\n }\n const s: any = {};\n for (const key of [\n 'maxConcurrentStreams',\n 'initialWindowSize',\n 'maxFrameSize',\n 'maxHeaderListSize',\n 'headerTableSize',\n 'maxHeaderSize',\n ]) {\n if (config.settings[key] !== undefined) {\n s[key] = validateNumber(config.settings[key], `${path}.settings.${key}`, { min: 0 });\n }\n }\n for (const key of ['enablePush', 'enableConnectProtocol']) {\n if (config.settings[key] !== undefined) {\n s[key] = validateBoolean(config.settings[key], `${path}.settings.${key}`);\n }\n }\n result.settings = s;\n }\n return result;\n}\n\n/**\n * Validate service discovery configuration\n */\nfunction validateServiceDiscoveryConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Service discovery configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n type: validateEnum(config.type, ['memory', 'consul', 'kubernetes'], `${path}.type`),\n consulUrl: validateString(config.consulUrl, `${path}.consulUrl`),\n kubernetesNamespace: validateString(config.kubernetesNamespace, `${path}.kubernetesNamespace`),\n healthCheckInterval: validateNumber(config.healthCheckInterval, `${path}.healthCheckInterval`, {\n min: 1000,\n }),\n retryAttempts: validateNumber(config.retryAttempts, `${path}.retryAttempts`, { min: 0 }),\n };\n}\n\n/**\n * Validate database configuration\n */\nfunction validateDatabaseConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Database configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Optional URL\n if (config.url !== undefined) {\n result.url = validateString(config.url, `${path}.url`);\n }\n\n // Optional Redis - only validate if present\n if (config.redis !== undefined) {\n result.redis = validateRedisConfig(config.redis, `${path}.redis`);\n }\n\n // Optional MySQL - only validate if present\n if (config.mysql !== undefined) {\n result.mysql = validateMySQLConfig(config.mysql, `${path}.mysql`);\n }\n\n // Optional PostgreSQL - only validate if present\n if (config.postgresql !== undefined) {\n result.postgresql = validatePostgreSQLConfig(config.postgresql, `${path}.postgresql`);\n }\n\n // Optional SQLite - only validate if present\n if (config.sqlite !== undefined) {\n result.sqlite = validateSQLiteConfig(config.sqlite, `${path}.sqlite`);\n }\n\n // Optional MongoDB - only validate if present\n if (config.mongodb !== undefined) {\n result.mongodb = validateMongoDBConfig(config.mongodb, `${path}.mongodb`);\n }\n\n return result;\n}\n\n/**\n * Validate Redis configuration\n */\nfunction validateRedisConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Redis configuration must be an object'\n );\n }\n\n return {\n url: validateString(config.url, `${path}.url`),\n maxRetries: validateNumber(config.maxRetries, `${path}.maxRetries`, { min: 0 }),\n retryDelay: validateNumber(config.retryDelay, `${path}.retryDelay`, { min: 0 }),\n keyPrefix: validateString(config.keyPrefix, `${path}.keyPrefix`),\n };\n}\n\n/**\n * Validate MySQL configuration\n */\nfunction validateMySQLConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'MySQL configuration must be an object'\n );\n }\n\n const result: any = {\n host: validateString(config.host, `${path}.host`),\n port: validatePort(config.port, `${path}.port`),\n connectionLimit: validateNumber(config.connectionLimit, `${path}.connectionLimit`, { min: 1 }),\n acquireTimeout: validateNumber(config.acquireTimeout, `${path}.acquireTimeout`, { min: 1000 }),\n timeout: validateNumber(config.timeout, `${path}.timeout`, { min: 1000 }),\n };\n\n // Optional fields\n if (config.database !== undefined) {\n result.database = validateString(config.database, `${path}.database`);\n }\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n return result;\n}\n\n/**\n * Validate PostgreSQL configuration\n */\nfunction validatePostgreSQLConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'PostgreSQL configuration must be an object'\n );\n }\n\n const result: any = {\n host: validateString(config.host, `${path}.host`),\n port: validatePort(config.port, `${path}.port`),\n connectionLimit: validateNumber(config.connectionLimit, `${path}.connectionLimit`, { min: 1 }),\n };\n\n // Optional fields\n if (config.database !== undefined) {\n result.database = validateString(config.database, `${path}.database`);\n }\n if (config.user !== undefined) {\n result.user = validateString(config.user, `${path}.user`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n if (config.ssl !== undefined) {\n result.ssl = validateBoolean(config.ssl, `${path}.ssl`);\n }\n\n return result;\n}\n\n/**\n * Validate SQLite configuration\n */\nfunction validateSQLiteConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'SQLite configuration must be an object'\n );\n }\n\n const result: any = {\n filename: validateString(config.filename, `${path}.filename`),\n };\n\n // Optional fields\n if (config.memory !== undefined) {\n result.memory = validateBoolean(config.memory, `${path}.memory`);\n }\n if (config.verbose !== undefined) {\n result.verbose = validateBoolean(config.verbose, `${path}.verbose`);\n }\n\n return result;\n}\n\n/**\n * Validate MongoDB configuration\n */\nfunction validateMongoDBConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'MongoDB configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Either url or host+port\n if (config.url !== undefined) {\n result.url = validateString(config.url, `${path}.url`);\n }\n if (config.host !== undefined) {\n result.host = validateString(config.host, `${path}.host`);\n }\n if (config.port !== undefined) {\n result.port = validatePort(config.port, `${path}.port`);\n }\n if (config.database !== undefined) {\n result.database = validateString(config.database, `${path}.database`);\n }\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n return result;\n}\n\n/**\n * Validate module defaults configuration\n */\nfunction validateModuleDefaultsConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Module defaults configuration must be an object'\n );\n }\n\n const validated: any = {\n cache: validateCacheConfig(config.cache, `${path}.cache`),\n rateLimit: validateRateLimitConfig(config.rateLimit, `${path}.rateLimit`),\n validation: validateValidationConfig(config.validation, `${path}.validation`),\n autoDiscovery: validateAutoDiscoveryConfig(config.autoDiscovery, `${path}.autoDiscovery`),\n };\n\n // Optional apiPrefix\n if (config.apiPrefix !== undefined) {\n if (typeof config.apiPrefix !== 'string') {\n throw new ConfigValidationError(\n `${path}.apiPrefix`,\n config.apiPrefix,\n 'string',\n 'API prefix must be a string'\n );\n }\n validated.apiPrefix = config.apiPrefix;\n }\n\n // Optional session config\n if (config.session !== undefined) {\n validated.session = validateSessionConfig(config.session, `${path}.session`);\n }\n\n return validated;\n}\n\n/**\n * Validate file-based routing configuration.\n * Accepts a boolean shorthand (routing: true/false) or an object\n * ({ enabled, paths }). Defaults to enabled when omitted.\n */\nfunction validateRoutingConfig(\n config: any,\n path: string\n): boolean | { enabled: boolean; paths?: string[] } {\n if (config === undefined || config === null) {\n return true; // Enabled by default\n }\n\n if (typeof config === 'boolean') {\n return config;\n }\n\n if (typeof config === 'object' && !Array.isArray(config)) {\n const result: { enabled: boolean; paths?: string[] } = {\n enabled:\n config.enabled !== undefined ? validateBoolean(config.enabled, `${path}.enabled`) : true,\n };\n if (config.paths !== undefined) {\n result.paths = validateStringArray(config.paths, `${path}.paths`);\n }\n return result;\n }\n\n throw new ConfigValidationError(\n path,\n config,\n 'boolean | { enabled: boolean; paths?: string[] }',\n 'Routing must be a boolean or an object with enabled/paths'\n );\n}\n\n/**\n * Validate auto-discovery configuration\n */\nfunction validateAutoDiscoveryConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Auto-discovery configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n paths: validateStringArray(config.paths, `${path}.paths`),\n patterns: validateStringArray(config.patterns, `${path}.patterns`),\n recursive: validateBoolean(config.recursive, `${path}.recursive`),\n loadingStrategy: validateEnum(\n config.loadingStrategy,\n ['eager', 'lazy', 'conditional'],\n `${path}.loadingStrategy`\n ),\n watchForChanges: validateBoolean(config.watchForChanges, `${path}.watchForChanges`),\n ignorePatterns: validateStringArray(config.ignorePatterns, `${path}.ignorePatterns`),\n loadOrder: validateEnum(\n config.loadOrder,\n ['alphabetical', 'dependency', 'custom'],\n `${path}.loadOrder`\n ),\n failOnError: validateBoolean(config.failOnError, `${path}.failOnError`),\n maxDepth: validateNumber(config.maxDepth, `${path}.maxDepth`),\n };\n}\n\n/**\n * Validate cache configuration\n */\nfunction validateCacheConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Cache configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n defaultTtl: validateNumber(config.defaultTtl, `${path}.defaultTtl`, { min: 0 }),\n maxSize: validateNumber(config.maxSize, `${path}.maxSize`, { min: 1 }),\n strategy: validateEnum(config.strategy, ['lru', 'lfu', 'fifo'], `${path}.strategy`),\n };\n}\n\n/**\n * Validate rate limit configuration\n */\nfunction validateRateLimitConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Rate limit configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n defaultRequests: validateNumber(config.defaultRequests, `${path}.defaultRequests`, { min: 1 }),\n defaultWindow: validateNumber(config.defaultWindow, `${path}.defaultWindow`, { min: 1000 }),\n skipSuccessfulRequests: validateBoolean(\n config.skipSuccessfulRequests,\n `${path}.skipSuccessfulRequests`\n ),\n skipFailedRequests: validateBoolean(config.skipFailedRequests, `${path}.skipFailedRequests`),\n };\n}\n\n/**\n * Validate validation configuration\n */\nfunction validateValidationConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Validation configuration must be an object'\n );\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n stripUnknown: validateBoolean(config.stripUnknown, `${path}.stripUnknown`),\n abortEarly: validateBoolean(config.abortEarly, `${path}.abortEarly`),\n };\n\n // Optional allowUnknown\n if (config.allowUnknown !== undefined) {\n validated.allowUnknown = validateBoolean(config.allowUnknown, `${path}.allowUnknown`);\n }\n\n // Optional onError handler\n if (config.onError !== undefined) {\n if (typeof config.onError !== 'function') {\n throw new ConfigValidationError(\n `${path}.onError`,\n typeof config.onError,\n 'function',\n 'Validation error handler must be a function'\n );\n }\n validated.onError = config.onError;\n }\n\n return validated;\n}\n\n/**\n * Validate session configuration\n */\nfunction validateSessionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Session configuration must be an object'\n );\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n store: validateEnum(config.store, ['memory', 'redis', 'file'], `${path}.store`),\n };\n\n // Optional fields\n if (config.storeOptions !== undefined) {\n validated.storeOptions = config.storeOptions; // Complex object, allow through\n }\n if (config.secret !== undefined) {\n validated.secret = validateString(config.secret, `${path}.secret`);\n }\n if (config.name !== undefined) {\n validated.name = validateString(config.name, `${path}.name`);\n }\n if (config.rolling !== undefined) {\n validated.rolling = validateBoolean(config.rolling, `${path}.rolling`);\n }\n if (config.resave !== undefined) {\n validated.resave = validateBoolean(config.resave, `${path}.resave`);\n }\n if (config.saveUninitialized !== undefined) {\n validated.saveUninitialized = validateBoolean(\n config.saveUninitialized,\n `${path}.saveUninitialized`\n );\n }\n if (config.cookie !== undefined) {\n validated.cookie = config.cookie; // Complex object, allow through\n }\n if (config.proxy !== undefined) {\n validated.proxy = validateBoolean(config.proxy, `${path}.proxy`);\n }\n if (config.unset !== undefined) {\n validated.unset = validateEnum(config.unset, ['destroy', 'keep'], `${path}.unset`);\n }\n\n return validated;\n}\n\n/**\n * Validate logging configuration\n */\nfunction validateLoggingConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging configuration must be an object'\n );\n }\n\n return {\n level: validateEnum(config.level, ['debug', 'info', 'warn', 'error', 'fatal'], `${path}.level`),\n format: validateEnum(config.format, ['pretty', 'json', 'compact'], `${path}.format`),\n enableColors: validateBoolean(config.enableColors, `${path}.enableColors`),\n enableTimestamp: validateBoolean(config.enableTimestamp, `${path}.enableTimestamp`),\n enableContext: validateBoolean(config.enableContext, `${path}.enableContext`),\n enableMetadata: validateBoolean(config.enableMetadata, `${path}.enableMetadata`),\n enablePerformance: validateBoolean(config.enablePerformance, `${path}.enablePerformance`),\n outputs: validateLoggingOutputsConfig(config.outputs, `${path}.outputs`),\n };\n}\n\n/**\n * Validate logging outputs configuration\n */\nfunction validateLoggingOutputsConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging outputs configuration must be an object'\n );\n }\n\n return {\n console: validateBoolean(config.console, `${path}.console`),\n file: validateLoggingFileConfig(config.file, `${path}.file`),\n webhook: validateLoggingWebhookConfig(config.webhook, `${path}.webhook`),\n };\n}\n\n/**\n * Validate logging file configuration\n */\nfunction validateLoggingFileConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging file configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n path: validateString(config.path, `${path}.path`),\n maxSize: validateString(config.maxSize, `${path}.maxSize`),\n maxFiles: validateNumber(config.maxFiles, `${path}.maxFiles`, { min: 1 }),\n };\n}\n\n/**\n * Validate logging webhook configuration\n */\nfunction validateLoggingWebhookConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging webhook configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n headers: validateObject(config.headers, `${path}.headers`),\n };\n\n // Optional URL\n if (config.url !== undefined) {\n result.url = validateString(config.url, `${path}.url`);\n }\n\n return result;\n}\n\n/**\n * Validate security configuration\n */\nfunction validateSecurityConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Security configuration must be an object'\n );\n }\n\n const validated: any = {\n cors: validateCorsConfig(config.cors, `${path}.cors`),\n helmet: validateHelmetConfig(config.helmet, `${path}.helmet`),\n rateLimit: validateSecurityRateLimitConfig(config.rateLimit, `${path}.rateLimit`),\n };\n\n // Optional CSRF config\n if (config.csrf !== undefined) {\n validated.csrf = validateCsrfConfig(config.csrf, `${path}.csrf`);\n }\n\n // Optional CSP config\n if (config.csp !== undefined) {\n validated.csp = validateCspConfig(config.csp, `${path}.csp`);\n }\n\n return validated;\n}\n\n/**\n * Validate CORS configuration\n */\nfunction validateCorsConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'CORS configuration must be an object');\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n origin: validateCorsOrigin(config.origin, `${path}.origin`),\n methods: validateStringArray(config.methods, `${path}.methods`),\n allowedHeaders: validateStringArray(config.allowedHeaders, `${path}.allowedHeaders`),\n credentials: validateBoolean(config.credentials, `${path}.credentials`),\n };\n\n // Optional fields\n if (config.exposedHeaders !== undefined) {\n validated.exposedHeaders = validateStringArray(config.exposedHeaders, `${path}.exposedHeaders`);\n }\n if (config.maxAge !== undefined) {\n validated.maxAge = validateNumber(config.maxAge, `${path}.maxAge`);\n }\n if (config.preflightContinue !== undefined) {\n validated.preflightContinue = validateBoolean(\n config.preflightContinue,\n `${path}.preflightContinue`\n );\n }\n\n return validated;\n}\n\n/**\n * Validate CORS origin (can be string, array, boolean, or function)\n */\nfunction validateCorsOrigin(\n value: any,\n path: string\n): string | string[] | boolean | OriginFunction {\n if (typeof value === 'boolean' || typeof value === 'string') {\n return value;\n }\n if (typeof value === 'function') {\n return value as OriginFunction;\n }\n if (Array.isArray(value)) {\n return validateStringArray(value, path);\n }\n throw new ConfigValidationError(\n path,\n value,\n 'string | string[] | boolean | function',\n 'Must be a string, array of strings, boolean, or function'\n );\n}\n\n/**\n * Validate helmet configuration\n */\nfunction validateHelmetConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Helmet configuration must be an object'\n );\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n // Simplified options (backward compatible)\n if (config.contentSecurityPolicy !== undefined) {\n if (typeof config.contentSecurityPolicy === 'boolean') {\n validated.contentSecurityPolicy = config.contentSecurityPolicy;\n } else if (typeof config.contentSecurityPolicy === 'object') {\n validated.contentSecurityPolicy = config.contentSecurityPolicy;\n }\n }\n if (config.hsts !== undefined) {\n validated.hsts = validateBoolean(config.hsts, `${path}.hsts`);\n }\n if (config.noSniff !== undefined) {\n validated.noSniff = validateBoolean(config.noSniff, `${path}.noSniff`);\n }\n if (config.frameguard !== undefined) {\n validated.frameguard = validateBoolean(config.frameguard, `${path}.frameguard`);\n }\n\n // Detailed options (for advanced configuration)\n if (config.xFrameOptions !== undefined) {\n validated.xFrameOptions = config.xFrameOptions;\n }\n if (config.xContentTypeOptions !== undefined) {\n validated.xContentTypeOptions = validateBoolean(\n config.xContentTypeOptions,\n `${path}.xContentTypeOptions`\n );\n }\n if (config.xXssProtection !== undefined) {\n validated.xXssProtection = validateBoolean(config.xXssProtection, `${path}.xXssProtection`);\n }\n if (config.referrerPolicy !== undefined) {\n validated.referrerPolicy = config.referrerPolicy;\n }\n if (config.strictTransportSecurity !== undefined) {\n validated.strictTransportSecurity = config.strictTransportSecurity;\n }\n if (config.xDownloadOptions !== undefined) {\n validated.xDownloadOptions = validateBoolean(\n config.xDownloadOptions,\n `${path}.xDownloadOptions`\n );\n }\n if (config.xPermittedCrossDomainPolicies !== undefined) {\n validated.xPermittedCrossDomainPolicies = validateBoolean(\n config.xPermittedCrossDomainPolicies,\n `${path}.xPermittedCrossDomainPolicies`\n );\n }\n\n return validated;\n}\n\n/**\n * Validate CSRF configuration\n */\nfunction validateCsrfConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'CSRF configuration must be an object');\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n if (config.secret !== undefined) {\n validated.secret = validateString(config.secret, `${path}.secret`);\n }\n if (config.tokenLength !== undefined) {\n validated.tokenLength = validateNumber(config.tokenLength, `${path}.tokenLength`);\n }\n if (config.cookieName !== undefined) {\n validated.cookieName = validateString(config.cookieName, `${path}.cookieName`);\n }\n if (config.headerName !== undefined) {\n validated.headerName = validateString(config.headerName, `${path}.headerName`);\n }\n if (config.ignoreMethods !== undefined) {\n validated.ignoreMethods = validateStringArray(config.ignoreMethods, `${path}.ignoreMethods`);\n }\n if (config.sameSite !== undefined) {\n validated.sameSite = validateBoolean(config.sameSite, `${path}.sameSite`);\n }\n\n return validated;\n}\n\n/**\n * Validate CSP configuration\n */\nfunction validateCspConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'CSP configuration must be an object');\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n if (config.directives !== undefined) {\n validated.directives = config.directives; // Complex object, allow through\n }\n if (config.reportOnly !== undefined) {\n validated.reportOnly = validateBoolean(config.reportOnly, `${path}.reportOnly`);\n }\n if (config.reportUri !== undefined) {\n validated.reportUri = validateString(config.reportUri, `${path}.reportUri`);\n }\n if (config.nonce !== undefined) {\n validated.nonce = validateBoolean(config.nonce, `${path}.nonce`);\n }\n\n return validated;\n}\n\n/**\n * Validate security rate limit configuration\n */\nfunction validateSecurityRateLimitConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Security rate limit configuration must be an object'\n );\n }\n\n return {\n global: validateGlobalRateLimitConfig(config.global, `${path}.global`),\n };\n}\n\n/**\n * Validate global rate limit configuration\n */\nfunction validateGlobalRateLimitConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Global rate limit configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n requests: validateNumber(config.requests, `${path}.requests`, { min: 1 }),\n window: validateNumber(config.window, `${path}.window`, { min: 1000 }),\n };\n}\n\n/**\n * Validate external services configuration\n */\nfunction validateExternalServicesConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'External services configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Optional services - only validate if present\n if (config.stripe !== undefined) {\n result.stripe = validateStripeConfig(config.stripe, `${path}.stripe`);\n }\n if (config.paypal !== undefined) {\n result.paypal = validatePayPalConfig(config.paypal, `${path}.paypal`);\n }\n if (config.smtp !== undefined) {\n result.smtp = validateSMTPConfig(config.smtp, `${path}.smtp`);\n }\n\n return result;\n}\n\n/**\n * Validate Stripe configuration\n */\nfunction validateStripeConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Stripe configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Optional fields\n if (config.secretKey !== undefined) {\n result.secretKey = validateString(config.secretKey, `${path}.secretKey`);\n }\n if (config.publishableKey !== undefined) {\n result.publishableKey = validateString(config.publishableKey, `${path}.publishableKey`);\n }\n if (config.webhookSecret !== undefined) {\n result.webhookSecret = validateString(config.webhookSecret, `${path}.webhookSecret`);\n }\n if (config.apiVersion !== undefined) {\n result.apiVersion = validateString(config.apiVersion, `${path}.apiVersion`);\n } else {\n result.apiVersion = '2023-10-16'; // Default API version\n }\n\n return result;\n}\n\n/**\n * Validate PayPal configuration\n */\nfunction validatePayPalConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'PayPal configuration must be an object'\n );\n }\n\n const result: any = {\n environment: validateEnum(config.environment, ['sandbox', 'production'], `${path}.environment`),\n };\n\n // Optional fields\n if (config.clientId !== undefined) {\n result.clientId = validateString(config.clientId, `${path}.clientId`);\n }\n if (config.clientSecret !== undefined) {\n result.clientSecret = validateString(config.clientSecret, `${path}.clientSecret`);\n }\n if (config.webhookId !== undefined) {\n result.webhookId = validateString(config.webhookId, `${path}.webhookId`);\n }\n\n return result;\n}\n\n/**\n * Validate SMTP configuration\n */\nfunction validateSMTPConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'SMTP configuration must be an object');\n }\n\n const result: any = {\n port: validatePort(config.port, `${path}.port`),\n secure: validateBoolean(config.secure, `${path}.secure`),\n };\n\n // Optional fields\n if (config.host !== undefined) {\n result.host = validateString(config.host, `${path}.host`);\n }\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n return result;\n}\n\n/**\n * Validate performance configuration\n */\nfunction validatePerformanceConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Performance configuration must be an object'\n );\n }\n\n return {\n compression: validateCompressionConfig(config.compression, `${path}.compression`),\n circuitBreaker: validateCircuitBreakerConfig(config.circuitBreaker, `${path}.circuitBreaker`),\n clustering: validateClusteringConfig(config.clustering, `${path}.clustering`),\n };\n}\n\n/**\n * Validate compression configuration\n */\nfunction validateCompressionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Compression configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n level: validateNumber(config.level, `${path}.level`, { min: 1, max: 9 }),\n threshold: validateNumber(config.threshold, `${path}.threshold`, { min: 0 }),\n };\n if (config.encodings !== undefined) {\n if (!Array.isArray(config.encodings)) {\n throw new ConfigValidationError(\n `${path}.encodings`,\n config.encodings,\n 'array',\n 'encodings must be an array'\n );\n }\n result.encodings = config.encodings.map((e: any) =>\n validateEnum(e, ['br', 'gzip', 'deflate'], `${path}.encodings[]`)\n );\n }\n return result;\n}\n\n/**\n * Validate circuit breaker configuration\n */\nfunction validateCircuitBreakerConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Circuit breaker configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n failureThreshold: validateNumber(config.failureThreshold, `${path}.failureThreshold`, {\n min: 1,\n }),\n resetTimeout: validateNumber(config.resetTimeout, `${path}.resetTimeout`, { min: 1000 }),\n monitoringPeriod: validateNumber(config.monitoringPeriod, `${path}.monitoringPeriod`, {\n min: 1000,\n }),\n };\n}\n\n/**\n * Validate clustering configuration\n */\nfunction validateClusteringConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Clustering configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n // Workers can be number or 'auto'\n if (typeof config.workers === 'string' && config.workers === 'auto') {\n result.workers = 'auto';\n } else {\n result.workers = validateNumber(config.workers, `${path}.workers`, { min: 1 });\n }\n\n // Optional memoryPerWorkerGB\n if (config.memoryPerWorkerGB !== undefined) {\n result.memoryPerWorkerGB = validateNumber(\n config.memoryPerWorkerGB,\n `${path}.memoryPerWorkerGB`,\n { min: 0.1 }\n );\n }\n\n // Optional mode (reuseport or proxy)\n if (config.mode !== undefined) {\n if (config.mode !== 'reuseport' && config.mode !== 'proxy') {\n throw new ConfigValidationError(\n `${path}.mode`,\n config.mode,\n \"'reuseport' or 'proxy'\",\n \"Clustering mode must be 'reuseport' (fast, connection hashing) or 'proxy' (slower, strict round-robin)\"\n );\n }\n result.mode = config.mode;\n } else {\n result.mode = 'reuseport'; // Default to reuseport for performance\n }\n\n return result;\n}\n\n/**\n * Validate WebSocket configuration\n */\nfunction validateWebSocketConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'WebSocket configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n // Optional fields\n if (config.adapter !== undefined) {\n result.adapter = validateString(config.adapter, `${path}.adapter`);\n }\n if (config.compression !== undefined) {\n result.compression = validateBoolean(config.compression, `${path}.compression`);\n }\n if (config.customIdGenerator !== undefined) {\n result.customIdGenerator = config.customIdGenerator; // Function - no validation needed\n }\n if (config.options !== undefined) {\n result.options = validateWebSocketOptions(config.options, `${path}.options`);\n }\n\n return result;\n}\n\n/**\n * Validate WebSocket options\n */\nfunction validateWebSocketOptions(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'WebSocket options must be an object');\n }\n\n const result: any = {};\n\n if (config.cors !== undefined) {\n result.cors = validateWebSocketCorsOptions(config.cors, `${path}.cors`);\n }\n if (config.path !== undefined) {\n result.path = validateString(config.path, `${path}.path`);\n }\n if (config.maxPayloadLength !== undefined) {\n result.maxPayloadLength = validateNumber(config.maxPayloadLength, `${path}.maxPayloadLength`, {\n min: 1024,\n });\n }\n\n return result;\n}\n\n/**\n * Validate WebSocket CORS options\n */\nfunction validateWebSocketCorsOptions(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'WebSocket CORS options must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.origin !== undefined) {\n result.origin = validateCorsOrigin(config.origin, `${path}.origin`);\n }\n if (config.credentials !== undefined) {\n result.credentials = validateBoolean(config.credentials, `${path}.credentials`);\n }\n\n return result;\n}\n\n// Basic validation functions\n\nfunction validatePort(value: any, path: string): number {\n const num = Number(value);\n if (isNaN(num) || num < 1 || num > 65535) {\n throw new ConfigValidationError(\n path,\n value,\n 'number (1-65535)',\n 'Must be a number between 1 and 65535'\n );\n }\n return num;\n}\n\nfunction validateBoolean(value: any, path: string): boolean {\n if (value === 'true' || value === true) return true;\n if (value === 'false' || value === false) return false;\n if (value === '1' || value === 1) return true;\n if (value === '0' || value === 0) return false;\n throw new ConfigValidationError(\n path,\n value,\n 'boolean',\n 'Must be a boolean (true/false) or numeric (1/0)'\n );\n}\n\nfunction validateNumber(\n value: any,\n path: string,\n options: { min?: number; max?: number } = {}\n): number {\n const num = Number(value);\n if (isNaN(num)) {\n throw new ConfigValidationError(path, value, 'number', 'Must be a valid number');\n }\n if (options.min !== undefined && num < options.min) {\n throw new ConfigValidationError(\n path,\n value,\n `number >= ${options.min}`,\n `Must be at least ${options.min}`\n );\n }\n if (options.max !== undefined && num > options.max) {\n throw new ConfigValidationError(\n path,\n value,\n `number <= ${options.max}`,\n `Must be at most ${options.max}`\n );\n }\n return num;\n}\n\nfunction validateString(value: any, path: string): string {\n if (typeof value !== 'string') {\n throw new ConfigValidationError(path, value, 'string', 'Must be a string');\n }\n return value;\n}\n\nfunction validateEnum<T extends string>(value: any, validValues: readonly T[], path: string): T {\n const str = validateString(value, path);\n\n // For small arrays (< 10 items), linear search is faster than Set\n // For larger arrays, we could use Set, but most enums in config are small\n let found = false;\n const len = validValues.length;\n for (let i = 0; i < len; i++) {\n if (validValues[i] === str) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n throw new ConfigValidationError(\n path,\n value,\n `one of: ${validValues.join(', ')}`,\n `Must be one of: ${validValues.join(', ')}`\n );\n }\n return str as T;\n}\n\nfunction validateStringArray(value: any, path: string): string[] {\n if (!Array.isArray(value)) {\n // Try to parse comma-separated string\n if (typeof value === 'string') {\n // Avoid chained map().filter() - use single pass\n const parts = value.split(',');\n const result: string[] = [];\n for (const part of parts) {\n const trimmed = part.trim();\n if (trimmed.length > 0) {\n result.push(trimmed);\n }\n }\n return result;\n }\n throw new ConfigValidationError(\n path,\n value,\n 'string[]',\n 'Must be an array or comma-separated string'\n );\n }\n\n // Avoid creating intermediate arrays with map\n const len = value.length;\n const result: string[] = new Array(len);\n for (let i = 0; i < len; i++) {\n result[i] = validateString(value[i], `${path}[${i}]`);\n }\n return result;\n}\n\nfunction validateObject(value: any, path: string): Record<string, string> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ConfigValidationError(path, value, 'object', 'Must be an object');\n }\n return value;\n}\n\n/**\n * Validate queue configuration\n */\nfunction validateQueueConfig(config: any, path: string) {\n if (config === undefined || config === null) {\n return undefined;\n }\n\n if (typeof config !== 'object' || Array.isArray(config)) {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.adapter !== undefined) {\n const validAdapters = ['bull', 'rabbitmq', 'sqs', 'kafka', 'memory'];\n if (!validAdapters.includes(config.adapter)) {\n throw new ConfigValidationError(\n `${path}.adapter`,\n config.adapter,\n 'string',\n `Must be one of: ${validAdapters.join(', ')}`\n );\n }\n result.adapter = config.adapter;\n }\n\n if (config.connection !== undefined) {\n result.connection = validateQueueConnectionConfig(config.connection, `${path}.connection`);\n }\n\n if (config.concurrency !== undefined) {\n result.concurrency = validateNumber(config.concurrency, `${path}.concurrency`, { min: 1 });\n }\n\n if (config.retry !== undefined) {\n result.retry = validateQueueRetryConfig(config.retry, `${path}.retry`);\n }\n\n if (config.deadLetterQueue !== undefined) {\n result.deadLetterQueue = validateQueueDeadLetterConfig(\n config.deadLetterQueue,\n `${path}.deadLetterQueue`\n );\n }\n\n if (config.defaultJobOptions !== undefined) {\n result.defaultJobOptions = validateQueueDefaultJobOptions(\n config.defaultJobOptions,\n `${path}.defaultJobOptions`\n );\n }\n\n if (config.prefix !== undefined) {\n result.prefix = validateString(config.prefix, `${path}.prefix`);\n }\n\n if (config.limiter !== undefined) {\n result.limiter = validateQueueLimiterConfig(config.limiter, `${path}.limiter`);\n }\n\n return result;\n}\n\n/**\n * Validate queue connection configuration\n */\nfunction validateQueueConnectionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue connection configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.host !== undefined) {\n result.host = validateString(config.host, `${path}.host`);\n }\n\n if (config.port !== undefined) {\n result.port = validatePort(config.port, `${path}.port`);\n }\n\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n if (config.database !== undefined) {\n result.database = validateNumber(config.database, `${path}.database`, { min: 0 });\n }\n\n if (config.brokers !== undefined) {\n result.brokers = validateStringArray(config.brokers, `${path}.brokers`);\n }\n\n if (config.groupId !== undefined) {\n result.groupId = validateString(config.groupId, `${path}.groupId`);\n }\n\n if (config.region !== undefined) {\n result.region = validateString(config.region, `${path}.region`);\n }\n\n if (config.queueUrl !== undefined) {\n result.queueUrl = validateString(config.queueUrl, `${path}.queueUrl`);\n }\n\n return result;\n}\n\n/**\n * Validate queue retry configuration\n */\nfunction validateQueueRetryConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue retry configuration must be an object'\n );\n }\n\n const validBackoffStrategies = ['fixed', 'exponential', 'linear'];\n\n return {\n maxAttempts: validateNumber(config.maxAttempts, `${path}.maxAttempts`, { min: 1 }),\n backoff:\n config.backoff && validBackoffStrategies.includes(config.backoff)\n ? config.backoff\n : (() => {\n throw new ConfigValidationError(\n `${path}.backoff`,\n config.backoff,\n 'string',\n `Must be one of: ${validBackoffStrategies.join(', ')}`\n );\n })(),\n initialDelay: validateNumber(config.initialDelay, `${path}.initialDelay`, { min: 0 }),\n maxDelay:\n config.maxDelay !== undefined\n ? validateNumber(config.maxDelay, `${path}.maxDelay`, { min: 0 })\n : undefined,\n };\n}\n\n/**\n * Validate queue dead letter queue configuration\n */\nfunction validateQueueDeadLetterConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue dead letter configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n maxRetries: validateNumber(config.maxRetries, `${path}.maxRetries`, { min: 1 }),\n queueName:\n config.queueName !== undefined\n ? validateString(config.queueName, `${path}.queueName`)\n : undefined,\n };\n}\n\n/**\n * Validate queue default job options\n */\nfunction validateQueueDefaultJobOptions(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue default job options must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.removeOnComplete !== undefined) {\n result.removeOnComplete =\n typeof config.removeOnComplete === 'boolean'\n ? config.removeOnComplete\n : validateNumber(config.removeOnComplete, `${path}.removeOnComplete`, { min: 0 });\n }\n\n if (config.removeOnFail !== undefined) {\n result.removeOnFail =\n typeof config.removeOnFail === 'boolean'\n ? config.removeOnFail\n : validateNumber(config.removeOnFail, `${path}.removeOnFail`, { min: 0 });\n }\n\n if (config.attempts !== undefined) {\n result.attempts = validateNumber(config.attempts, `${path}.attempts`, { min: 1 });\n }\n\n if (config.backoff !== undefined) {\n const validBackoffTypes = ['fixed', 'exponential', 'linear'];\n if (!config.backoff.type || !validBackoffTypes.includes(config.backoff.type)) {\n throw new ConfigValidationError(\n `${path}.backoff.type`,\n config.backoff.type,\n 'string',\n `Must be one of: ${validBackoffTypes.join(', ')}`\n );\n }\n result.backoff = {\n type: config.backoff.type,\n delay: validateNumber(config.backoff.delay, `${path}.backoff.delay`, { min: 0 }),\n };\n }\n\n return result;\n}\n\n/**\n * Validate queue limiter configuration\n */\nfunction validateQueueLimiterConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue limiter configuration must be an object'\n );\n }\n\n return {\n max: validateNumber(config.max, `${path}.max`, { min: 1 }),\n duration: validateNumber(config.duration, `${path}.duration`, { min: 1 }),\n };\n}\n\n/**\n * Validate jobs configuration\n */\nfunction validateJobsConfig(config: any, path: string) {\n if (config === undefined || config === null) {\n return undefined;\n }\n\n if (typeof config !== 'object' || Array.isArray(config)) {\n throw new ConfigValidationError(path, config, 'object', 'Jobs configuration must be an object');\n }\n\n const result: any = {};\n\n if (config.enabled !== undefined) {\n result.enabled = validateBoolean(config.enabled, `${path}.enabled`);\n }\n if (config.maxConcurrentJobs !== undefined) {\n result.maxConcurrentJobs = validateNumber(\n config.maxConcurrentJobs,\n `${path}.maxConcurrentJobs`,\n { min: 1 }\n );\n }\n if (config.gracefulShutdownTimeout !== undefined) {\n result.gracefulShutdownTimeout = validateNumber(\n config.gracefulShutdownTimeout,\n `${path}.gracefulShutdownTimeout`,\n { min: 0 }\n );\n }\n if (config.leaderElection !== undefined) {\n result.leaderElection = validateJobsLeaderElectionConfig(\n config.leaderElection,\n `${path}.leaderElection`\n );\n }\n if (config.executor !== undefined) {\n result.executor = validateJobsExecutorConfig(config.executor, `${path}.executor`);\n }\n if (config.stateManager !== undefined) {\n result.stateManager = validateJobsStateManagerConfig(\n config.stateManager,\n `${path}.stateManager`\n );\n }\n\n return result;\n}\n\n/**\n * Validate jobs leader election configuration\n */\nfunction validateJobsLeaderElectionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Jobs leader election configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.enabled !== undefined) {\n result.enabled = validateBoolean(config.enabled, `${path}.enabled`);\n }\n if (config.strategy !== undefined) {\n result.strategy = validateEnum(config.strategy, ['file', 'redis', 'none'], `${path}.strategy`);\n }\n if (config.lockPath !== undefined) {\n result.lockPath = validateString(config.lockPath, `${path}.lockPath`);\n }\n if (config.lockTimeout !== undefined) {\n result.lockTimeout = validateNumber(config.lockTimeout, `${path}.lockTimeout`, { min: 1000 });\n }\n if (config.heartbeatInterval !== undefined) {\n result.heartbeatInterval = validateNumber(\n config.heartbeatInterval,\n `${path}.heartbeatInterval`,\n { min: 1000 }\n );\n }\n\n return result;\n}\n\n/**\n * Validate jobs executor configuration\n */\nfunction validateJobsExecutorConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Jobs executor configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.maxRetries !== undefined) {\n result.maxRetries = validateNumber(config.maxRetries, `${path}.maxRetries`, { min: 0 });\n }\n if (config.retryDelay !== undefined) {\n result.retryDelay = validateNumber(config.retryDelay, `${path}.retryDelay`, { min: 0 });\n }\n if (config.retryBackoff !== undefined) {\n result.retryBackoff = validateEnum(\n config.retryBackoff,\n ['linear', 'exponential'],\n `${path}.retryBackoff`\n );\n }\n if (config.retryBackoffMultiplier !== undefined) {\n result.retryBackoffMultiplier = validateNumber(\n config.retryBackoffMultiplier,\n `${path}.retryBackoffMultiplier`,\n { min: 1 }\n );\n }\n if (config.maxRetryDelay !== undefined) {\n result.maxRetryDelay = validateNumber(config.maxRetryDelay, `${path}.maxRetryDelay`, {\n min: 0,\n });\n }\n if (config.timeout !== undefined) {\n result.timeout = validateNumber(config.timeout, `${path}.timeout`, { min: 0 });\n }\n if (config.enableCircuitBreaker !== undefined) {\n result.enableCircuitBreaker = validateBoolean(\n config.enableCircuitBreaker,\n `${path}.enableCircuitBreaker`\n );\n }\n if (config.circuitBreakerThreshold !== undefined) {\n result.circuitBreakerThreshold = validateNumber(\n config.circuitBreakerThreshold,\n `${path}.circuitBreakerThreshold`,\n { min: 1 }\n );\n }\n if (config.circuitBreakerResetTimeout !== undefined) {\n result.circuitBreakerResetTimeout = validateNumber(\n config.circuitBreakerResetTimeout,\n `${path}.circuitBreakerResetTimeout`,\n { min: 1000 }\n );\n }\n if (config.enableMemoryMonitoring !== undefined) {\n result.enableMemoryMonitoring = validateBoolean(\n config.enableMemoryMonitoring,\n `${path}.enableMemoryMonitoring`\n );\n }\n if (config.memoryThreshold !== undefined) {\n result.memoryThreshold = validateNumber(config.memoryThreshold, `${path}.memoryThreshold`, {\n min: 1,\n });\n }\n\n return result;\n}\n\n/**\n * Validate jobs state manager configuration\n */\nfunction validateJobsStateManagerConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Jobs state manager configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.persistPath !== undefined) {\n result.persistPath = validateString(config.persistPath, `${path}.persistPath`);\n }\n if (config.historySize !== undefined) {\n result.historySize = validateNumber(config.historySize, `${path}.historySize`, { min: 1 });\n }\n if (config.persistInterval !== undefined) {\n result.persistInterval = validateNumber(config.persistInterval, `${path}.persistInterval`, {\n min: 1000,\n });\n }\n if (config.enableAutoPersist !== undefined) {\n result.enableAutoPersist = validateBoolean(\n config.enableAutoPersist,\n `${path}.enableAutoPersist`\n );\n }\n if (config.enableRecovery !== undefined) {\n result.enableRecovery = validateBoolean(config.enableRecovery, `${path}.enableRecovery`);\n }\n\n return result;\n}\n\n/**\n * Provide helpful validation hints based on the error\n */\nfunction provideValidationHints(error: ConfigValidationError): void {\n if (error.field.includes('port')) {\n logger.error(' 💡 Hint: Ports must be numbers between 1 and 65535');\n }\n if (error.field.includes('url')) {\n logger.error(' 💡 Hint: URLs must include protocol (http:// or https://)');\n }\n if (error.field.includes('environment')) {\n logger.error(' 💡 Hint: NODE_ENV must be one of: development, staging, production');\n }\n if (error.field.includes('level')) {\n logger.error(' 💡 Hint: Log level must be one of: debug, info, warn, error, fatal');\n }\n}\n"]}
1
+ {"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../../src/core/config/config-validator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Configuration Validator - Type-Safe Schema Validation\n *\n * This module provides runtime validation for configuration objects using\n * simple TypeScript functions that match the type definitions exactly.\n */\n\nimport { AppConfig, OriginFunction } from '../../types/config.js';\nimport { createFrameworkLogger } from '../logger/index.js';\n\nconst logger = createFrameworkLogger('ConfigValidator');\n\n/**\n * Configuration validation error with detailed context\n */\nexport class ConfigValidationError extends Error {\n constructor(\n public readonly field: string,\n public readonly value: unknown,\n public readonly expectedType: string,\n message: string\n ) {\n super(`Configuration validation failed for '${field}': ${message}`);\n this.name = 'ConfigValidationError';\n }\n}\n\n/**\n * Validate and normalize a complete configuration object\n * This ensures type safety and provides helpful error messages\n */\nexport function validateConfig(config: any): AppConfig {\n logger.debug('Validating configuration');\n\n try {\n const validatedConfig: AppConfig = {\n server: validateServerConfig(config.server, 'server'),\n serviceDiscovery: validateServiceDiscoveryConfig(config.serviceDiscovery, 'serviceDiscovery'),\n database: validateDatabaseConfig(config.database, 'database'),\n modules: validateModuleDefaultsConfig(config.modules, 'modules'),\n routing: validateRoutingConfig(config.routing, 'routing'),\n logging: validateLoggingConfig(config.logging, 'logging'),\n security: validateSecurityConfig(config.security, 'security'),\n external: validateExternalServicesConfig(config.external, 'external'),\n performance: validatePerformanceConfig(config.performance, 'performance'),\n websocket: validateWebSocketConfig(config.websocket, 'websocket'),\n jobs: validateJobsConfig(config.jobs, 'jobs'),\n queue: validateQueueConfig(config.queue, 'queue'),\n };\n\n logger.debug('Configuration validation successful');\n return validatedConfig;\n } catch (error) {\n if (error instanceof ConfigValidationError) {\n logger.error(`❌ Configuration validation failed for '${error.field}':`, error.message);\n\n // Provide helpful hints\n provideValidationHints(error);\n\n throw error;\n }\n\n logger.error('❌ Unexpected configuration validation error:', String(error));\n throw new Error(`Configuration validation failed: ${String(error)}`);\n }\n}\n\n/**\n * Validate server configuration\n */\nfunction validateServerConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Server configuration must be an object'\n );\n }\n\n const result: any = {\n port: validatePort(config.port, `${path}.port`),\n host: validateString(config.host, `${path}.host`),\n // min 0: 0 = unlimited / disabled (these were never applied before, so 0\n // preserves the historical observed behavior — see schema.ts).\n maxConnections: validateNumber(config.maxConnections, `${path}.maxConnections`, { min: 0 }),\n timeout: validateNumber(config.timeout, `${path}.timeout`, { min: 0 }),\n bodySizeLimit: validateString(config.bodySizeLimit, `${path}.bodySizeLimit`),\n maxUploadSize: validateString(config.maxUploadSize, `${path}.maxUploadSize`),\n requestTracking: {\n enabled: validateBoolean(config.requestTracking?.enabled, `${path}.requestTracking.enabled`),\n },\n requestLogging: {\n enabled: validateBoolean(config.requestLogging?.enabled, `${path}.requestLogging.enabled`),\n },\n errorBoundary: {\n enabled: validateBoolean(config.errorBoundary?.enabled, `${path}.errorBoundary.enabled`),\n },\n };\n\n // Optional per-phase timeouts (all ms, >= 0 where 0 = default/disabled).\n if (config.timeouts !== undefined) {\n result.timeouts = validateServerTimeouts(config.timeouts, `${path}.timeouts`);\n }\n // `timeout` is a deprecated alias for `timeouts.request`. Fold it forward\n // when set and the canonical field is absent (matching the useUWebSockets\n // deprecation pattern).\n if (config.timeout && config.timeout > 0 && result.timeouts?.request === undefined) {\n result.timeouts = { ...(result.timeouts ?? {}), request: result.timeout };\n if (config.timeouts?.request === undefined) {\n logger.warn(`${path}.timeout is deprecated - use ${path}.timeouts.request instead`);\n }\n }\n\n // Optional fine-grained limits.\n if (config.limits !== undefined) {\n result.limits = validateServerLimits(config.limits, `${path}.limits`);\n }\n // Optional TCP backlog.\n if (config.backlog !== undefined) {\n result.backlog = validateNumber(config.backlog, `${path}.backlog`, { min: 0 });\n }\n // Optional HTTP/2 (boolean or options object).\n if (config.http2 !== undefined) {\n result.http2 = validateHttp2Config(config.http2, `${path}.http2`);\n }\n\n // Optional HTTP engine selection ('moro' | 'node' | 'uws')\n if (config.engine !== undefined) {\n // Map legacy values from the earlier 'auto'/'native' scheme to 'moro'\n let engine = config.engine;\n if (engine === 'auto' || engine === 'native') {\n logger.warn(`${path}.engine: '${engine}' is deprecated - use 'moro' (Moro's native engine)`);\n engine = 'moro';\n }\n result.engine = validateEnum(engine, ['moro', 'node', 'uws'], `${path}.engine`);\n }\n\n // Optional uWebSockets configuration (deprecated alias for engine: 'uws')\n if (config.useUWebSockets !== undefined) {\n result.useUWebSockets = validateBoolean(config.useUWebSockets, `${path}.useUWebSockets`);\n // The default config merges useUWebSockets: false in, so only an actual\n // opt-in warrants the deprecation nudge\n if (result.useUWebSockets && config.engine === undefined) {\n logger.warn(`${path}.useUWebSockets is deprecated - use ${path}.engine: 'uws' instead`);\n }\n }\n\n // Optional SSL configuration\n if (config.ssl !== undefined) {\n result.ssl = validateSSLConfig(config.ssl, `${path}.ssl`);\n }\n\n return result;\n}\n\n/**\n * Validate the unified SSL configuration (superset of both historical\n * shapes). Passes recognized keys through, folds the legacy uWS aliases, and\n * rejects a partial key-without-cert (or vice versa) so a half-configured TLS\n * server fails loudly at boot instead of silently serving plaintext.\n */\nfunction validateSSLConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'SSL configuration must be an object');\n }\n\n const result: any = {};\n // File-path shape (both the uWS key_file_name and node keyFile spellings).\n if (config.keyFile !== undefined)\n result.keyFile = validateString(config.keyFile, `${path}.keyFile`);\n if (config.certFile !== undefined)\n result.certFile = validateString(config.certFile, `${path}.certFile`);\n if (config.key_file_name !== undefined) {\n result.key_file_name = validateString(config.key_file_name, `${path}.key_file_name`);\n }\n if (config.cert_file_name !== undefined) {\n result.cert_file_name = validateString(config.cert_file_name, `${path}.cert_file_name`);\n }\n if (config.ca_file_name !== undefined) result.ca_file_name = config.ca_file_name;\n if (config.caFile !== undefined) result.caFile = config.caFile;\n // Inline-PEM shape (string or Buffer — pass through without stringifying).\n if (config.key !== undefined) result.key = config.key;\n if (config.cert !== undefined) result.cert = config.cert;\n if (config.ca !== undefined) result.ca = config.ca;\n if (config.passphrase !== undefined) {\n result.passphrase = validateString(config.passphrase, `${path}.passphrase`);\n }\n if (config.minVersion !== undefined) {\n result.minVersion = validateEnum(\n config.minVersion,\n ['TLSv1.2', 'TLSv1.3'],\n `${path}.minVersion`\n );\n }\n if (config.requestCert !== undefined) {\n result.requestCert = validateBoolean(config.requestCert, `${path}.requestCert`);\n }\n // Certificate rotation on file change: true, or { debounceMs }\n if (config.watch !== undefined) {\n if (typeof config.watch === 'boolean') {\n result.watch = config.watch;\n } else if (config.watch && typeof config.watch === 'object') {\n result.watch = {};\n if (config.watch.debounceMs !== undefined) {\n result.watch.debounceMs = validateNumber(\n config.watch.debounceMs,\n `${path}.watch.debounceMs`,\n { min: 1 }\n );\n }\n } else {\n throw new ConfigValidationError(\n `${path}.watch`,\n config.watch,\n 'boolean | { debounceMs }',\n 'ssl.watch must be a boolean or an object'\n );\n }\n }\n if (config.rejectUnauthorized !== undefined) {\n result.rejectUnauthorized = validateBoolean(\n config.rejectUnauthorized,\n `${path}.rejectUnauthorized`\n );\n }\n\n const hasKey = Boolean(result.key || result.keyFile || result.key_file_name);\n const hasCert = Boolean(result.cert || result.certFile || result.cert_file_name);\n if (hasKey !== hasCert) {\n throw new ConfigValidationError(\n path,\n config,\n 'key + cert',\n 'SSL configuration must supply BOTH a key and a certificate (or neither)'\n );\n }\n\n return result;\n}\n\n/** Size fields accept a number of bytes or a size string ('16kb', '10mb'). */\nfunction validateSize(value: any, path: string): number | string {\n if (typeof value === 'number') return validateNumber(value, path, { min: 0 });\n if (typeof value === 'string') {\n if (!/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb)?$/i.test(value.trim())) {\n throw new ConfigValidationError(path, value, 'size', `Invalid size string: ${value}`);\n }\n return value;\n }\n throw new ConfigValidationError(\n path,\n value,\n 'number|string',\n 'Size must be a number or size string'\n );\n}\n\nfunction validateServerTimeouts(config: any, path: string) {\n if (typeof config !== 'object' || config === null) {\n throw new ConfigValidationError(path, config, 'object', 'timeouts must be an object');\n }\n const result: any = {};\n for (const key of ['request', 'idle', 'keepAlive', 'headers']) {\n if (config[key] !== undefined) {\n result[key] = validateNumber(config[key], `${path}.${key}`, { min: 0 });\n }\n }\n return result;\n}\n\nfunction validateServerLimits(config: any, path: string) {\n if (typeof config !== 'object' || config === null) {\n throw new ConfigValidationError(path, config, 'object', 'limits must be an object');\n }\n const result: any = {};\n for (const key of [\n 'maxHeaderSize',\n 'wsMaxMessageSize',\n 'wsBackpressureLimit',\n 'writeHighWaterMark',\n 'maxPendingBytes',\n ]) {\n if (config[key] !== undefined) result[key] = validateSize(config[key], `${path}.${key}`);\n }\n if (config.maxHeaders !== undefined) {\n result.maxHeaders = validateNumber(config.maxHeaders, `${path}.maxHeaders`, { min: 1 });\n }\n if (config.multipart !== undefined) {\n const m = config.multipart;\n if (typeof m !== 'object' || m === null) {\n throw new ConfigValidationError(\n `${path}.multipart`,\n m,\n 'object',\n 'multipart must be an object'\n );\n }\n const mp: any = {};\n if (m.maxParts !== undefined)\n mp.maxParts = validateNumber(m.maxParts, `${path}.multipart.maxParts`, { min: 1 });\n if (m.maxFiles !== undefined)\n mp.maxFiles = validateNumber(m.maxFiles, `${path}.multipart.maxFiles`, { min: 0 });\n if (m.maxPartHeaderBytes !== undefined)\n mp.maxPartHeaderBytes = validateSize(\n m.maxPartHeaderBytes,\n `${path}.multipart.maxPartHeaderBytes`\n );\n if (m.maxFileSize !== undefined)\n mp.maxFileSize = validateSize(m.maxFileSize, `${path}.multipart.maxFileSize`);\n result.multipart = mp;\n }\n return result;\n}\n\nfunction validateHttp2Config(config: any, path: string) {\n if (typeof config === 'boolean') return config;\n if (typeof config !== 'object' || config === null) {\n throw new ConfigValidationError(\n path,\n config,\n 'boolean|object',\n 'http2 must be a boolean or an options object'\n );\n }\n const result: any = {};\n if (config.allowHTTP1 !== undefined)\n result.allowHTTP1 = validateBoolean(config.allowHTTP1, `${path}.allowHTTP1`);\n if (config.maxSessionMemory !== undefined) {\n result.maxSessionMemory = validateNumber(config.maxSessionMemory, `${path}.maxSessionMemory`, {\n min: 1,\n });\n }\n if (config.settings !== undefined) {\n if (typeof config.settings !== 'object' || config.settings === null) {\n throw new ConfigValidationError(\n `${path}.settings`,\n config.settings,\n 'object',\n 'http2.settings must be an object'\n );\n }\n const s: any = {};\n for (const key of [\n 'maxConcurrentStreams',\n 'initialWindowSize',\n 'maxFrameSize',\n 'maxHeaderListSize',\n 'headerTableSize',\n 'maxHeaderSize',\n ]) {\n if (config.settings[key] !== undefined) {\n s[key] = validateNumber(config.settings[key], `${path}.settings.${key}`, { min: 0 });\n }\n }\n for (const key of ['enablePush', 'enableConnectProtocol']) {\n if (config.settings[key] !== undefined) {\n s[key] = validateBoolean(config.settings[key], `${path}.settings.${key}`);\n }\n }\n result.settings = s;\n }\n return result;\n}\n\n/**\n * Validate service discovery configuration\n */\nfunction validateServiceDiscoveryConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Service discovery configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n type: validateEnum(config.type, ['memory', 'consul', 'kubernetes'], `${path}.type`),\n consulUrl: validateString(config.consulUrl, `${path}.consulUrl`),\n kubernetesNamespace: validateString(config.kubernetesNamespace, `${path}.kubernetesNamespace`),\n healthCheckInterval: validateNumber(config.healthCheckInterval, `${path}.healthCheckInterval`, {\n min: 1000,\n }),\n retryAttempts: validateNumber(config.retryAttempts, `${path}.retryAttempts`, { min: 0 }),\n };\n}\n\n/**\n * Validate database configuration\n */\nfunction validateDatabaseConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Database configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Optional URL\n if (config.url !== undefined) {\n result.url = validateString(config.url, `${path}.url`);\n }\n\n // Optional Redis - only validate if present\n if (config.redis !== undefined) {\n result.redis = validateRedisConfig(config.redis, `${path}.redis`);\n }\n\n // Optional MySQL - only validate if present\n if (config.mysql !== undefined) {\n result.mysql = validateMySQLConfig(config.mysql, `${path}.mysql`);\n }\n\n // Optional PostgreSQL - only validate if present\n if (config.postgresql !== undefined) {\n result.postgresql = validatePostgreSQLConfig(config.postgresql, `${path}.postgresql`);\n }\n\n // Optional SQLite - only validate if present\n if (config.sqlite !== undefined) {\n result.sqlite = validateSQLiteConfig(config.sqlite, `${path}.sqlite`);\n }\n\n // Optional MongoDB - only validate if present\n if (config.mongodb !== undefined) {\n result.mongodb = validateMongoDBConfig(config.mongodb, `${path}.mongodb`);\n }\n\n return result;\n}\n\n/**\n * Validate Redis configuration\n */\nfunction validateRedisConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Redis configuration must be an object'\n );\n }\n\n return {\n url: validateString(config.url, `${path}.url`),\n maxRetries: validateNumber(config.maxRetries, `${path}.maxRetries`, { min: 0 }),\n retryDelay: validateNumber(config.retryDelay, `${path}.retryDelay`, { min: 0 }),\n keyPrefix: validateString(config.keyPrefix, `${path}.keyPrefix`),\n };\n}\n\n/**\n * Validate MySQL configuration\n */\nfunction validateMySQLConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'MySQL configuration must be an object'\n );\n }\n\n const result: any = {\n host: validateString(config.host, `${path}.host`),\n port: validatePort(config.port, `${path}.port`),\n connectionLimit: validateNumber(config.connectionLimit, `${path}.connectionLimit`, { min: 1 }),\n acquireTimeout: validateNumber(config.acquireTimeout, `${path}.acquireTimeout`, { min: 1000 }),\n timeout: validateNumber(config.timeout, `${path}.timeout`, { min: 1000 }),\n };\n\n // Optional fields\n if (config.database !== undefined) {\n result.database = validateString(config.database, `${path}.database`);\n }\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n return result;\n}\n\n/**\n * Validate PostgreSQL configuration\n */\nfunction validatePostgreSQLConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'PostgreSQL configuration must be an object'\n );\n }\n\n const result: any = {\n host: validateString(config.host, `${path}.host`),\n port: validatePort(config.port, `${path}.port`),\n connectionLimit: validateNumber(config.connectionLimit, `${path}.connectionLimit`, { min: 1 }),\n };\n\n // Optional fields\n if (config.database !== undefined) {\n result.database = validateString(config.database, `${path}.database`);\n }\n if (config.user !== undefined) {\n result.user = validateString(config.user, `${path}.user`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n if (config.ssl !== undefined) {\n result.ssl = validateBoolean(config.ssl, `${path}.ssl`);\n }\n\n return result;\n}\n\n/**\n * Validate SQLite configuration\n */\nfunction validateSQLiteConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'SQLite configuration must be an object'\n );\n }\n\n const result: any = {\n filename: validateString(config.filename, `${path}.filename`),\n };\n\n // Optional fields\n if (config.memory !== undefined) {\n result.memory = validateBoolean(config.memory, `${path}.memory`);\n }\n if (config.verbose !== undefined) {\n result.verbose = validateBoolean(config.verbose, `${path}.verbose`);\n }\n\n return result;\n}\n\n/**\n * Validate MongoDB configuration\n */\nfunction validateMongoDBConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'MongoDB configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Either url or host+port\n if (config.url !== undefined) {\n result.url = validateString(config.url, `${path}.url`);\n }\n if (config.host !== undefined) {\n result.host = validateString(config.host, `${path}.host`);\n }\n if (config.port !== undefined) {\n result.port = validatePort(config.port, `${path}.port`);\n }\n if (config.database !== undefined) {\n result.database = validateString(config.database, `${path}.database`);\n }\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n return result;\n}\n\n/**\n * Validate module defaults configuration\n */\nfunction validateModuleDefaultsConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Module defaults configuration must be an object'\n );\n }\n\n const validated: any = {\n cache: validateCacheConfig(config.cache, `${path}.cache`),\n rateLimit: validateRateLimitConfig(config.rateLimit, `${path}.rateLimit`),\n validation: validateValidationConfig(config.validation, `${path}.validation`),\n autoDiscovery: validateAutoDiscoveryConfig(config.autoDiscovery, `${path}.autoDiscovery`),\n };\n\n // Optional apiPrefix\n if (config.apiPrefix !== undefined) {\n if (typeof config.apiPrefix !== 'string') {\n throw new ConfigValidationError(\n `${path}.apiPrefix`,\n config.apiPrefix,\n 'string',\n 'API prefix must be a string'\n );\n }\n validated.apiPrefix = config.apiPrefix;\n }\n\n // Optional session config\n if (config.session !== undefined) {\n validated.session = validateSessionConfig(config.session, `${path}.session`);\n }\n\n return validated;\n}\n\n/**\n * Validate file-based routing configuration.\n * Accepts a boolean shorthand (routing: true/false) or an object\n * ({ enabled, paths }). Defaults to enabled when omitted.\n */\nfunction validateRoutingConfig(\n config: any,\n path: string\n): boolean | { enabled: boolean; paths?: string[] } {\n if (config === undefined || config === null) {\n return true; // Enabled by default\n }\n\n if (typeof config === 'boolean') {\n return config;\n }\n\n if (typeof config === 'object' && !Array.isArray(config)) {\n const result: { enabled: boolean; paths?: string[] } = {\n enabled:\n config.enabled !== undefined ? validateBoolean(config.enabled, `${path}.enabled`) : true,\n };\n if (config.paths !== undefined) {\n result.paths = validateStringArray(config.paths, `${path}.paths`);\n }\n return result;\n }\n\n throw new ConfigValidationError(\n path,\n config,\n 'boolean | { enabled: boolean; paths?: string[] }',\n 'Routing must be a boolean or an object with enabled/paths'\n );\n}\n\n/**\n * Validate auto-discovery configuration\n */\nfunction validateAutoDiscoveryConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Auto-discovery configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n paths: validateStringArray(config.paths, `${path}.paths`),\n patterns: validateStringArray(config.patterns, `${path}.patterns`),\n recursive: validateBoolean(config.recursive, `${path}.recursive`),\n loadingStrategy: validateEnum(\n config.loadingStrategy,\n ['eager', 'lazy', 'conditional'],\n `${path}.loadingStrategy`\n ),\n watchForChanges: validateBoolean(config.watchForChanges, `${path}.watchForChanges`),\n ignorePatterns: validateStringArray(config.ignorePatterns, `${path}.ignorePatterns`),\n loadOrder: validateEnum(\n config.loadOrder,\n ['alphabetical', 'dependency', 'custom'],\n `${path}.loadOrder`\n ),\n failOnError: validateBoolean(config.failOnError, `${path}.failOnError`),\n maxDepth: validateNumber(config.maxDepth, `${path}.maxDepth`),\n };\n}\n\n/**\n * Validate cache configuration\n */\nfunction validateCacheConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Cache configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n defaultTtl: validateNumber(config.defaultTtl, `${path}.defaultTtl`, { min: 0 }),\n maxSize: validateNumber(config.maxSize, `${path}.maxSize`, { min: 1 }),\n strategy: validateEnum(config.strategy, ['lru', 'lfu', 'fifo'], `${path}.strategy`),\n };\n}\n\n/**\n * Validate rate limit configuration\n */\nfunction validateRateLimitConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Rate limit configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n defaultRequests: validateNumber(config.defaultRequests, `${path}.defaultRequests`, { min: 1 }),\n defaultWindow: validateNumber(config.defaultWindow, `${path}.defaultWindow`, { min: 1000 }),\n skipSuccessfulRequests: validateBoolean(\n config.skipSuccessfulRequests,\n `${path}.skipSuccessfulRequests`\n ),\n skipFailedRequests: validateBoolean(config.skipFailedRequests, `${path}.skipFailedRequests`),\n };\n}\n\n/**\n * Validate validation configuration\n */\nfunction validateValidationConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Validation configuration must be an object'\n );\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n stripUnknown: validateBoolean(config.stripUnknown, `${path}.stripUnknown`),\n abortEarly: validateBoolean(config.abortEarly, `${path}.abortEarly`),\n };\n\n // Optional allowUnknown\n if (config.allowUnknown !== undefined) {\n validated.allowUnknown = validateBoolean(config.allowUnknown, `${path}.allowUnknown`);\n }\n\n // Optional onError handler\n if (config.onError !== undefined) {\n if (typeof config.onError !== 'function') {\n throw new ConfigValidationError(\n `${path}.onError`,\n typeof config.onError,\n 'function',\n 'Validation error handler must be a function'\n );\n }\n validated.onError = config.onError;\n }\n\n return validated;\n}\n\n/**\n * Validate session configuration\n */\nfunction validateSessionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Session configuration must be an object'\n );\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n store: validateEnum(config.store, ['memory', 'redis', 'file'], `${path}.store`),\n };\n\n // Optional fields\n if (config.storeOptions !== undefined) {\n validated.storeOptions = config.storeOptions; // Complex object, allow through\n }\n if (config.secret !== undefined) {\n validated.secret = validateString(config.secret, `${path}.secret`);\n }\n if (config.name !== undefined) {\n validated.name = validateString(config.name, `${path}.name`);\n }\n if (config.rolling !== undefined) {\n validated.rolling = validateBoolean(config.rolling, `${path}.rolling`);\n }\n if (config.resave !== undefined) {\n validated.resave = validateBoolean(config.resave, `${path}.resave`);\n }\n if (config.saveUninitialized !== undefined) {\n validated.saveUninitialized = validateBoolean(\n config.saveUninitialized,\n `${path}.saveUninitialized`\n );\n }\n if (config.cookie !== undefined) {\n validated.cookie = config.cookie; // Complex object, allow through\n }\n if (config.proxy !== undefined) {\n validated.proxy = validateBoolean(config.proxy, `${path}.proxy`);\n }\n if (config.unset !== undefined) {\n validated.unset = validateEnum(config.unset, ['destroy', 'keep'], `${path}.unset`);\n }\n\n return validated;\n}\n\n/**\n * Validate logging configuration\n */\nfunction validateLoggingConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging configuration must be an object'\n );\n }\n\n return {\n level: validateEnum(config.level, ['debug', 'info', 'warn', 'error', 'fatal'], `${path}.level`),\n format: validateEnum(config.format, ['pretty', 'json', 'compact'], `${path}.format`),\n enableColors: validateBoolean(config.enableColors, `${path}.enableColors`),\n enableTimestamp: validateBoolean(config.enableTimestamp, `${path}.enableTimestamp`),\n enableContext: validateBoolean(config.enableContext, `${path}.enableContext`),\n enableMetadata: validateBoolean(config.enableMetadata, `${path}.enableMetadata`),\n enablePerformance: validateBoolean(config.enablePerformance, `${path}.enablePerformance`),\n outputs: validateLoggingOutputsConfig(config.outputs, `${path}.outputs`),\n };\n}\n\n/**\n * Validate logging outputs configuration\n */\nfunction validateLoggingOutputsConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging outputs configuration must be an object'\n );\n }\n\n return {\n console: validateBoolean(config.console, `${path}.console`),\n file: validateLoggingFileConfig(config.file, `${path}.file`),\n webhook: validateLoggingWebhookConfig(config.webhook, `${path}.webhook`),\n };\n}\n\n/**\n * Validate logging file configuration\n */\nfunction validateLoggingFileConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging file configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n path: validateString(config.path, `${path}.path`),\n maxSize: validateString(config.maxSize, `${path}.maxSize`),\n maxFiles: validateNumber(config.maxFiles, `${path}.maxFiles`, { min: 1 }),\n };\n}\n\n/**\n * Validate logging webhook configuration\n */\nfunction validateLoggingWebhookConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Logging webhook configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n headers: validateObject(config.headers, `${path}.headers`),\n };\n\n // Optional URL\n if (config.url !== undefined) {\n result.url = validateString(config.url, `${path}.url`);\n }\n\n return result;\n}\n\n/**\n * Validate security configuration\n */\nfunction validateSecurityConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Security configuration must be an object'\n );\n }\n\n const validated: any = {\n cors: validateCorsConfig(config.cors, `${path}.cors`),\n helmet: validateHelmetConfig(config.helmet, `${path}.helmet`),\n rateLimit: validateSecurityRateLimitConfig(config.rateLimit, `${path}.rateLimit`),\n };\n\n // Optional CSRF config\n if (config.csrf !== undefined) {\n validated.csrf = validateCsrfConfig(config.csrf, `${path}.csrf`);\n }\n\n // Optional CSP config\n if (config.csp !== undefined) {\n validated.csp = validateCspConfig(config.csp, `${path}.csp`);\n }\n\n return validated;\n}\n\n/**\n * Validate CORS configuration\n */\nfunction validateCorsConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'CORS configuration must be an object');\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n origin: validateCorsOrigin(config.origin, `${path}.origin`),\n methods: validateStringArray(config.methods, `${path}.methods`),\n allowedHeaders: validateStringArray(config.allowedHeaders, `${path}.allowedHeaders`),\n credentials: validateBoolean(config.credentials, `${path}.credentials`),\n };\n\n // Optional fields\n if (config.exposedHeaders !== undefined) {\n validated.exposedHeaders = validateStringArray(config.exposedHeaders, `${path}.exposedHeaders`);\n }\n if (config.maxAge !== undefined) {\n validated.maxAge = validateNumber(config.maxAge, `${path}.maxAge`);\n }\n if (config.preflightContinue !== undefined) {\n validated.preflightContinue = validateBoolean(\n config.preflightContinue,\n `${path}.preflightContinue`\n );\n }\n\n return validated;\n}\n\n/**\n * Validate CORS origin (can be string, array, boolean, or function)\n */\nfunction validateCorsOrigin(\n value: any,\n path: string\n): string | string[] | boolean | OriginFunction {\n if (typeof value === 'boolean' || typeof value === 'string') {\n return value;\n }\n if (typeof value === 'function') {\n return value as OriginFunction;\n }\n if (Array.isArray(value)) {\n return validateStringArray(value, path);\n }\n throw new ConfigValidationError(\n path,\n value,\n 'string | string[] | boolean | function',\n 'Must be a string, array of strings, boolean, or function'\n );\n}\n\n/**\n * Validate helmet configuration\n */\nfunction validateHelmetConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Helmet configuration must be an object'\n );\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n // Simplified options (backward compatible)\n if (config.contentSecurityPolicy !== undefined) {\n if (typeof config.contentSecurityPolicy === 'boolean') {\n validated.contentSecurityPolicy = config.contentSecurityPolicy;\n } else if (typeof config.contentSecurityPolicy === 'object') {\n validated.contentSecurityPolicy = config.contentSecurityPolicy;\n }\n }\n if (config.hsts !== undefined) {\n validated.hsts = validateBoolean(config.hsts, `${path}.hsts`);\n }\n if (config.noSniff !== undefined) {\n validated.noSniff = validateBoolean(config.noSniff, `${path}.noSniff`);\n }\n if (config.frameguard !== undefined) {\n validated.frameguard = validateBoolean(config.frameguard, `${path}.frameguard`);\n }\n\n // Detailed options (for advanced configuration)\n if (config.xFrameOptions !== undefined) {\n validated.xFrameOptions = config.xFrameOptions;\n }\n if (config.xContentTypeOptions !== undefined) {\n validated.xContentTypeOptions = validateBoolean(\n config.xContentTypeOptions,\n `${path}.xContentTypeOptions`\n );\n }\n if (config.xXssProtection !== undefined) {\n validated.xXssProtection = validateBoolean(config.xXssProtection, `${path}.xXssProtection`);\n }\n if (config.referrerPolicy !== undefined) {\n validated.referrerPolicy = config.referrerPolicy;\n }\n if (config.strictTransportSecurity !== undefined) {\n validated.strictTransportSecurity = config.strictTransportSecurity;\n }\n if (config.xDownloadOptions !== undefined) {\n validated.xDownloadOptions = validateBoolean(\n config.xDownloadOptions,\n `${path}.xDownloadOptions`\n );\n }\n if (config.xPermittedCrossDomainPolicies !== undefined) {\n validated.xPermittedCrossDomainPolicies = validateBoolean(\n config.xPermittedCrossDomainPolicies,\n `${path}.xPermittedCrossDomainPolicies`\n );\n }\n\n return validated;\n}\n\n/**\n * Validate CSRF configuration\n */\nfunction validateCsrfConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'CSRF configuration must be an object');\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n if (config.secret !== undefined) {\n validated.secret = validateString(config.secret, `${path}.secret`);\n }\n if (config.tokenLength !== undefined) {\n validated.tokenLength = validateNumber(config.tokenLength, `${path}.tokenLength`);\n }\n if (config.cookieName !== undefined) {\n validated.cookieName = validateString(config.cookieName, `${path}.cookieName`);\n }\n if (config.headerName !== undefined) {\n validated.headerName = validateString(config.headerName, `${path}.headerName`);\n }\n if (config.ignoreMethods !== undefined) {\n validated.ignoreMethods = validateStringArray(config.ignoreMethods, `${path}.ignoreMethods`);\n }\n if (config.sameSite !== undefined) {\n validated.sameSite = validateBoolean(config.sameSite, `${path}.sameSite`);\n }\n\n return validated;\n}\n\n/**\n * Validate CSP configuration\n */\nfunction validateCspConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'CSP configuration must be an object');\n }\n\n const validated: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n if (config.directives !== undefined) {\n validated.directives = config.directives; // Complex object, allow through\n }\n if (config.reportOnly !== undefined) {\n validated.reportOnly = validateBoolean(config.reportOnly, `${path}.reportOnly`);\n }\n if (config.reportUri !== undefined) {\n validated.reportUri = validateString(config.reportUri, `${path}.reportUri`);\n }\n if (config.nonce !== undefined) {\n validated.nonce = validateBoolean(config.nonce, `${path}.nonce`);\n }\n\n return validated;\n}\n\n/**\n * Validate security rate limit configuration\n */\nfunction validateSecurityRateLimitConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Security rate limit configuration must be an object'\n );\n }\n\n return {\n global: validateGlobalRateLimitConfig(config.global, `${path}.global`),\n };\n}\n\n/**\n * Validate global rate limit configuration\n */\nfunction validateGlobalRateLimitConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Global rate limit configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n requests: validateNumber(config.requests, `${path}.requests`, { min: 1 }),\n window: validateNumber(config.window, `${path}.window`, { min: 1000 }),\n };\n}\n\n/**\n * Validate external services configuration\n */\nfunction validateExternalServicesConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'External services configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Optional services - only validate if present\n if (config.stripe !== undefined) {\n result.stripe = validateStripeConfig(config.stripe, `${path}.stripe`);\n }\n if (config.paypal !== undefined) {\n result.paypal = validatePayPalConfig(config.paypal, `${path}.paypal`);\n }\n if (config.smtp !== undefined) {\n result.smtp = validateSMTPConfig(config.smtp, `${path}.smtp`);\n }\n\n return result;\n}\n\n/**\n * Validate Stripe configuration\n */\nfunction validateStripeConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Stripe configuration must be an object'\n );\n }\n\n const result: any = {};\n\n // Optional fields\n if (config.secretKey !== undefined) {\n result.secretKey = validateString(config.secretKey, `${path}.secretKey`);\n }\n if (config.publishableKey !== undefined) {\n result.publishableKey = validateString(config.publishableKey, `${path}.publishableKey`);\n }\n if (config.webhookSecret !== undefined) {\n result.webhookSecret = validateString(config.webhookSecret, `${path}.webhookSecret`);\n }\n if (config.apiVersion !== undefined) {\n result.apiVersion = validateString(config.apiVersion, `${path}.apiVersion`);\n } else {\n result.apiVersion = '2023-10-16'; // Default API version\n }\n\n return result;\n}\n\n/**\n * Validate PayPal configuration\n */\nfunction validatePayPalConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'PayPal configuration must be an object'\n );\n }\n\n const result: any = {\n environment: validateEnum(config.environment, ['sandbox', 'production'], `${path}.environment`),\n };\n\n // Optional fields\n if (config.clientId !== undefined) {\n result.clientId = validateString(config.clientId, `${path}.clientId`);\n }\n if (config.clientSecret !== undefined) {\n result.clientSecret = validateString(config.clientSecret, `${path}.clientSecret`);\n }\n if (config.webhookId !== undefined) {\n result.webhookId = validateString(config.webhookId, `${path}.webhookId`);\n }\n\n return result;\n}\n\n/**\n * Validate SMTP configuration\n */\nfunction validateSMTPConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'SMTP configuration must be an object');\n }\n\n const result: any = {\n port: validatePort(config.port, `${path}.port`),\n secure: validateBoolean(config.secure, `${path}.secure`),\n };\n\n // Optional fields\n if (config.host !== undefined) {\n result.host = validateString(config.host, `${path}.host`);\n }\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n return result;\n}\n\n/**\n * Validate performance configuration\n */\nfunction validatePerformanceConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Performance configuration must be an object'\n );\n }\n\n return {\n compression: validateCompressionConfig(config.compression, `${path}.compression`),\n circuitBreaker: validateCircuitBreakerConfig(config.circuitBreaker, `${path}.circuitBreaker`),\n clustering: validateClusteringConfig(config.clustering, `${path}.clustering`),\n };\n}\n\n/**\n * Validate compression configuration\n */\nfunction validateCompressionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Compression configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n level: validateNumber(config.level, `${path}.level`, { min: 1, max: 9 }),\n threshold: validateNumber(config.threshold, `${path}.threshold`, { min: 0 }),\n };\n if (config.maxInlineBytes !== undefined) {\n result.maxInlineBytes = validateNumber(config.maxInlineBytes, `${path}.maxInlineBytes`, {\n min: 0,\n });\n }\n if (config.encodings !== undefined) {\n if (!Array.isArray(config.encodings)) {\n throw new ConfigValidationError(\n `${path}.encodings`,\n config.encodings,\n 'array',\n 'encodings must be an array'\n );\n }\n result.encodings = config.encodings.map((e: any) =>\n validateEnum(e, ['br', 'gzip', 'deflate'], `${path}.encodings[]`)\n );\n }\n return result;\n}\n\n/**\n * Validate circuit breaker configuration\n */\nfunction validateCircuitBreakerConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Circuit breaker configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n failureThreshold: validateNumber(config.failureThreshold, `${path}.failureThreshold`, {\n min: 1,\n }),\n resetTimeout: validateNumber(config.resetTimeout, `${path}.resetTimeout`, { min: 1000 }),\n monitoringPeriod: validateNumber(config.monitoringPeriod, `${path}.monitoringPeriod`, {\n min: 1000,\n }),\n };\n}\n\n/**\n * Validate clustering configuration\n */\nfunction validateClusteringConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Clustering configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n // Workers can be number or 'auto'\n if (typeof config.workers === 'string' && config.workers === 'auto') {\n result.workers = 'auto';\n } else {\n result.workers = validateNumber(config.workers, `${path}.workers`, { min: 1 });\n }\n\n // Optional memoryPerWorkerGB\n if (config.memoryPerWorkerGB !== undefined) {\n result.memoryPerWorkerGB = validateNumber(\n config.memoryPerWorkerGB,\n `${path}.memoryPerWorkerGB`,\n { min: 0.1 }\n );\n }\n\n // Optional mode (reuseport or proxy)\n if (config.mode !== undefined) {\n if (config.mode !== 'reuseport' && config.mode !== 'proxy') {\n throw new ConfigValidationError(\n `${path}.mode`,\n config.mode,\n \"'reuseport' or 'proxy'\",\n \"Clustering mode must be 'reuseport' (fast, connection hashing) or 'proxy' (slower, strict round-robin)\"\n );\n }\n result.mode = config.mode;\n } else {\n result.mode = 'reuseport'; // Default to reuseport for performance\n }\n\n return result;\n}\n\n/**\n * Validate WebSocket configuration\n */\nfunction validateWebSocketConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'WebSocket configuration must be an object'\n );\n }\n\n const result: any = {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n };\n\n // Optional fields\n if (config.adapter !== undefined) {\n result.adapter = validateString(config.adapter, `${path}.adapter`);\n }\n if (config.compression !== undefined) {\n result.compression = validateBoolean(config.compression, `${path}.compression`);\n }\n if (config.customIdGenerator !== undefined) {\n result.customIdGenerator = config.customIdGenerator; // Function - no validation needed\n }\n if (config.options !== undefined) {\n result.options = validateWebSocketOptions(config.options, `${path}.options`);\n }\n\n return result;\n}\n\n/**\n * Validate WebSocket options\n */\nfunction validateWebSocketOptions(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(path, config, 'object', 'WebSocket options must be an object');\n }\n\n const result: any = {};\n\n if (config.cors !== undefined) {\n result.cors = validateWebSocketCorsOptions(config.cors, `${path}.cors`);\n }\n if (config.path !== undefined) {\n result.path = validateString(config.path, `${path}.path`);\n }\n if (config.maxPayloadLength !== undefined) {\n result.maxPayloadLength = validateNumber(config.maxPayloadLength, `${path}.maxPayloadLength`, {\n min: 1024,\n });\n }\n\n return result;\n}\n\n/**\n * Validate WebSocket CORS options\n */\nfunction validateWebSocketCorsOptions(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'WebSocket CORS options must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.origin !== undefined) {\n result.origin = validateCorsOrigin(config.origin, `${path}.origin`);\n }\n if (config.credentials !== undefined) {\n result.credentials = validateBoolean(config.credentials, `${path}.credentials`);\n }\n\n return result;\n}\n\n// Basic validation functions\n\nfunction validatePort(value: any, path: string): number {\n const num = Number(value);\n if (isNaN(num) || num < 1 || num > 65535) {\n throw new ConfigValidationError(\n path,\n value,\n 'number (1-65535)',\n 'Must be a number between 1 and 65535'\n );\n }\n return num;\n}\n\nfunction validateBoolean(value: any, path: string): boolean {\n if (value === 'true' || value === true) return true;\n if (value === 'false' || value === false) return false;\n if (value === '1' || value === 1) return true;\n if (value === '0' || value === 0) return false;\n throw new ConfigValidationError(\n path,\n value,\n 'boolean',\n 'Must be a boolean (true/false) or numeric (1/0)'\n );\n}\n\nfunction validateNumber(\n value: any,\n path: string,\n options: { min?: number; max?: number } = {}\n): number {\n const num = Number(value);\n if (isNaN(num)) {\n throw new ConfigValidationError(path, value, 'number', 'Must be a valid number');\n }\n if (options.min !== undefined && num < options.min) {\n throw new ConfigValidationError(\n path,\n value,\n `number >= ${options.min}`,\n `Must be at least ${options.min}`\n );\n }\n if (options.max !== undefined && num > options.max) {\n throw new ConfigValidationError(\n path,\n value,\n `number <= ${options.max}`,\n `Must be at most ${options.max}`\n );\n }\n return num;\n}\n\nfunction validateString(value: any, path: string): string {\n if (typeof value !== 'string') {\n throw new ConfigValidationError(path, value, 'string', 'Must be a string');\n }\n return value;\n}\n\nfunction validateEnum<T extends string>(value: any, validValues: readonly T[], path: string): T {\n const str = validateString(value, path);\n\n // For small arrays (< 10 items), linear search is faster than Set\n // For larger arrays, we could use Set, but most enums in config are small\n let found = false;\n const len = validValues.length;\n for (let i = 0; i < len; i++) {\n if (validValues[i] === str) {\n found = true;\n break;\n }\n }\n\n if (!found) {\n throw new ConfigValidationError(\n path,\n value,\n `one of: ${validValues.join(', ')}`,\n `Must be one of: ${validValues.join(', ')}`\n );\n }\n return str as T;\n}\n\nfunction validateStringArray(value: any, path: string): string[] {\n if (!Array.isArray(value)) {\n // Try to parse comma-separated string\n if (typeof value === 'string') {\n // Avoid chained map().filter() - use single pass\n const parts = value.split(',');\n const result: string[] = [];\n for (const part of parts) {\n const trimmed = part.trim();\n if (trimmed.length > 0) {\n result.push(trimmed);\n }\n }\n return result;\n }\n throw new ConfigValidationError(\n path,\n value,\n 'string[]',\n 'Must be an array or comma-separated string'\n );\n }\n\n // Avoid creating intermediate arrays with map\n const len = value.length;\n const result: string[] = new Array(len);\n for (let i = 0; i < len; i++) {\n result[i] = validateString(value[i], `${path}[${i}]`);\n }\n return result;\n}\n\nfunction validateObject(value: any, path: string): Record<string, string> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ConfigValidationError(path, value, 'object', 'Must be an object');\n }\n return value;\n}\n\n/**\n * Validate queue configuration\n */\nfunction validateQueueConfig(config: any, path: string) {\n if (config === undefined || config === null) {\n return undefined;\n }\n\n if (typeof config !== 'object' || Array.isArray(config)) {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.adapter !== undefined) {\n const validAdapters = ['bull', 'rabbitmq', 'sqs', 'kafka', 'memory'];\n if (!validAdapters.includes(config.adapter)) {\n throw new ConfigValidationError(\n `${path}.adapter`,\n config.adapter,\n 'string',\n `Must be one of: ${validAdapters.join(', ')}`\n );\n }\n result.adapter = config.adapter;\n }\n\n if (config.connection !== undefined) {\n result.connection = validateQueueConnectionConfig(config.connection, `${path}.connection`);\n }\n\n if (config.concurrency !== undefined) {\n result.concurrency = validateNumber(config.concurrency, `${path}.concurrency`, { min: 1 });\n }\n\n if (config.retry !== undefined) {\n result.retry = validateQueueRetryConfig(config.retry, `${path}.retry`);\n }\n\n if (config.deadLetterQueue !== undefined) {\n result.deadLetterQueue = validateQueueDeadLetterConfig(\n config.deadLetterQueue,\n `${path}.deadLetterQueue`\n );\n }\n\n if (config.defaultJobOptions !== undefined) {\n result.defaultJobOptions = validateQueueDefaultJobOptions(\n config.defaultJobOptions,\n `${path}.defaultJobOptions`\n );\n }\n\n if (config.prefix !== undefined) {\n result.prefix = validateString(config.prefix, `${path}.prefix`);\n }\n\n if (config.limiter !== undefined) {\n result.limiter = validateQueueLimiterConfig(config.limiter, `${path}.limiter`);\n }\n\n return result;\n}\n\n/**\n * Validate queue connection configuration\n */\nfunction validateQueueConnectionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue connection configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.host !== undefined) {\n result.host = validateString(config.host, `${path}.host`);\n }\n\n if (config.port !== undefined) {\n result.port = validatePort(config.port, `${path}.port`);\n }\n\n if (config.username !== undefined) {\n result.username = validateString(config.username, `${path}.username`);\n }\n\n if (config.password !== undefined) {\n result.password = validateString(config.password, `${path}.password`);\n }\n\n if (config.database !== undefined) {\n result.database = validateNumber(config.database, `${path}.database`, { min: 0 });\n }\n\n if (config.brokers !== undefined) {\n result.brokers = validateStringArray(config.brokers, `${path}.brokers`);\n }\n\n if (config.groupId !== undefined) {\n result.groupId = validateString(config.groupId, `${path}.groupId`);\n }\n\n if (config.region !== undefined) {\n result.region = validateString(config.region, `${path}.region`);\n }\n\n if (config.queueUrl !== undefined) {\n result.queueUrl = validateString(config.queueUrl, `${path}.queueUrl`);\n }\n\n return result;\n}\n\n/**\n * Validate queue retry configuration\n */\nfunction validateQueueRetryConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue retry configuration must be an object'\n );\n }\n\n const validBackoffStrategies = ['fixed', 'exponential', 'linear'];\n\n return {\n maxAttempts: validateNumber(config.maxAttempts, `${path}.maxAttempts`, { min: 1 }),\n backoff:\n config.backoff && validBackoffStrategies.includes(config.backoff)\n ? config.backoff\n : (() => {\n throw new ConfigValidationError(\n `${path}.backoff`,\n config.backoff,\n 'string',\n `Must be one of: ${validBackoffStrategies.join(', ')}`\n );\n })(),\n initialDelay: validateNumber(config.initialDelay, `${path}.initialDelay`, { min: 0 }),\n maxDelay:\n config.maxDelay !== undefined\n ? validateNumber(config.maxDelay, `${path}.maxDelay`, { min: 0 })\n : undefined,\n };\n}\n\n/**\n * Validate queue dead letter queue configuration\n */\nfunction validateQueueDeadLetterConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue dead letter configuration must be an object'\n );\n }\n\n return {\n enabled: validateBoolean(config.enabled, `${path}.enabled`),\n maxRetries: validateNumber(config.maxRetries, `${path}.maxRetries`, { min: 1 }),\n queueName:\n config.queueName !== undefined\n ? validateString(config.queueName, `${path}.queueName`)\n : undefined,\n };\n}\n\n/**\n * Validate queue default job options\n */\nfunction validateQueueDefaultJobOptions(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue default job options must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.removeOnComplete !== undefined) {\n result.removeOnComplete =\n typeof config.removeOnComplete === 'boolean'\n ? config.removeOnComplete\n : validateNumber(config.removeOnComplete, `${path}.removeOnComplete`, { min: 0 });\n }\n\n if (config.removeOnFail !== undefined) {\n result.removeOnFail =\n typeof config.removeOnFail === 'boolean'\n ? config.removeOnFail\n : validateNumber(config.removeOnFail, `${path}.removeOnFail`, { min: 0 });\n }\n\n if (config.attempts !== undefined) {\n result.attempts = validateNumber(config.attempts, `${path}.attempts`, { min: 1 });\n }\n\n if (config.backoff !== undefined) {\n const validBackoffTypes = ['fixed', 'exponential', 'linear'];\n if (!config.backoff.type || !validBackoffTypes.includes(config.backoff.type)) {\n throw new ConfigValidationError(\n `${path}.backoff.type`,\n config.backoff.type,\n 'string',\n `Must be one of: ${validBackoffTypes.join(', ')}`\n );\n }\n result.backoff = {\n type: config.backoff.type,\n delay: validateNumber(config.backoff.delay, `${path}.backoff.delay`, { min: 0 }),\n };\n }\n\n return result;\n}\n\n/**\n * Validate queue limiter configuration\n */\nfunction validateQueueLimiterConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Queue limiter configuration must be an object'\n );\n }\n\n return {\n max: validateNumber(config.max, `${path}.max`, { min: 1 }),\n duration: validateNumber(config.duration, `${path}.duration`, { min: 1 }),\n };\n}\n\n/**\n * Validate jobs configuration\n */\nfunction validateJobsConfig(config: any, path: string) {\n if (config === undefined || config === null) {\n return undefined;\n }\n\n if (typeof config !== 'object' || Array.isArray(config)) {\n throw new ConfigValidationError(path, config, 'object', 'Jobs configuration must be an object');\n }\n\n const result: any = {};\n\n if (config.enabled !== undefined) {\n result.enabled = validateBoolean(config.enabled, `${path}.enabled`);\n }\n if (config.maxConcurrentJobs !== undefined) {\n result.maxConcurrentJobs = validateNumber(\n config.maxConcurrentJobs,\n `${path}.maxConcurrentJobs`,\n { min: 1 }\n );\n }\n if (config.gracefulShutdownTimeout !== undefined) {\n result.gracefulShutdownTimeout = validateNumber(\n config.gracefulShutdownTimeout,\n `${path}.gracefulShutdownTimeout`,\n { min: 0 }\n );\n }\n if (config.leaderElection !== undefined) {\n result.leaderElection = validateJobsLeaderElectionConfig(\n config.leaderElection,\n `${path}.leaderElection`\n );\n }\n if (config.executor !== undefined) {\n result.executor = validateJobsExecutorConfig(config.executor, `${path}.executor`);\n }\n if (config.stateManager !== undefined) {\n result.stateManager = validateJobsStateManagerConfig(\n config.stateManager,\n `${path}.stateManager`\n );\n }\n\n return result;\n}\n\n/**\n * Validate jobs leader election configuration\n */\nfunction validateJobsLeaderElectionConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Jobs leader election configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.enabled !== undefined) {\n result.enabled = validateBoolean(config.enabled, `${path}.enabled`);\n }\n if (config.strategy !== undefined) {\n result.strategy = validateEnum(config.strategy, ['file', 'redis', 'none'], `${path}.strategy`);\n }\n if (config.lockPath !== undefined) {\n result.lockPath = validateString(config.lockPath, `${path}.lockPath`);\n }\n if (config.lockTimeout !== undefined) {\n result.lockTimeout = validateNumber(config.lockTimeout, `${path}.lockTimeout`, { min: 1000 });\n }\n if (config.heartbeatInterval !== undefined) {\n result.heartbeatInterval = validateNumber(\n config.heartbeatInterval,\n `${path}.heartbeatInterval`,\n { min: 1000 }\n );\n }\n\n return result;\n}\n\n/**\n * Validate jobs executor configuration\n */\nfunction validateJobsExecutorConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Jobs executor configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.maxRetries !== undefined) {\n result.maxRetries = validateNumber(config.maxRetries, `${path}.maxRetries`, { min: 0 });\n }\n if (config.retryDelay !== undefined) {\n result.retryDelay = validateNumber(config.retryDelay, `${path}.retryDelay`, { min: 0 });\n }\n if (config.retryBackoff !== undefined) {\n result.retryBackoff = validateEnum(\n config.retryBackoff,\n ['linear', 'exponential'],\n `${path}.retryBackoff`\n );\n }\n if (config.retryBackoffMultiplier !== undefined) {\n result.retryBackoffMultiplier = validateNumber(\n config.retryBackoffMultiplier,\n `${path}.retryBackoffMultiplier`,\n { min: 1 }\n );\n }\n if (config.maxRetryDelay !== undefined) {\n result.maxRetryDelay = validateNumber(config.maxRetryDelay, `${path}.maxRetryDelay`, {\n min: 0,\n });\n }\n if (config.timeout !== undefined) {\n result.timeout = validateNumber(config.timeout, `${path}.timeout`, { min: 0 });\n }\n if (config.enableCircuitBreaker !== undefined) {\n result.enableCircuitBreaker = validateBoolean(\n config.enableCircuitBreaker,\n `${path}.enableCircuitBreaker`\n );\n }\n if (config.circuitBreakerThreshold !== undefined) {\n result.circuitBreakerThreshold = validateNumber(\n config.circuitBreakerThreshold,\n `${path}.circuitBreakerThreshold`,\n { min: 1 }\n );\n }\n if (config.circuitBreakerResetTimeout !== undefined) {\n result.circuitBreakerResetTimeout = validateNumber(\n config.circuitBreakerResetTimeout,\n `${path}.circuitBreakerResetTimeout`,\n { min: 1000 }\n );\n }\n if (config.enableMemoryMonitoring !== undefined) {\n result.enableMemoryMonitoring = validateBoolean(\n config.enableMemoryMonitoring,\n `${path}.enableMemoryMonitoring`\n );\n }\n if (config.memoryThreshold !== undefined) {\n result.memoryThreshold = validateNumber(config.memoryThreshold, `${path}.memoryThreshold`, {\n min: 1,\n });\n }\n\n return result;\n}\n\n/**\n * Validate jobs state manager configuration\n */\nfunction validateJobsStateManagerConfig(config: any, path: string) {\n if (!config || typeof config !== 'object') {\n throw new ConfigValidationError(\n path,\n config,\n 'object',\n 'Jobs state manager configuration must be an object'\n );\n }\n\n const result: any = {};\n\n if (config.persistPath !== undefined) {\n result.persistPath = validateString(config.persistPath, `${path}.persistPath`);\n }\n if (config.historySize !== undefined) {\n result.historySize = validateNumber(config.historySize, `${path}.historySize`, { min: 1 });\n }\n if (config.persistInterval !== undefined) {\n result.persistInterval = validateNumber(config.persistInterval, `${path}.persistInterval`, {\n min: 1000,\n });\n }\n if (config.enableAutoPersist !== undefined) {\n result.enableAutoPersist = validateBoolean(\n config.enableAutoPersist,\n `${path}.enableAutoPersist`\n );\n }\n if (config.enableRecovery !== undefined) {\n result.enableRecovery = validateBoolean(config.enableRecovery, `${path}.enableRecovery`);\n }\n\n return result;\n}\n\n/**\n * Provide helpful validation hints based on the error\n */\nfunction provideValidationHints(error: ConfigValidationError): void {\n if (error.field.includes('port')) {\n logger.error(' 💡 Hint: Ports must be numbers between 1 and 65535');\n }\n if (error.field.includes('url')) {\n logger.error(' 💡 Hint: URLs must include protocol (http:// or https://)');\n }\n if (error.field.includes('environment')) {\n logger.error(' 💡 Hint: NODE_ENV must be one of: development, staging, production');\n }\n if (error.field.includes('level')) {\n logger.error(' 💡 Hint: Log level must be one of: debug, info, warn, error, fatal');\n }\n}\n"]}