UNPKG

endpoint-sentinel

Version:

User-friendly security scanner with interactive setup that scales from beginner to expert

212 lines 6.34 kB
"use strict"; /** * Enterprise Logging System * Provides structured logging with audit capabilities */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SecurityLogger = void 0; exports.createLogger = createLogger; exports.createTestLogger = createTestLogger; exports.createProductionLogger = createProductionLogger; const winston_1 = __importDefault(require("winston")); /** * Production-ready logger implementation */ class SecurityLogger { winstonLogger; auditLogger; config; constructor(config = {}) { this.config = { level: config.level || 'info', auditEnabled: config.auditEnabled || false, outputFile: config.outputFile || 'endpoint-sentinel.log', format: config.format || 'json' }; this.winstonLogger = this.createMainLogger(); this.auditLogger = this.createAuditLogger(); } /** * Creates the main application logger */ createMainLogger() { const formats = [ winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), winston_1.default.format.metadata() ]; if (this.config.format === 'json') { formats.push(winston_1.default.format.json()); } else { formats.push(winston_1.default.format.printf(({ timestamp, level, message, metadata }) => { const meta = metadata && typeof metadata === 'object' && Object.keys(metadata).length > 0 ? ` ${JSON.stringify(metadata)}` : ''; return `${timestamp} [${level.toUpperCase()}] ${message}${meta}`; })); } return winston_1.default.createLogger({ level: this.config.level, format: winston_1.default.format.combine(...formats), transports: [ new winston_1.default.transports.Console({ level: this.config.level, silent: process.env.NODE_ENV === 'test' }), new winston_1.default.transports.File({ filename: this.config.outputFile, level: 'debug' }) ], exitOnError: false }); } /** * Creates dedicated audit logger for compliance */ createAuditLogger() { return winston_1.default.createLogger({ level: 'info', format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.json()), transports: [ new winston_1.default.transports.File({ filename: 'audit.log', level: 'info' }) ], exitOnError: false }); } /** * Log info message */ info(message, meta) { this.winstonLogger.info(message, meta); } /** * Log warning message */ warn(message, meta) { this.winstonLogger.warn(message, meta); } /** * Log error message with optional error object */ error(message, error, meta) { const errorMeta = error ? { error: { name: error.name, message: error.message, stack: error.stack } } : {}; this.winstonLogger.error(message, { ...errorMeta, ...meta }); } /** * Log debug message */ debug(message, meta) { this.winstonLogger.debug(message, meta); } /** * Log audit event for compliance and security monitoring */ audit(event) { if (!this.config.auditEnabled) { return; } const auditRecord = { ...event, severity: this.getAuditSeverity(event.eventType), source: 'endpoint-sentinel', version: '1.0.0' }; this.auditLogger.info('AUDIT_EVENT', auditRecord); // Also log to main logger for visibility this.info(`Audit: ${event.eventType}`, { target: event.target, sessionId: event.sessionId }); } /** * Determines audit severity based on event type */ getAuditSeverity(eventType) { switch (eventType) { case 'vulnerability_found': return 'high'; case 'scan_started': case 'scan_completed': return 'medium'; case 'consent_granted': case 'endpoint_discovered': return 'low'; case 'error_occurred': case 'scan_terminated': return 'high'; default: return 'medium'; } } /** * Creates a child logger with additional context */ child(context) { const childLogger = new SecurityLogger(this.config); childLogger.winstonLogger = this.winstonLogger.child(context); return childLogger; } /** * Flushes all pending log writes */ async flush() { return new Promise((resolve) => { this.winstonLogger.on('finish', resolve); this.winstonLogger.end(); }); } /** * Changes log level dynamically */ setLevel(level) { this.config.level = level; this.winstonLogger.level = level; } /** * Gets current log level */ getLevel() { return this.config.level; } } exports.SecurityLogger = SecurityLogger; /** * Logger factory for creating configured logger instances */ function createLogger(config = {}) { return new SecurityLogger(config); } /** * Creates a logger for testing with minimal output */ function createTestLogger() { return new SecurityLogger({ level: 'error', auditEnabled: false, format: 'text' }); } /** * Creates a logger optimized for production use */ function createProductionLogger(outputFile) { return new SecurityLogger({ level: 'info', auditEnabled: true, outputFile: outputFile || '/var/log/endpoint-sentinel/app.log', format: 'json' }); } //# sourceMappingURL=logger.js.map