matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
60 lines • 2.17 kB
JavaScript
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