UNPKG

@mccann-hub/json-logger

Version:

A secure, configurable JSON logger built on Winston for Node.js and Deno applications. Supports custom log levels, structured JSON output, sensitive data sanitization, and error handling for multi-environment setups.

62 lines 2.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const node_process_1 = __importDefault(require("node:process")); exports.default = (sensitiveKeys = ['SECRET', 'PASSWORD', 'TOKEN', 'KEY']) => { const sensitiveValues = Object.keys(node_process_1.default.env) .filter((envKey) => sensitiveKeys.some((sensitive) => envKey.toUpperCase().includes(sensitive))) .map((envKey) => node_process_1.default.env[envKey] || ''); const recursiveSanitize = (obj) => { if (Array.isArray(obj)) { obj.forEach((item, index) => { if (item === undefined || item === null) { return; } else if (typeof item === 'string') { obj[index] = sanitizeString(item); } else if (Array.isArray(item) || typeof item === 'object') { recursiveSanitize(item); } }); } else { for (const key in obj) { if (obj[key] === undefined || obj[key] === null) { continue; } if (typeof obj[key] === 'string') { if (sensitiveKeys.some((sensitive) => key.toUpperCase().includes(sensitive))) { obj[key] = '***REDACTED***'; } else { obj[key] = sanitizeString(obj[key]); } } else if (Array.isArray(obj[key]) || typeof obj[key] === 'object') { recursiveSanitize(obj[key]); } } } }; const sanitizeString = (str) => { let sanitizedStr = str; sensitiveValues.forEach((value) => { if (value) { const escapedValue = value.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'); sanitizedStr = sanitizedStr.replace(new RegExp(escapedValue, 'g'), '***REDACTED***'); } }); return sanitizedStr; }; return (info) => { if (info === undefined) return undefined; const sanitizedInfo = JSON.parse(JSON.stringify(info)); recursiveSanitize(sanitizedInfo); return sanitizedInfo; }; }; //# sourceMappingURL=sanitize.js.map