UNPKG

matterbridge-roborock-vacuum-plugin

Version:
60 lines 2.17 kB
import { AnsiLogger } from 'matterbridge/logger'; import { sensitiveDataRegexReplacements } from '../constants/sensitiveDataRegexReplacements.js'; export class FilterLogger extends AnsiLogger { delegate; sanitizeSensitiveLogs; constructor(delegate, sanitizeSensitiveLogs = true) { super({ extLog: delegate, logTimestampFormat: delegate.logTimestampFormat, logCustomTimestampFormat: delegate.logCustomTimestampFormat, }); this.delegate = delegate; this.sanitizeSensitiveLogs = sanitizeSensitiveLogs; } get logLevel() { return this.delegate.logLevel; } set logLevel(logLevel) { this.delegate.logLevel = logLevel; } get logName() { return this.delegate.logName; } set logName(logName) { this.delegate.logName = logName; } log(level, message, ...parameters) { if (!this.sanitizeSensitiveLogs) { this.delegate.log(level, message, ...parameters); return; } // Filter the log message and parameters const filteredMessage = this.filterSensitive(message); const filteredParameters = parameters.map((p) => this.filterSensitive(p)); // Call the delegate directly (not super.log) to avoid double-logging this.delegate.log(level, filteredMessage, ...filteredParameters); } filterSensitive(value) { const str = String(value); const filtered = this.filterString(str); let jsonFiltered = str; try { jsonFiltered = this.filterString(JSON.stringify(value)); } catch { /* empty */ } const redacted = filtered !== str || jsonFiltered !== JSON.stringify(value); return redacted ? filtered : value; } filterString(value) { let filtered = value; for (const [pattern, replacement] of Object.entries(sensitiveDataRegexReplacements)) { const regex = new RegExp(pattern, 'g'); filtered = filtered.replace(regex, replacement); } return filtered; } } //# sourceMappingURL=filterLogger.js.map