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
JavaScript
;
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