UNPKG

logs-interceptor

Version:

High-performance, production-ready log interceptor for Node.js applications with Loki integration. Built with Clean Architecture principles. Supports Node.js, Browser, and Node-RED.

124 lines 4.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConfigService = void 0; class ConfigService { /** * Validate configuration */ static validate(config) { const errors = []; if (!config.transport?.url) { errors.push('Transport URL is required'); } if (!config.transport?.tenantId) { errors.push('Tenant ID is required'); } if (!config.appName) { errors.push('App name is required'); } if (config.transport?.url) { try { new URL(config.transport.url); } catch { errors.push('Transport URL must be a valid URL'); } } if (config.buffer?.maxSize !== undefined && config.buffer.maxSize <= 0) { errors.push('Buffer max size must be greater than 0'); } if (config.buffer?.flushInterval !== undefined && config.buffer.flushInterval <= 0) { errors.push('Flush interval must be greater than 0'); } if (config.filter?.samplingRate !== undefined) { const rate = config.filter.samplingRate; if (rate < 0 || rate > 1) { errors.push('Sampling rate must be between 0 and 1'); } } return errors; } /** * Resolve configuration with defaults */ static resolve(config) { return { transport: this.resolveTransport(config.transport), appName: config.appName, version: config.version ?? '1.0.0', environment: config.environment ?? 'production', labels: config.labels ?? {}, dynamicLabels: config.dynamicLabels ?? {}, buffer: this.resolveBuffer(config.buffer), filter: this.resolveFilter(config.filter), circuitBreaker: this.resolveCircuitBreaker(config.circuitBreaker), integrations: config.integrations ?? {}, performance: this.resolvePerformance(config.performance), enableMetrics: config.enableMetrics ?? true, enableHealthCheck: config.enableHealthCheck ?? true, interceptConsole: config.interceptConsole ?? false, preserveOriginalConsole: config.preserveOriginalConsole ?? true, debug: config.debug ?? false, silentErrors: config.silentErrors ?? false, }; } static resolveTransport(transport) { return { url: transport?.url ?? '', tenantId: transport?.tenantId ?? '', authToken: transport?.authToken ?? '', timeout: transport?.timeout ?? 5000, maxRetries: transport?.maxRetries ?? 3, retryDelay: transport?.retryDelay ?? 1000, compression: transport?.compression ?? true, }; } static resolveBuffer(buffer) { return { maxSize: buffer?.maxSize ?? 100, flushInterval: buffer?.flushInterval ?? 5000, maxAge: buffer?.maxAge ?? 30000, autoFlush: buffer?.autoFlush ?? true, maxMemoryMB: buffer?.maxMemoryMB ?? 50, }; } static resolveFilter(filter) { return { levels: filter?.levels ?? ['debug', 'info', 'warn', 'error', 'fatal'], patterns: filter?.patterns ?? [], samplingRate: filter?.samplingRate ?? 1.0, maxMessageLength: filter?.maxMessageLength ?? 8192, sanitize: filter?.sanitize ?? true, sensitivePatterns: filter?.sensitivePatterns ?? [ /password/i, /token/i, /secret/i, /api[_-]?key/i, /authorization/i, /credit[_-]?card/i, /ssn/i, /cpf/i, ], }; } static resolveCircuitBreaker(circuitBreaker) { return { enabled: circuitBreaker?.enabled ?? true, failureThreshold: circuitBreaker?.failureThreshold ?? 5, resetTimeout: circuitBreaker?.resetTimeout ?? 60000, halfOpenRequests: circuitBreaker?.halfOpenRequests ?? 3, }; } static resolvePerformance(performance) { return { useWorkers: performance?.useWorkers ?? false, maxConcurrentFlushes: performance?.maxConcurrentFlushes ?? 3, compressionLevel: performance?.compressionLevel ?? 6, }; } } exports.ConfigService = ConfigService; //# sourceMappingURL=ConfigService.js.map