@decohere/scribe 0.0.1-dev.80 → 0.0.1-dev.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,30 +9,32 @@ Object.defineProperty(exports, "ConsoleAdapter", {
9
9
  }
10
10
  });
11
11
  const _loggeradapter = require("./logger.adapter.js");
12
+ const _redact = require("./redact.js");
12
13
  const _types = require("./types.js");
13
14
  class ConsoleAdapter extends _loggeradapter.LogAdapter {
14
15
  configuredLevels;
15
16
  configuredLogLevel = _types.DefaultLogLevel;
16
17
  configuredLogLevelValue = _types.LogLevels.info;
18
+ redactionKeys = _redact.redact.fromOptions();
17
19
  constructor(_options = {}){
18
20
  super();
19
21
  }
20
22
  configure(scribeOptions) {
21
- // Get merged log levels (default + custom) using parent class method
22
23
  this.configuredLevels = this.getLogLevels(scribeOptions);
23
24
  const logLevelStr = scribeOptions.logLevel ?? _types.DefaultLogLevel;
24
25
  this.configuredLogLevel = logLevelStr;
25
26
  this.configuredLogLevelValue = this.configuredLevels[logLevelStr] ?? _types.LogLevels.info;
27
+ this.redactionKeys = _redact.redact.fromOptions(scribeOptions.redactions);
26
28
  }
27
29
  getLogger(name) {
28
30
  const loggerName = name || "default";
29
31
  return this.createConsoleLogger(loggerName);
30
32
  }
31
33
  createConsoleLogger(name) {
32
- // Use the levels configured during the configure() call
33
34
  const allLevels = this.configuredLevels;
34
35
  const currentLevel = this.configuredLogLevel;
35
36
  const threshold = this.configuredLogLevelValue;
37
+ const redactionKeys = this.redactionKeys;
36
38
  const baseLogger = {
37
39
  get currentLevel () {
38
40
  return currentLevel;
@@ -45,24 +47,22 @@ class ConsoleAdapter extends _loggeradapter.LogAdapter {
45
47
  const timestamp = new Date().toISOString();
46
48
  let message;
47
49
  if (typeof msg === "object") {
48
- message = msg instanceof Error ? (0, _loggeradapter.formatError)(msg) : JSON.stringify(msg);
50
+ message = msg instanceof Error ? (0, _loggeradapter.formatError)(msg) : JSON.stringify(_redact.redact.object(msg, redactionKeys));
49
51
  } else {
50
52
  message = String(msg);
51
53
  }
52
54
  const logLine = `[${timestamp}] ${level.toUpperCase()} [${name}]: ${message}`;
53
- if (args.length > 0) {
54
- console.log(logLine, ...args);
55
+ const payload = args.map((arg)=>_redact.redact.object(arg, redactionKeys));
56
+ if (payload.length > 0) {
57
+ console.log(logLine, ...payload);
55
58
  } else {
56
59
  console.log(logLine);
57
60
  }
58
61
  };
59
62
  const noop = ()=>{};
60
- // Start with base logger and isLevelEnabled method
61
63
  const logger = Object.assign(baseLogger, {
62
64
  isLevelEnabled: (level)=>(allLevels[level] ?? 0) >= threshold
63
65
  });
64
- // Dynamically add all log level methods (default + custom)
65
- // Levels below the configured threshold are patched to noop
66
66
  for (const [levelName, levelValue] of Object.entries(allLevels)){
67
67
  // biome-ignore lint/suspicious/noExplicitAny: Dynamic logger level creation requires any
68
68
  logger[levelName] = levelValue >= threshold ? logFunction(levelName) : noop;
@@ -71,4 +71,4 @@ class ConsoleAdapter extends _loggeradapter.LogAdapter {
71
71
  }
72
72
  }
73
73
 
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2NvbnNvbGUuYWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXRFcnJvciwgTG9nQWRhcHRlciB9IGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VMb2dnZXIsIExvZ2dlciB9IGZyb20gXCIuL2xvZ2dlci50eXBlLmpzXCI7XG5pbXBvcnQge1xuXHREZWZhdWx0TG9nTGV2ZWwsXG5cdHR5cGUgTG9nQWRhcHRlck9wdGlvbnMsXG5cdExvZ0xldmVscyxcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG5leHBvcnQgdHlwZSBDb25zb2xlQWRhcHRlck9wdGlvbnMgPSB7fSAmIExvZ0FkYXB0ZXJPcHRpb25zO1xuXG5leHBvcnQgY2xhc3MgQ29uc29sZUFkYXB0ZXIgZXh0ZW5kcyBMb2dBZGFwdGVyIHtcblx0cHJpdmF0ZSBjb25maWd1cmVkTGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXHRwcml2YXRlIGNvbmZpZ3VyZWRMb2dMZXZlbDogc3RyaW5nID0gRGVmYXVsdExvZ0xldmVsO1xuXHRwcml2YXRlIGNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlOiBudW1iZXIgPSBMb2dMZXZlbHMuaW5mbztcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoX29wdGlvbnM6IENvbnNvbGVBZGFwdGVyT3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdHNjcmliZU9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdC8vIEdldCBtZXJnZWQgbG9nIGxldmVscyAoZGVmYXVsdCArIGN1c3RvbSkgdXNpbmcgcGFyZW50IGNsYXNzIG1ldGhvZFxuXHRcdHRoaXMuY29uZmlndXJlZExldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGxvZ0xldmVsU3RyID0gc2NyaWJlT3B0aW9ucy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWw7XG5cdFx0dGhpcy5jb25maWd1cmVkTG9nTGV2ZWwgPSBsb2dMZXZlbFN0cjtcblx0XHR0aGlzLmNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlID0gdGhpcy5jb25maWd1cmVkTGV2ZWxzW2xvZ0xldmVsU3RyXSA/PyBMb2dMZXZlbHMuaW5mbztcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2dnZXI8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdG5hbWU/OiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyTmFtZSA9IG5hbWUgfHwgXCJkZWZhdWx0XCI7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlQ29uc29sZUxvZ2dlcjxULCBDdXN0b21Pbmx5Pihsb2dnZXJOYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlQ29uc29sZUxvZ2dlcjxcblx0XHRUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG5cdFx0Q3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlLFxuXHQ+KG5hbWU6IHN0cmluZyk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Ly8gVXNlIHRoZSBsZXZlbHMgY29uZmlndXJlZCBkdXJpbmcgdGhlIGNvbmZpZ3VyZSgpIGNhbGxcblx0XHRjb25zdCBhbGxMZXZlbHMgPSB0aGlzLmNvbmZpZ3VyZWRMZXZlbHM7XG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gdGhpcy5jb25maWd1cmVkTG9nTGV2ZWw7XG5cdFx0Y29uc3QgdGhyZXNob2xkID0gdGhpcy5jb25maWd1cmVkTG9nTGV2ZWxWYWx1ZTtcblxuXHRcdGNvbnN0IGJhc2VMb2dnZXI6IEJhc2VMb2dnZXIgPSB7XG5cdFx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudExldmVsO1xuXHRcdFx0fSxcblx0XHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRcdHJldHVybiBhbGxMZXZlbHM7XG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRjb25zdCBsb2dGdW5jdGlvbiA9XG5cdFx0XHQobGV2ZWw6IHN0cmluZykgPT5cblx0XHRcdChtc2c6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCwgLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblx0XHRcdFx0bGV0IG1lc3NhZ2U6IHN0cmluZztcblxuXHRcdFx0XHRpZiAodHlwZW9mIG1zZyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG1lc3NhZ2UgPSBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IGZvcm1hdEVycm9yKG1zZykgOiBKU09OLnN0cmluZ2lmeShtc2cpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lc3NhZ2UgPSBTdHJpbmcobXNnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGxvZ0xpbmUgPSBgWyR7dGltZXN0YW1wfV0gJHtsZXZlbC50b1VwcGVyQ2FzZSgpfSBbJHtuYW1lfV06ICR7bWVzc2FnZX1gO1xuXG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhsb2dMaW5lLCAuLi5hcmdzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhsb2dMaW5lKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuXHRcdC8vIFN0YXJ0IHdpdGggYmFzZSBsb2dnZXIgYW5kIGlzTGV2ZWxFbmFibGVkIG1ldGhvZFxuXHRcdGNvbnN0IGxvZ2dlciA9IE9iamVjdC5hc3NpZ24oYmFzZUxvZ2dlciwge1xuXHRcdFx0aXNMZXZlbEVuYWJsZWQ6IChsZXZlbDogc3RyaW5nKSA9PiAoYWxsTGV2ZWxzW2xldmVsXSA/PyAwKSA+PSB0aHJlc2hvbGQsXG5cdFx0fSk7XG5cblx0XHQvLyBEeW5hbWljYWxseSBhZGQgYWxsIGxvZyBsZXZlbCBtZXRob2RzIChkZWZhdWx0ICsgY3VzdG9tKVxuXHRcdC8vIExldmVscyBiZWxvdyB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQgYXJlIHBhdGNoZWQgdG8gbm9vcFxuXHRcdGZvciAoY29uc3QgW2xldmVsTmFtZSwgbGV2ZWxWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsTGV2ZWxzKSkge1xuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBEeW5hbWljIGxvZ2dlciBsZXZlbCBjcmVhdGlvbiByZXF1aXJlcyBhbnlcblx0XHRcdChsb2dnZXIgYXMgYW55KVtsZXZlbE5hbWVdID0gbGV2ZWxWYWx1ZSA+PSB0aHJlc2hvbGQgPyBsb2dGdW5jdGlvbihsZXZlbE5hbWUpIDogbm9vcDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbG9nZ2VyIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNvbnNvbGVBZGFwdGVyIiwiTG9nQWRhcHRlciIsImNvbmZpZ3VyZWRMZXZlbHMiLCJjb25maWd1cmVkTG9nTGV2ZWwiLCJEZWZhdWx0TG9nTGV2ZWwiLCJjb25maWd1cmVkTG9nTGV2ZWxWYWx1ZSIsIkxvZ0xldmVscyIsImluZm8iLCJfb3B0aW9ucyIsImNvbmZpZ3VyZSIsInNjcmliZU9wdGlvbnMiLCJnZXRMb2dMZXZlbHMiLCJsb2dMZXZlbFN0ciIsImxvZ0xldmVsIiwiZ2V0TG9nZ2VyIiwibmFtZSIsImxvZ2dlck5hbWUiLCJjcmVhdGVDb25zb2xlTG9nZ2VyIiwiYWxsTGV2ZWxzIiwiY3VycmVudExldmVsIiwidGhyZXNob2xkIiwiYmFzZUxvZ2dlciIsImxvZ0xldmVscyIsImxvZ0Z1bmN0aW9uIiwibGV2ZWwiLCJtc2ciLCJhcmdzIiwidGltZXN0YW1wIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwibWVzc2FnZSIsIkVycm9yIiwiZm9ybWF0RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwibG9nTGluZSIsInRvVXBwZXJDYXNlIiwibGVuZ3RoIiwiY29uc29sZSIsImxvZyIsIm5vb3AiLCJsb2dnZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0xldmVsRW5hYmxlZCIsImxldmVsTmFtZSIsImxldmVsVmFsdWUiLCJlbnRyaWVzIl0sIm1hcHBpbmdzIjoiOzs7OytCQVdhQTs7O2VBQUFBOzs7K0JBWDJCO3VCQU9qQztBQUlBLE1BQU1BLHVCQUF1QkMseUJBQVU7SUFDckNDLGlCQUF5QztJQUN6Q0MscUJBQTZCQyxzQkFBZSxDQUFDO0lBQzdDQywwQkFBa0NDLGdCQUFTLENBQUNDLElBQUksQ0FBQztJQUV6RCxZQUFtQkMsV0FBa0MsQ0FBQyxDQUFDLENBQUU7UUFDeEQsS0FBSztJQUNOO0lBRU9DLFVBQ05DLGFBQTJDLEVBQzFDO1FBQ0QscUVBQXFFO1FBQ3JFLElBQUksQ0FBQ1IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDUyxZQUFZLENBQUNEO1FBQzFDLE1BQU1FLGNBQWNGLGNBQWNHLFFBQVEsSUFBSVQsc0JBQWU7UUFDN0QsSUFBSSxDQUFDRCxrQkFBa0IsR0FBR1M7UUFDMUIsSUFBSSxDQUFDUCx1QkFBdUIsR0FBRyxJQUFJLENBQUNILGdCQUFnQixDQUFDVSxZQUFZLElBQUlOLGdCQUFTLENBQUNDLElBQUk7SUFDcEY7SUFFT08sVUFDTkMsSUFBYSxFQUNXO1FBQ3hCLE1BQU1DLGFBQWFELFFBQVE7UUFDM0IsT0FBTyxJQUFJLENBQUNFLG1CQUFtQixDQUFnQkQ7SUFDaEQ7SUFFUUMsb0JBR05GLElBQVksRUFBeUI7UUFDdEMsd0RBQXdEO1FBQ3hELE1BQU1HLFlBQVksSUFBSSxDQUFDaEIsZ0JBQWdCO1FBQ3ZDLE1BQU1pQixlQUFlLElBQUksQ0FBQ2hCLGtCQUFrQjtRQUM1QyxNQUFNaUIsWUFBWSxJQUFJLENBQUNmLHVCQUF1QjtRQUU5QyxNQUFNZ0IsYUFBeUI7WUFDOUIsSUFBSUYsZ0JBQWU7Z0JBQ2xCLE9BQU9BO1lBQ1I7WUFDQSxJQUFJRyxhQUFZO2dCQUNmLE9BQU9KO1lBQ1I7UUFDRDtRQUVBLE1BQU1LLGNBQ0wsQ0FBQ0MsUUFDRCxDQUFDQyxLQUErQixHQUFHQztnQkFDbEMsTUFBTUMsWUFBWSxJQUFJQyxPQUFPQyxXQUFXO2dCQUN4QyxJQUFJQztnQkFFSixJQUFJLE9BQU9MLFFBQVEsVUFBVTtvQkFDNUJLLFVBQVVMLGVBQWVNLFFBQVFDLElBQUFBLDBCQUFXLEVBQUNQLE9BQU9RLEtBQUtDLFNBQVMsQ0FBQ1Q7Z0JBQ3BFLE9BQU87b0JBQ05LLFVBQVVLLE9BQU9WO2dCQUNsQjtnQkFFQSxNQUFNVyxVQUFVLENBQUMsQ0FBQyxFQUFFVCxVQUFVLEVBQUUsRUFBRUgsTUFBTWEsV0FBVyxHQUFHLEVBQUUsRUFBRXRCLEtBQUssR0FBRyxFQUFFZSxTQUFTO2dCQUU3RSxJQUFJSixLQUFLWSxNQUFNLEdBQUcsR0FBRztvQkFDcEJDLFFBQVFDLEdBQUcsQ0FBQ0osWUFBWVY7Z0JBQ3pCLE9BQU87b0JBQ05hLFFBQVFDLEdBQUcsQ0FBQ0o7Z0JBQ2I7WUFDRDtRQUVELE1BQU1LLE9BQU8sS0FBTztRQUVwQixtREFBbUQ7UUFDbkQsTUFBTUMsU0FBU0MsT0FBT0MsTUFBTSxDQUFDdkIsWUFBWTtZQUN4Q3dCLGdCQUFnQixDQUFDckIsUUFBa0IsQUFBQ04sQ0FBQUEsU0FBUyxDQUFDTSxNQUFNLElBQUksQ0FBQSxLQUFNSjtRQUMvRDtRQUVBLDJEQUEyRDtRQUMzRCw0REFBNEQ7UUFDNUQsS0FBSyxNQUFNLENBQUMwQixXQUFXQyxXQUFXLElBQUlKLE9BQU9LLE9BQU8sQ0FBQzlCLFdBQVk7WUFDaEUseUZBQXlGO1lBQ3hGd0IsTUFBYyxDQUFDSSxVQUFVLEdBQUdDLGNBQWMzQixZQUFZRyxZQUFZdUIsYUFBYUw7UUFDakY7UUFFQSxPQUFPQztJQUNSO0FBQ0QifQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2NvbnNvbGUuYWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXRFcnJvciwgTG9nQWRhcHRlciB9IGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VMb2dnZXIsIExvZ2dlciB9IGZyb20gXCIuL2xvZ2dlci50eXBlLmpzXCI7XG5pbXBvcnQgeyByZWRhY3QgfSBmcm9tIFwiLi9yZWRhY3QuanNcIjtcbmltcG9ydCB7XG5cdERlZmF1bHRMb2dMZXZlbCxcblx0dHlwZSBMb2dBZGFwdGVyT3B0aW9ucyxcblx0TG9nTGV2ZWxzLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVBZGFwdGVyT3B0aW9ucyA9IHt9ICYgTG9nQWRhcHRlck9wdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBDb25zb2xlQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIGNvbmZpZ3VyZWRMZXZlbHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG5cdHByaXZhdGUgY29uZmlndXJlZExvZ0xldmVsOiBzdHJpbmcgPSBEZWZhdWx0TG9nTGV2ZWw7XG5cdHByaXZhdGUgY29uZmlndXJlZExvZ0xldmVsVmFsdWU6IG51bWJlciA9IExvZ0xldmVscy5pbmZvO1xuXHRwcml2YXRlIHJlZGFjdGlvbktleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSByZWRhY3QuZnJvbU9wdGlvbnMoKTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoX29wdGlvbnM6IENvbnNvbGVBZGFwdGVyT3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdHNjcmliZU9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdHRoaXMuY29uZmlndXJlZExldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGxvZ0xldmVsU3RyID0gc2NyaWJlT3B0aW9ucy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWw7XG5cdFx0dGhpcy5jb25maWd1cmVkTG9nTGV2ZWwgPSBsb2dMZXZlbFN0cjtcblx0XHR0aGlzLmNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlID0gdGhpcy5jb25maWd1cmVkTGV2ZWxzW2xvZ0xldmVsU3RyXSA/PyBMb2dMZXZlbHMuaW5mbztcblx0XHR0aGlzLnJlZGFjdGlvbktleXMgPSByZWRhY3QuZnJvbU9wdGlvbnMoc2NyaWJlT3B0aW9ucy5yZWRhY3Rpb25zKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2dnZXI8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdG5hbWU/OiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyTmFtZSA9IG5hbWUgfHwgXCJkZWZhdWx0XCI7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlQ29uc29sZUxvZ2dlcjxULCBDdXN0b21Pbmx5Pihsb2dnZXJOYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlQ29uc29sZUxvZ2dlcjxcblx0XHRUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG5cdFx0Q3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlLFxuXHQ+KG5hbWU6IHN0cmluZyk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgYWxsTGV2ZWxzID0gdGhpcy5jb25maWd1cmVkTGV2ZWxzO1xuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuY29uZmlndXJlZExvZ0xldmVsO1xuXHRcdGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuY29uZmlndXJlZExvZ0xldmVsVmFsdWU7XG5cdFx0Y29uc3QgcmVkYWN0aW9uS2V5cyA9IHRoaXMucmVkYWN0aW9uS2V5cztcblxuXHRcdGNvbnN0IGJhc2VMb2dnZXI6IEJhc2VMb2dnZXIgPSB7XG5cdFx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudExldmVsO1xuXHRcdFx0fSxcblx0XHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRcdHJldHVybiBhbGxMZXZlbHM7XG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRjb25zdCBsb2dGdW5jdGlvbiA9XG5cdFx0XHQobGV2ZWw6IHN0cmluZykgPT5cblx0XHRcdChtc2c6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCwgLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblx0XHRcdFx0bGV0IG1lc3NhZ2U6IHN0cmluZztcblxuXHRcdFx0XHRpZiAodHlwZW9mIG1zZyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG1lc3NhZ2UgPVxuXHRcdFx0XHRcdFx0bXNnIGluc3RhbmNlb2YgRXJyb3Jcblx0XHRcdFx0XHRcdFx0PyBmb3JtYXRFcnJvcihtc2cpXG5cdFx0XHRcdFx0XHRcdDogSlNPTi5zdHJpbmdpZnkocmVkYWN0Lm9iamVjdChtc2csIHJlZGFjdGlvbktleXMpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtZXNzYWdlID0gU3RyaW5nKG1zZyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBsb2dMaW5lID0gYFske3RpbWVzdGFtcH1dICR7bGV2ZWwudG9VcHBlckNhc2UoKX0gWyR7bmFtZX1dOiAke21lc3NhZ2V9YDtcblx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IGFyZ3MubWFwKChhcmcpID0+IHJlZGFjdC5vYmplY3QoYXJnLCByZWRhY3Rpb25LZXlzKSk7XG5cblx0XHRcdFx0aWYgKHBheWxvYWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGxvZ0xpbmUsIC4uLnBheWxvYWQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGxvZ0xpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Y29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5cdFx0Y29uc3QgbG9nZ2VyID0gT2JqZWN0LmFzc2lnbihiYXNlTG9nZ2VyLCB7XG5cdFx0XHRpc0xldmVsRW5hYmxlZDogKGxldmVsOiBzdHJpbmcpID0+IChhbGxMZXZlbHNbbGV2ZWxdID8/IDApID49IHRocmVzaG9sZCxcblx0XHR9KTtcblxuXHRcdGZvciAoY29uc3QgW2xldmVsTmFtZSwgbGV2ZWxWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsTGV2ZWxzKSkge1xuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBEeW5hbWljIGxvZ2dlciBsZXZlbCBjcmVhdGlvbiByZXF1aXJlcyBhbnlcblx0XHRcdChsb2dnZXIgYXMgYW55KVtsZXZlbE5hbWVdID0gbGV2ZWxWYWx1ZSA+PSB0aHJlc2hvbGQgPyBsb2dGdW5jdGlvbihsZXZlbE5hbWUpIDogbm9vcDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbG9nZ2VyIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNvbnNvbGVBZGFwdGVyIiwiTG9nQWRhcHRlciIsImNvbmZpZ3VyZWRMZXZlbHMiLCJjb25maWd1cmVkTG9nTGV2ZWwiLCJEZWZhdWx0TG9nTGV2ZWwiLCJjb25maWd1cmVkTG9nTGV2ZWxWYWx1ZSIsIkxvZ0xldmVscyIsImluZm8iLCJyZWRhY3Rpb25LZXlzIiwicmVkYWN0IiwiZnJvbU9wdGlvbnMiLCJfb3B0aW9ucyIsImNvbmZpZ3VyZSIsInNjcmliZU9wdGlvbnMiLCJnZXRMb2dMZXZlbHMiLCJsb2dMZXZlbFN0ciIsImxvZ0xldmVsIiwicmVkYWN0aW9ucyIsImdldExvZ2dlciIsIm5hbWUiLCJsb2dnZXJOYW1lIiwiY3JlYXRlQ29uc29sZUxvZ2dlciIsImFsbExldmVscyIsImN1cnJlbnRMZXZlbCIsInRocmVzaG9sZCIsImJhc2VMb2dnZXIiLCJsb2dMZXZlbHMiLCJsb2dGdW5jdGlvbiIsImxldmVsIiwibXNnIiwiYXJncyIsInRpbWVzdGFtcCIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsIm1lc3NhZ2UiLCJFcnJvciIsImZvcm1hdEVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9iamVjdCIsIlN0cmluZyIsImxvZ0xpbmUiLCJ0b1VwcGVyQ2FzZSIsInBheWxvYWQiLCJtYXAiLCJhcmciLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwibm9vcCIsImxvZ2dlciIsIk9iamVjdCIsImFzc2lnbiIsImlzTGV2ZWxFbmFibGVkIiwibGV2ZWxOYW1lIiwibGV2ZWxWYWx1ZSIsImVudHJpZXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBWWFBOzs7ZUFBQUE7OzsrQkFaMkI7d0JBRWpCO3VCQU1oQjtBQUlBLE1BQU1BLHVCQUF1QkMseUJBQVU7SUFDckNDLGlCQUF5QztJQUN6Q0MscUJBQTZCQyxzQkFBZSxDQUFDO0lBQzdDQywwQkFBa0NDLGdCQUFTLENBQUNDLElBQUksQ0FBQztJQUNqREMsZ0JBQXFDQyxjQUFNLENBQUNDLFdBQVcsR0FBRztJQUVsRSxZQUFtQkMsV0FBa0MsQ0FBQyxDQUFDLENBQUU7UUFDeEQsS0FBSztJQUNOO0lBRU9DLFVBQ05DLGFBQTJDLEVBQzFDO1FBQ0QsSUFBSSxDQUFDWCxnQkFBZ0IsR0FBRyxJQUFJLENBQUNZLFlBQVksQ0FBQ0Q7UUFDMUMsTUFBTUUsY0FBY0YsY0FBY0csUUFBUSxJQUFJWixzQkFBZTtRQUM3RCxJQUFJLENBQUNELGtCQUFrQixHQUFHWTtRQUMxQixJQUFJLENBQUNWLHVCQUF1QixHQUFHLElBQUksQ0FBQ0gsZ0JBQWdCLENBQUNhLFlBQVksSUFBSVQsZ0JBQVMsQ0FBQ0MsSUFBSTtRQUNuRixJQUFJLENBQUNDLGFBQWEsR0FBR0MsY0FBTSxDQUFDQyxXQUFXLENBQUNHLGNBQWNJLFVBQVU7SUFDakU7SUFFT0MsVUFDTkMsSUFBYSxFQUNXO1FBQ3hCLE1BQU1DLGFBQWFELFFBQVE7UUFDM0IsT0FBTyxJQUFJLENBQUNFLG1CQUFtQixDQUFnQkQ7SUFDaEQ7SUFFUUMsb0JBR05GLElBQVksRUFBeUI7UUFDdEMsTUFBTUcsWUFBWSxJQUFJLENBQUNwQixnQkFBZ0I7UUFDdkMsTUFBTXFCLGVBQWUsSUFBSSxDQUFDcEIsa0JBQWtCO1FBQzVDLE1BQU1xQixZQUFZLElBQUksQ0FBQ25CLHVCQUF1QjtRQUM5QyxNQUFNRyxnQkFBZ0IsSUFBSSxDQUFDQSxhQUFhO1FBRXhDLE1BQU1pQixhQUF5QjtZQUM5QixJQUFJRixnQkFBZTtnQkFDbEIsT0FBT0E7WUFDUjtZQUNBLElBQUlHLGFBQVk7Z0JBQ2YsT0FBT0o7WUFDUjtRQUNEO1FBRUEsTUFBTUssY0FDTCxDQUFDQyxRQUNELENBQUNDLEtBQStCLEdBQUdDO2dCQUNsQyxNQUFNQyxZQUFZLElBQUlDLE9BQU9DLFdBQVc7Z0JBQ3hDLElBQUlDO2dCQUVKLElBQUksT0FBT0wsUUFBUSxVQUFVO29CQUM1QkssVUFDQ0wsZUFBZU0sUUFDWkMsSUFBQUEsMEJBQVcsRUFBQ1AsT0FDWlEsS0FBS0MsU0FBUyxDQUFDN0IsY0FBTSxDQUFDOEIsTUFBTSxDQUFDVixLQUFLckI7Z0JBQ3ZDLE9BQU87b0JBQ04wQixVQUFVTSxPQUFPWDtnQkFDbEI7Z0JBRUEsTUFBTVksVUFBVSxDQUFDLENBQUMsRUFBRVYsVUFBVSxFQUFFLEVBQUVILE1BQU1jLFdBQVcsR0FBRyxFQUFFLEVBQUV2QixLQUFLLEdBQUcsRUFBRWUsU0FBUztnQkFDN0UsTUFBTVMsVUFBVWIsS0FBS2MsR0FBRyxDQUFDLENBQUNDLE1BQVFwQyxjQUFNLENBQUM4QixNQUFNLENBQUNNLEtBQUtyQztnQkFFckQsSUFBSW1DLFFBQVFHLE1BQU0sR0FBRyxHQUFHO29CQUN2QkMsUUFBUUMsR0FBRyxDQUFDUCxZQUFZRTtnQkFDekIsT0FBTztvQkFDTkksUUFBUUMsR0FBRyxDQUFDUDtnQkFDYjtZQUNEO1FBRUQsTUFBTVEsT0FBTyxLQUFPO1FBRXBCLE1BQU1DLFNBQVNDLE9BQU9DLE1BQU0sQ0FBQzNCLFlBQVk7WUFDeEM0QixnQkFBZ0IsQ0FBQ3pCLFFBQWtCLEFBQUNOLENBQUFBLFNBQVMsQ0FBQ00sTUFBTSxJQUFJLENBQUEsS0FBTUo7UUFDL0Q7UUFFQSxLQUFLLE1BQU0sQ0FBQzhCLFdBQVdDLFdBQVcsSUFBSUosT0FBT0ssT0FBTyxDQUFDbEMsV0FBWTtZQUNoRSx5RkFBeUY7WUFDeEY0QixNQUFjLENBQUNJLFVBQVUsR0FBR0MsY0FBYy9CLFlBQVlHLFlBQVkyQixhQUFhTDtRQUNqRjtRQUVBLE9BQU9DO0lBQ1I7QUFDRCJ9
@@ -8,6 +8,7 @@ _export_star(require("./errors.js"), exports);
8
8
  _export_star(require("./logger.adapter.js"), exports);
9
9
  _export_star(require("./logger.factory.js"), exports);
10
10
  _export_star(require("./logger.type.js"), exports);
11
+ _export_star(require("./redact.js"), exports);
11
12
  _export_star(require("./types.js"), exports);
12
13
  function _export_star(from, to) {
13
14
  Object.keys(from).forEach(function(k) {
@@ -23,4 +24,4 @@ function _export_star(from, to) {
23
24
  return from;
24
25
  }
25
26
 
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnNvbGUuYWRhcHRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW52LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2dnZXIuZmFjdG9yeS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9nZ2VyLnR5cGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBYztxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQTtxQkFDQSJ9
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnNvbGUuYWRhcHRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW52LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2dnZXIuZmFjdG9yeS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9nZ2VyLnR5cGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZGFjdC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMuanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFjO3FCQUNBO3FCQUNBO3FCQUNBO3FCQUNBO3FCQUNBO3FCQUNBO3FCQUNBIn0=
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "redact", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return redact;
9
+ }
10
+ });
11
+ const _types = require("./types.js");
12
+ function keysFromPaths(paths) {
13
+ const keys = new Set();
14
+ for (const path of paths){
15
+ const segments = path.split(".").filter((segment)=>segment.length > 0 && segment !== "*");
16
+ const key = segments.at(-1);
17
+ if (key != null) {
18
+ keys.add(key);
19
+ }
20
+ }
21
+ return keys;
22
+ }
23
+ function isPlainObject(value) {
24
+ if (value == null || typeof value !== "object" || Array.isArray(value) || value instanceof Error) {
25
+ return false;
26
+ }
27
+ const proto = Object.getPrototypeOf(value);
28
+ return proto === Object.prototype || proto === null;
29
+ }
30
+ function object(value, keys, censor = _types.DefaultCensor, seen = new WeakSet()) {
31
+ if (value == null || typeof value !== "object") {
32
+ return value;
33
+ }
34
+ if (value instanceof Error) {
35
+ return value;
36
+ }
37
+ if (seen.has(value)) {
38
+ return value;
39
+ }
40
+ seen.add(value);
41
+ if (Array.isArray(value)) {
42
+ return value.map((item)=>object(item, keys, censor, seen));
43
+ }
44
+ if (!isPlainObject(value)) {
45
+ return value;
46
+ }
47
+ const out = {};
48
+ for (const [key, nested] of Object.entries(value)){
49
+ out[key] = keys.has(key) ? censor : object(nested, keys, censor, seen);
50
+ }
51
+ return out;
52
+ }
53
+ function fromOptions(options) {
54
+ return keysFromPaths(options?.paths ?? _types.DefaultRedactions.paths);
55
+ }
56
+ const redact = {
57
+ object,
58
+ keysFromPaths,
59
+ fromOptions
60
+ };
61
+
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL3JlZGFjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0Q2Vuc29yLCBEZWZhdWx0UmVkYWN0aW9ucywgdHlwZSBSZWRhY3Rpb25PcHRpb25zIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuZnVuY3Rpb24ga2V5c0Zyb21QYXRocyhwYXRoczogc3RyaW5nW10pOiBTZXQ8c3RyaW5nPiB7XG5cdGNvbnN0IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Zm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG5cdFx0Y29uc3Qgc2VnbWVudHMgPSBwYXRoXG5cdFx0XHQuc3BsaXQoXCIuXCIpXG5cdFx0XHQuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDAgJiYgc2VnbWVudCAhPT0gXCIqXCIpO1xuXHRcdGNvbnN0IGtleSA9IHNlZ21lbnRzLmF0KC0xKTtcblx0XHRpZiAoa2V5ICE9IG51bGwpIHtcblx0XHRcdGtleXMuYWRkKGtleSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRpZiAoXG5cdFx0dmFsdWUgPT0gbnVsbCB8fFxuXHRcdHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fFxuXHRcdEFycmF5LmlzQXJyYXkodmFsdWUpIHx8XG5cdFx0dmFsdWUgaW5zdGFuY2VvZiBFcnJvclxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXHRyZXR1cm4gcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIG9iamVjdChcblx0dmFsdWU6IHVua25vd24sXG5cdGtleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4sXG5cdGNlbnNvcjogc3RyaW5nID0gRGVmYXVsdENlbnNvcixcblx0c2VlbjogV2Vha1NldDxvYmplY3Q+ID0gbmV3IFdlYWtTZXQoKSxcbik6IHVua25vd24ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRzZWVuLmFkZCh2YWx1ZSk7XG5cdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IG9iamVjdChpdGVtLCBrZXlzLCBjZW5zb3IsIHNlZW4pKTtcblx0fVxuXHRpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0Zm9yIChjb25zdCBba2V5LCBuZXN0ZWRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuXHRcdG91dFtrZXldID0ga2V5cy5oYXMoa2V5KSA/IGNlbnNvciA6IG9iamVjdChuZXN0ZWQsIGtleXMsIGNlbnNvciwgc2Vlbik7XG5cdH1cblx0cmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZnJvbU9wdGlvbnMob3B0aW9ucz86IFJlZGFjdGlvbk9wdGlvbnMpOiBTZXQ8c3RyaW5nPiB7XG5cdHJldHVybiBrZXlzRnJvbVBhdGhzKG9wdGlvbnM/LnBhdGhzID8/IERlZmF1bHRSZWRhY3Rpb25zLnBhdGhzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlZGFjdCA9IHsgb2JqZWN0LCBrZXlzRnJvbVBhdGhzLCBmcm9tT3B0aW9ucyB9O1xuIl0sIm5hbWVzIjpbInJlZGFjdCIsImtleXNGcm9tUGF0aHMiLCJwYXRocyIsImtleXMiLCJTZXQiLCJwYXRoIiwic2VnbWVudHMiLCJzcGxpdCIsImZpbHRlciIsInNlZ21lbnQiLCJsZW5ndGgiLCJrZXkiLCJhdCIsImFkZCIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwicHJvdG8iLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInByb3RvdHlwZSIsIm9iamVjdCIsImNlbnNvciIsIkRlZmF1bHRDZW5zb3IiLCJzZWVuIiwiV2Vha1NldCIsImhhcyIsIm1hcCIsIml0ZW0iLCJvdXQiLCJuZXN0ZWQiLCJlbnRyaWVzIiwiZnJvbU9wdGlvbnMiLCJvcHRpb25zIiwiRGVmYXVsdFJlZGFjdGlvbnMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBOERhQTs7O2VBQUFBOzs7dUJBOUQyRDtBQUV4RSxTQUFTQyxjQUFjQyxLQUFlO0lBQ3JDLE1BQU1DLE9BQU8sSUFBSUM7SUFDakIsS0FBSyxNQUFNQyxRQUFRSCxNQUFPO1FBQ3pCLE1BQU1JLFdBQVdELEtBQ2ZFLEtBQUssQ0FBQyxLQUNOQyxNQUFNLENBQUMsQ0FBQ0MsVUFBWUEsUUFBUUMsTUFBTSxHQUFHLEtBQUtELFlBQVk7UUFDeEQsTUFBTUUsTUFBTUwsU0FBU00sRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSUQsT0FBTyxNQUFNO1lBQ2hCUixLQUFLVSxHQUFHLENBQUNGO1FBQ1Y7SUFDRDtJQUNBLE9BQU9SO0FBQ1I7QUFFQSxTQUFTVyxjQUFjQyxLQUFjO0lBQ3BDLElBQ0NBLFNBQVMsUUFDVCxPQUFPQSxVQUFVLFlBQ2pCQyxNQUFNQyxPQUFPLENBQUNGLFVBQ2RBLGlCQUFpQkcsT0FDaEI7UUFDRCxPQUFPO0lBQ1I7SUFDQSxNQUFNQyxRQUFRQyxPQUFPQyxjQUFjLENBQUNOO0lBQ3BDLE9BQU9JLFVBQVVDLE9BQU9FLFNBQVMsSUFBSUgsVUFBVTtBQUNoRDtBQUVBLFNBQVNJLE9BQ1JSLEtBQWMsRUFDZFosSUFBeUIsRUFDekJxQixTQUFpQkMsb0JBQWEsRUFDOUJDLE9BQXdCLElBQUlDLFNBQVM7SUFFckMsSUFBSVosU0FBUyxRQUFRLE9BQU9BLFVBQVUsVUFBVTtRQUMvQyxPQUFPQTtJQUNSO0lBQ0EsSUFBSUEsaUJBQWlCRyxPQUFPO1FBQzNCLE9BQU9IO0lBQ1I7SUFDQSxJQUFJVyxLQUFLRSxHQUFHLENBQUNiLFFBQVE7UUFDcEIsT0FBT0E7SUFDUjtJQUNBVyxLQUFLYixHQUFHLENBQUNFO0lBQ1QsSUFBSUMsTUFBTUMsT0FBTyxDQUFDRixRQUFRO1FBQ3pCLE9BQU9BLE1BQU1jLEdBQUcsQ0FBQyxDQUFDQyxPQUFTUCxPQUFPTyxNQUFNM0IsTUFBTXFCLFFBQVFFO0lBQ3ZEO0lBQ0EsSUFBSSxDQUFDWixjQUFjQyxRQUFRO1FBQzFCLE9BQU9BO0lBQ1I7SUFDQSxNQUFNZ0IsTUFBK0IsQ0FBQztJQUN0QyxLQUFLLE1BQU0sQ0FBQ3BCLEtBQUtxQixPQUFPLElBQUlaLE9BQU9hLE9BQU8sQ0FBQ2xCLE9BQVE7UUFDbERnQixHQUFHLENBQUNwQixJQUFJLEdBQUdSLEtBQUt5QixHQUFHLENBQUNqQixPQUFPYSxTQUFTRCxPQUFPUyxRQUFRN0IsTUFBTXFCLFFBQVFFO0lBQ2xFO0lBQ0EsT0FBT0s7QUFDUjtBQUVBLFNBQVNHLFlBQVlDLE9BQTBCO0lBQzlDLE9BQU9sQyxjQUFja0MsU0FBU2pDLFNBQVNrQyx3QkFBaUIsQ0FBQ2xDLEtBQUs7QUFDL0Q7QUFFTyxNQUFNRixTQUFTO0lBQUV1QjtJQUFRdEI7SUFBZWlDO0FBQVkifQ==
@@ -9,9 +9,15 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get DefaultCensor () {
13
+ return DefaultCensor;
14
+ },
12
15
  get DefaultLogLevel () {
13
16
  return DefaultLogLevel;
14
17
  },
18
+ get DefaultRedactionKeys () {
19
+ return DefaultRedactionKeys;
20
+ },
15
21
  get DefaultRedactions () {
16
22
  return DefaultRedactions;
17
23
  },
@@ -36,11 +42,20 @@ const LogLevels = {
36
42
  trace: 10
37
43
  };
38
44
  const DefaultLogLevel = "info";
45
+ const DefaultCensor = "[Redacted]";
46
+ const DefaultRedactionKeys = [
47
+ "password",
48
+ "secret",
49
+ "token",
50
+ "otp",
51
+ "pw",
52
+ "userconfig"
53
+ ];
39
54
  const DefaultRedactions = {
40
- paths: [
41
- "*.password",
42
- "*.secret"
43
- ]
55
+ paths: DefaultRedactionKeys.flatMap((key)=>[
56
+ key,
57
+ `*.${key}`
58
+ ])
44
59
  };
45
60
 
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExPR19MRVZFTFMgPSBbXCJmYXRhbFwiLCBcImVycm9yXCIsIFwid2FyblwiLCBcImluZm9cIiwgXCJkZWJ1Z1wiLCBcInRyYWNlXCJdIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2dMZXZlbCA9IHR5cGVvZiBMT0dfTEVWRUxTO1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0TGV2ZWxzID0gTG9nTGV2ZWxbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVscyA9IHtcblx0ZmF0YWw6IDYwLFxuXHRlcnJvcjogNTAsXG5cdHdhcm46IDQwLFxuXHRpbmZvOiAzMCxcblx0ZGVidWc6IDIwLFxuXHR0cmFjZTogMTAsXG59IHNhdGlzZmllcyBSZWNvcmQ8RGVmYXVsdExldmVscywgbnVtYmVyPjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dMZXZlbDogRGVmYXVsdExldmVscyA9IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBSZWRhY3Rpb25PcHRpb25zID0ge1xuXHRwYXRoczogc3RyaW5nW107XG59O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdFJlZGFjdGlvbnM6IFJlZGFjdGlvbk9wdGlvbnMgPSB7IHBhdGhzOiBbXCIqLnBhc3N3b3JkXCIsIFwiKi5zZWNyZXRcIl0gfTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpYmVPcHRpb25zPFxuXHRUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG5cdEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSB1bmRlZmluZWQsXG4+IHtcblx0bG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nO1xuXHRjdXN0b21MZXZlbHM/OiB7XG5cdFx0W2xldmVsIGluIFRdOiBudW1iZXI7XG5cdH07XG5cdGN1c3RvbU9ubHk/OiBDdXN0b21Pbmx5O1xuXHRyZWRhY3Rpb25zPzogUmVkYWN0aW9uT3B0aW9ucztcbn1cblxuZXhwb3J0IHR5cGUgTG9nQWRhcHRlck9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG4iXSwibmFtZXMiOlsiRGVmYXVsdExvZ0xldmVsIiwiRGVmYXVsdFJlZGFjdGlvbnMiLCJMb2dMZXZlbHMiLCJMT0dfTEVWRUxTIiwiZmF0YWwiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwiZGVidWciLCJ0cmFjZSIsInBhdGhzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWVhQTtlQUFBQTs7UUFNQUM7ZUFBQUE7O1FBZkFDO2VBQUFBOzs7QUFOYixNQUFNQyxhQUFhO0lBQUM7SUFBUztJQUFTO0lBQVE7SUFBUTtJQUFTO0NBQVE7QUFNaEUsTUFBTUQsWUFBWTtJQUN4QkUsT0FBTztJQUNQQyxPQUFPO0lBQ1BDLE1BQU07SUFDTkMsTUFBTTtJQUNOQyxPQUFPO0lBQ1BDLE9BQU87QUFDUjtBQUVPLE1BQU1ULGtCQUFpQztBQU12QyxNQUFNQyxvQkFBc0M7SUFBRVMsT0FBTztRQUFDO1FBQWM7S0FBVztBQUFDIn0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExPR19MRVZFTFMgPSBbXCJmYXRhbFwiLCBcImVycm9yXCIsIFwid2FyblwiLCBcImluZm9cIiwgXCJkZWJ1Z1wiLCBcInRyYWNlXCJdIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2dMZXZlbCA9IHR5cGVvZiBMT0dfTEVWRUxTO1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0TGV2ZWxzID0gTG9nTGV2ZWxbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVscyA9IHtcblx0ZmF0YWw6IDYwLFxuXHRlcnJvcjogNTAsXG5cdHdhcm46IDQwLFxuXHRpbmZvOiAzMCxcblx0ZGVidWc6IDIwLFxuXHR0cmFjZTogMTAsXG59IHNhdGlzZmllcyBSZWNvcmQ8RGVmYXVsdExldmVscywgbnVtYmVyPjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dMZXZlbDogRGVmYXVsdExldmVscyA9IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBSZWRhY3Rpb25PcHRpb25zID0ge1xuXHRwYXRoczogc3RyaW5nW107XG59O1xuXG4vKiogUGlubydzIGRlZmF1bHQgY2Vuc29yLiBDb25zb2xlQWRhcHRlciB1c2VzIHRoZSBzYW1lIHBsYWNlaG9sZGVyLiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRDZW5zb3IgPSBcIltSZWRhY3RlZF1cIjtcblxuLyoqXG4gKiBPYmplY3Qga2V5cyBTY3JpYmUgcmVkYWN0cy4gQWRhcHRlcnMgYXBwbHkgdGhpcyBsaXN0IOKAlCBQaW5vIHZpYSBgcmVkYWN0LnBhdGhzYFxuICogKHRvcC1sZXZlbCBhbmQgb25lIG5lc3QpLCBDb25zb2xlQWRhcHRlciB2aWEgYHJlZGFjdC5vYmplY3RgLlxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFJlZGFjdGlvbktleXMgPSBbXG5cdFwicGFzc3dvcmRcIixcblx0XCJzZWNyZXRcIixcblx0XCJ0b2tlblwiLFxuXHRcIm90cFwiLFxuXHRcInB3XCIsXG5cdFwidXNlcmNvbmZpZ1wiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRSZWRhY3Rpb25zOiBSZWRhY3Rpb25PcHRpb25zID0ge1xuXHRwYXRoczogRGVmYXVsdFJlZGFjdGlvbktleXMuZmxhdE1hcCgoa2V5KSA9PiBba2V5LCBgKi4ke2tleX1gXSksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmliZU9wdGlvbnM8XG5cdFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcixcblx0Q3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IHVuZGVmaW5lZCxcbj4ge1xuXHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmc7XG5cdGN1c3RvbUxldmVscz86IHtcblx0XHRbbGV2ZWwgaW4gVF06IG51bWJlcjtcblx0fTtcblx0Y3VzdG9tT25seT86IEN1c3RvbU9ubHk7XG5cdHJlZGFjdGlvbnM/OiBSZWRhY3Rpb25PcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBMb2dBZGFwdGVyT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiJdLCJuYW1lcyI6WyJEZWZhdWx0Q2Vuc29yIiwiRGVmYXVsdExvZ0xldmVsIiwiRGVmYXVsdFJlZGFjdGlvbktleXMiLCJEZWZhdWx0UmVkYWN0aW9ucyIsIkxvZ0xldmVscyIsIkxPR19MRVZFTFMiLCJmYXRhbCIsImVycm9yIiwid2FybiIsImluZm8iLCJkZWJ1ZyIsInRyYWNlIiwicGF0aHMiLCJmbGF0TWFwIiwia2V5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQXNCYUE7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQWFBQztlQUFBQTs7UUFTQUM7ZUFBQUE7O1FBL0JBQztlQUFBQTs7O0FBTmIsTUFBTUMsYUFBYTtJQUFDO0lBQVM7SUFBUztJQUFRO0lBQVE7SUFBUztDQUFRO0FBTWhFLE1BQU1ELFlBQVk7SUFDeEJFLE9BQU87SUFDUEMsT0FBTztJQUNQQyxNQUFNO0lBQ05DLE1BQU07SUFDTkMsT0FBTztJQUNQQyxPQUFPO0FBQ1I7QUFFTyxNQUFNVixrQkFBaUM7QUFPdkMsTUFBTUQsZ0JBQWdCO0FBTXRCLE1BQU1FLHVCQUF1QjtJQUNuQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVNLE1BQU1DLG9CQUFzQztJQUNsRFMsT0FBT1YscUJBQXFCVyxPQUFPLENBQUMsQ0FBQ0MsTUFBUTtZQUFDQTtZQUFLLENBQUMsRUFBRSxFQUFFQSxLQUFLO1NBQUM7QUFDL0QifQ==
@@ -1,28 +1,30 @@
1
1
  import { formatError, LogAdapter } from "./logger.adapter.js";
2
+ import { redact } from "./redact.js";
2
3
  import { DefaultLogLevel, LogLevels } from "./types.js";
3
4
  export class ConsoleAdapter extends LogAdapter {
4
5
  configuredLevels;
5
6
  configuredLogLevel = DefaultLogLevel;
6
7
  configuredLogLevelValue = LogLevels.info;
8
+ redactionKeys = redact.fromOptions();
7
9
  constructor(_options = {}){
8
10
  super();
9
11
  }
10
12
  configure(scribeOptions) {
11
- // Get merged log levels (default + custom) using parent class method
12
13
  this.configuredLevels = this.getLogLevels(scribeOptions);
13
14
  const logLevelStr = scribeOptions.logLevel ?? DefaultLogLevel;
14
15
  this.configuredLogLevel = logLevelStr;
15
16
  this.configuredLogLevelValue = this.configuredLevels[logLevelStr] ?? LogLevels.info;
17
+ this.redactionKeys = redact.fromOptions(scribeOptions.redactions);
16
18
  }
17
19
  getLogger(name) {
18
20
  const loggerName = name || "default";
19
21
  return this.createConsoleLogger(loggerName);
20
22
  }
21
23
  createConsoleLogger(name) {
22
- // Use the levels configured during the configure() call
23
24
  const allLevels = this.configuredLevels;
24
25
  const currentLevel = this.configuredLogLevel;
25
26
  const threshold = this.configuredLogLevelValue;
27
+ const redactionKeys = this.redactionKeys;
26
28
  const baseLogger = {
27
29
  get currentLevel () {
28
30
  return currentLevel;
@@ -35,24 +37,22 @@ export class ConsoleAdapter extends LogAdapter {
35
37
  const timestamp = new Date().toISOString();
36
38
  let message;
37
39
  if (typeof msg === "object") {
38
- message = msg instanceof Error ? formatError(msg) : JSON.stringify(msg);
40
+ message = msg instanceof Error ? formatError(msg) : JSON.stringify(redact.object(msg, redactionKeys));
39
41
  } else {
40
42
  message = String(msg);
41
43
  }
42
44
  const logLine = `[${timestamp}] ${level.toUpperCase()} [${name}]: ${message}`;
43
- if (args.length > 0) {
44
- console.log(logLine, ...args);
45
+ const payload = args.map((arg)=>redact.object(arg, redactionKeys));
46
+ if (payload.length > 0) {
47
+ console.log(logLine, ...payload);
45
48
  } else {
46
49
  console.log(logLine);
47
50
  }
48
51
  };
49
52
  const noop = ()=>{};
50
- // Start with base logger and isLevelEnabled method
51
53
  const logger = Object.assign(baseLogger, {
52
54
  isLevelEnabled: (level)=>(allLevels[level] ?? 0) >= threshold
53
55
  });
54
- // Dynamically add all log level methods (default + custom)
55
- // Levels below the configured threshold are patched to noop
56
56
  for (const [levelName, levelValue] of Object.entries(allLevels)){
57
57
  // biome-ignore lint/suspicious/noExplicitAny: Dynamic logger level creation requires any
58
58
  logger[levelName] = levelValue >= threshold ? logFunction(levelName) : noop;
@@ -61,4 +61,4 @@ export class ConsoleAdapter extends LogAdapter {
61
61
  }
62
62
  }
63
63
 
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2NvbnNvbGUuYWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXRFcnJvciwgTG9nQWRhcHRlciB9IGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VMb2dnZXIsIExvZ2dlciB9IGZyb20gXCIuL2xvZ2dlci50eXBlLmpzXCI7XG5pbXBvcnQge1xuXHREZWZhdWx0TG9nTGV2ZWwsXG5cdHR5cGUgTG9nQWRhcHRlck9wdGlvbnMsXG5cdExvZ0xldmVscyxcblx0dHlwZSBTY3JpYmVPcHRpb25zLFxufSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuXG5leHBvcnQgdHlwZSBDb25zb2xlQWRhcHRlck9wdGlvbnMgPSB7fSAmIExvZ0FkYXB0ZXJPcHRpb25zO1xuXG5leHBvcnQgY2xhc3MgQ29uc29sZUFkYXB0ZXIgZXh0ZW5kcyBMb2dBZGFwdGVyIHtcblx0cHJpdmF0ZSBjb25maWd1cmVkTGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXHRwcml2YXRlIGNvbmZpZ3VyZWRMb2dMZXZlbDogc3RyaW5nID0gRGVmYXVsdExvZ0xldmVsO1xuXHRwcml2YXRlIGNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlOiBudW1iZXIgPSBMb2dMZXZlbHMuaW5mbztcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoX29wdGlvbnM6IENvbnNvbGVBZGFwdGVyT3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdHNjcmliZU9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdC8vIEdldCBtZXJnZWQgbG9nIGxldmVscyAoZGVmYXVsdCArIGN1c3RvbSkgdXNpbmcgcGFyZW50IGNsYXNzIG1ldGhvZFxuXHRcdHRoaXMuY29uZmlndXJlZExldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGxvZ0xldmVsU3RyID0gc2NyaWJlT3B0aW9ucy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWw7XG5cdFx0dGhpcy5jb25maWd1cmVkTG9nTGV2ZWwgPSBsb2dMZXZlbFN0cjtcblx0XHR0aGlzLmNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlID0gdGhpcy5jb25maWd1cmVkTGV2ZWxzW2xvZ0xldmVsU3RyXSA/PyBMb2dMZXZlbHMuaW5mbztcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2dnZXI8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdG5hbWU/OiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyTmFtZSA9IG5hbWUgfHwgXCJkZWZhdWx0XCI7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlQ29uc29sZUxvZ2dlcjxULCBDdXN0b21Pbmx5Pihsb2dnZXJOYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlQ29uc29sZUxvZ2dlcjxcblx0XHRUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG5cdFx0Q3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlLFxuXHQ+KG5hbWU6IHN0cmluZyk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Ly8gVXNlIHRoZSBsZXZlbHMgY29uZmlndXJlZCBkdXJpbmcgdGhlIGNvbmZpZ3VyZSgpIGNhbGxcblx0XHRjb25zdCBhbGxMZXZlbHMgPSB0aGlzLmNvbmZpZ3VyZWRMZXZlbHM7XG5cdFx0Y29uc3QgY3VycmVudExldmVsID0gdGhpcy5jb25maWd1cmVkTG9nTGV2ZWw7XG5cdFx0Y29uc3QgdGhyZXNob2xkID0gdGhpcy5jb25maWd1cmVkTG9nTGV2ZWxWYWx1ZTtcblxuXHRcdGNvbnN0IGJhc2VMb2dnZXI6IEJhc2VMb2dnZXIgPSB7XG5cdFx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudExldmVsO1xuXHRcdFx0fSxcblx0XHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRcdHJldHVybiBhbGxMZXZlbHM7XG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRjb25zdCBsb2dGdW5jdGlvbiA9XG5cdFx0XHQobGV2ZWw6IHN0cmluZykgPT5cblx0XHRcdChtc2c6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCwgLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblx0XHRcdFx0bGV0IG1lc3NhZ2U6IHN0cmluZztcblxuXHRcdFx0XHRpZiAodHlwZW9mIG1zZyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG1lc3NhZ2UgPSBtc2cgaW5zdGFuY2VvZiBFcnJvciA/IGZvcm1hdEVycm9yKG1zZykgOiBKU09OLnN0cmluZ2lmeShtc2cpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lc3NhZ2UgPSBTdHJpbmcobXNnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGxvZ0xpbmUgPSBgWyR7dGltZXN0YW1wfV0gJHtsZXZlbC50b1VwcGVyQ2FzZSgpfSBbJHtuYW1lfV06ICR7bWVzc2FnZX1gO1xuXG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhsb2dMaW5lLCAuLi5hcmdzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhsb2dMaW5lKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuXHRcdC8vIFN0YXJ0IHdpdGggYmFzZSBsb2dnZXIgYW5kIGlzTGV2ZWxFbmFibGVkIG1ldGhvZFxuXHRcdGNvbnN0IGxvZ2dlciA9IE9iamVjdC5hc3NpZ24oYmFzZUxvZ2dlciwge1xuXHRcdFx0aXNMZXZlbEVuYWJsZWQ6IChsZXZlbDogc3RyaW5nKSA9PiAoYWxsTGV2ZWxzW2xldmVsXSA/PyAwKSA+PSB0aHJlc2hvbGQsXG5cdFx0fSk7XG5cblx0XHQvLyBEeW5hbWljYWxseSBhZGQgYWxsIGxvZyBsZXZlbCBtZXRob2RzIChkZWZhdWx0ICsgY3VzdG9tKVxuXHRcdC8vIExldmVscyBiZWxvdyB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQgYXJlIHBhdGNoZWQgdG8gbm9vcFxuXHRcdGZvciAoY29uc3QgW2xldmVsTmFtZSwgbGV2ZWxWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsTGV2ZWxzKSkge1xuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBEeW5hbWljIGxvZ2dlciBsZXZlbCBjcmVhdGlvbiByZXF1aXJlcyBhbnlcblx0XHRcdChsb2dnZXIgYXMgYW55KVtsZXZlbE5hbWVdID0gbGV2ZWxWYWx1ZSA+PSB0aHJlc2hvbGQgPyBsb2dGdW5jdGlvbihsZXZlbE5hbWUpIDogbm9vcDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbG9nZ2VyIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuIl0sIm5hbWVzIjpbImZvcm1hdEVycm9yIiwiTG9nQWRhcHRlciIsIkRlZmF1bHRMb2dMZXZlbCIsIkxvZ0xldmVscyIsIkNvbnNvbGVBZGFwdGVyIiwiY29uZmlndXJlZExldmVscyIsImNvbmZpZ3VyZWRMb2dMZXZlbCIsImNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlIiwiaW5mbyIsIl9vcHRpb25zIiwiY29uZmlndXJlIiwic2NyaWJlT3B0aW9ucyIsImdldExvZ0xldmVscyIsImxvZ0xldmVsU3RyIiwibG9nTGV2ZWwiLCJnZXRMb2dnZXIiLCJuYW1lIiwibG9nZ2VyTmFtZSIsImNyZWF0ZUNvbnNvbGVMb2dnZXIiLCJhbGxMZXZlbHMiLCJjdXJyZW50TGV2ZWwiLCJ0aHJlc2hvbGQiLCJiYXNlTG9nZ2VyIiwibG9nTGV2ZWxzIiwibG9nRnVuY3Rpb24iLCJsZXZlbCIsIm1zZyIsImFyZ3MiLCJ0aW1lc3RhbXAiLCJEYXRlIiwidG9JU09TdHJpbmciLCJtZXNzYWdlIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwibG9nTGluZSIsInRvVXBwZXJDYXNlIiwibGVuZ3RoIiwiY29uc29sZSIsImxvZyIsIm5vb3AiLCJsb2dnZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0xldmVsRW5hYmxlZCIsImxldmVsTmFtZSIsImxldmVsVmFsdWUiLCJlbnRyaWVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFXLEVBQUVDLFVBQVUsUUFBUSxzQkFBc0I7QUFFOUQsU0FDQ0MsZUFBZSxFQUVmQyxTQUFTLFFBRUgsYUFBYTtBQUlwQixPQUFPLE1BQU1DLHVCQUF1Qkg7SUFDM0JJLGlCQUF5QztJQUN6Q0MscUJBQTZCSixnQkFBZ0I7SUFDN0NLLDBCQUFrQ0osVUFBVUssSUFBSSxDQUFDO0lBRXpELFlBQW1CQyxXQUFrQyxDQUFDLENBQUMsQ0FBRTtRQUN4RCxLQUFLO0lBQ047SUFFT0MsVUFDTkMsYUFBMkMsRUFDMUM7UUFDRCxxRUFBcUU7UUFDckUsSUFBSSxDQUFDTixnQkFBZ0IsR0FBRyxJQUFJLENBQUNPLFlBQVksQ0FBQ0Q7UUFDMUMsTUFBTUUsY0FBY0YsY0FBY0csUUFBUSxJQUFJWjtRQUM5QyxJQUFJLENBQUNJLGtCQUFrQixHQUFHTztRQUMxQixJQUFJLENBQUNOLHVCQUF1QixHQUFHLElBQUksQ0FBQ0YsZ0JBQWdCLENBQUNRLFlBQVksSUFBSVYsVUFBVUssSUFBSTtJQUNwRjtJQUVPTyxVQUNOQyxJQUFhLEVBQ1c7UUFDeEIsTUFBTUMsYUFBYUQsUUFBUTtRQUMzQixPQUFPLElBQUksQ0FBQ0UsbUJBQW1CLENBQWdCRDtJQUNoRDtJQUVRQyxvQkFHTkYsSUFBWSxFQUF5QjtRQUN0Qyx3REFBd0Q7UUFDeEQsTUFBTUcsWUFBWSxJQUFJLENBQUNkLGdCQUFnQjtRQUN2QyxNQUFNZSxlQUFlLElBQUksQ0FBQ2Qsa0JBQWtCO1FBQzVDLE1BQU1lLFlBQVksSUFBSSxDQUFDZCx1QkFBdUI7UUFFOUMsTUFBTWUsYUFBeUI7WUFDOUIsSUFBSUYsZ0JBQWU7Z0JBQ2xCLE9BQU9BO1lBQ1I7WUFDQSxJQUFJRyxhQUFZO2dCQUNmLE9BQU9KO1lBQ1I7UUFDRDtRQUVBLE1BQU1LLGNBQ0wsQ0FBQ0MsUUFDRCxDQUFDQyxLQUErQixHQUFHQztnQkFDbEMsTUFBTUMsWUFBWSxJQUFJQyxPQUFPQyxXQUFXO2dCQUN4QyxJQUFJQztnQkFFSixJQUFJLE9BQU9MLFFBQVEsVUFBVTtvQkFDNUJLLFVBQVVMLGVBQWVNLFFBQVFoQyxZQUFZMEIsT0FBT08sS0FBS0MsU0FBUyxDQUFDUjtnQkFDcEUsT0FBTztvQkFDTkssVUFBVUksT0FBT1Q7Z0JBQ2xCO2dCQUVBLE1BQU1VLFVBQVUsQ0FBQyxDQUFDLEVBQUVSLFVBQVUsRUFBRSxFQUFFSCxNQUFNWSxXQUFXLEdBQUcsRUFBRSxFQUFFckIsS0FBSyxHQUFHLEVBQUVlLFNBQVM7Z0JBRTdFLElBQUlKLEtBQUtXLE1BQU0sR0FBRyxHQUFHO29CQUNwQkMsUUFBUUMsR0FBRyxDQUFDSixZQUFZVDtnQkFDekIsT0FBTztvQkFDTlksUUFBUUMsR0FBRyxDQUFDSjtnQkFDYjtZQUNEO1FBRUQsTUFBTUssT0FBTyxLQUFPO1FBRXBCLG1EQUFtRDtRQUNuRCxNQUFNQyxTQUFTQyxPQUFPQyxNQUFNLENBQUN0QixZQUFZO1lBQ3hDdUIsZ0JBQWdCLENBQUNwQixRQUFrQixBQUFDTixDQUFBQSxTQUFTLENBQUNNLE1BQU0sSUFBSSxDQUFBLEtBQU1KO1FBQy9EO1FBRUEsMkRBQTJEO1FBQzNELDREQUE0RDtRQUM1RCxLQUFLLE1BQU0sQ0FBQ3lCLFdBQVdDLFdBQVcsSUFBSUosT0FBT0ssT0FBTyxDQUFDN0IsV0FBWTtZQUNoRSx5RkFBeUY7WUFDeEZ1QixNQUFjLENBQUNJLFVBQVUsR0FBR0MsY0FBYzFCLFlBQVlHLFlBQVlzQixhQUFhTDtRQUNqRjtRQUVBLE9BQU9DO0lBQ1I7QUFDRCJ9
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2NvbnNvbGUuYWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXRFcnJvciwgTG9nQWRhcHRlciB9IGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VMb2dnZXIsIExvZ2dlciB9IGZyb20gXCIuL2xvZ2dlci50eXBlLmpzXCI7XG5pbXBvcnQgeyByZWRhY3QgfSBmcm9tIFwiLi9yZWRhY3QuanNcIjtcbmltcG9ydCB7XG5cdERlZmF1bHRMb2dMZXZlbCxcblx0dHlwZSBMb2dBZGFwdGVyT3B0aW9ucyxcblx0TG9nTGV2ZWxzLFxuXHR0eXBlIFNjcmliZU9wdGlvbnMsXG59IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIENvbnNvbGVBZGFwdGVyT3B0aW9ucyA9IHt9ICYgTG9nQWRhcHRlck9wdGlvbnM7XG5cbmV4cG9ydCBjbGFzcyBDb25zb2xlQWRhcHRlciBleHRlbmRzIExvZ0FkYXB0ZXIge1xuXHRwcml2YXRlIGNvbmZpZ3VyZWRMZXZlbHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG5cdHByaXZhdGUgY29uZmlndXJlZExvZ0xldmVsOiBzdHJpbmcgPSBEZWZhdWx0TG9nTGV2ZWw7XG5cdHByaXZhdGUgY29uZmlndXJlZExvZ0xldmVsVmFsdWU6IG51bWJlciA9IExvZ0xldmVscy5pbmZvO1xuXHRwcml2YXRlIHJlZGFjdGlvbktleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSByZWRhY3QuZnJvbU9wdGlvbnMoKTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoX29wdGlvbnM6IENvbnNvbGVBZGFwdGVyT3B0aW9ucyA9IHt9KSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBjb25maWd1cmU8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdHNjcmliZU9wdGlvbnM6IFNjcmliZU9wdGlvbnM8VCwgQ3VzdG9tT25seT4sXG5cdCkge1xuXHRcdHRoaXMuY29uZmlndXJlZExldmVscyA9IHRoaXMuZ2V0TG9nTGV2ZWxzKHNjcmliZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGxvZ0xldmVsU3RyID0gc2NyaWJlT3B0aW9ucy5sb2dMZXZlbCA/PyBEZWZhdWx0TG9nTGV2ZWw7XG5cdFx0dGhpcy5jb25maWd1cmVkTG9nTGV2ZWwgPSBsb2dMZXZlbFN0cjtcblx0XHR0aGlzLmNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlID0gdGhpcy5jb25maWd1cmVkTGV2ZWxzW2xvZ0xldmVsU3RyXSA/PyBMb2dMZXZlbHMuaW5mbztcblx0XHR0aGlzLnJlZGFjdGlvbktleXMgPSByZWRhY3QuZnJvbU9wdGlvbnMoc2NyaWJlT3B0aW9ucy5yZWRhY3Rpb25zKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2dnZXI8VCBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBDdXN0b21Pbmx5IGV4dGVuZHMgdHJ1ZSB8IGZhbHNlID0gZmFsc2U+KFxuXHRcdG5hbWU/OiBzdHJpbmcsXG5cdCk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgbG9nZ2VyTmFtZSA9IG5hbWUgfHwgXCJkZWZhdWx0XCI7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlQ29uc29sZUxvZ2dlcjxULCBDdXN0b21Pbmx5Pihsb2dnZXJOYW1lKTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlQ29uc29sZUxvZ2dlcjxcblx0XHRUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG5cdFx0Q3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IGZhbHNlLFxuXHQ+KG5hbWU6IHN0cmluZyk6IExvZ2dlcjxULCBDdXN0b21Pbmx5PiB7XG5cdFx0Y29uc3QgYWxsTGV2ZWxzID0gdGhpcy5jb25maWd1cmVkTGV2ZWxzO1xuXHRcdGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuY29uZmlndXJlZExvZ0xldmVsO1xuXHRcdGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuY29uZmlndXJlZExvZ0xldmVsVmFsdWU7XG5cdFx0Y29uc3QgcmVkYWN0aW9uS2V5cyA9IHRoaXMucmVkYWN0aW9uS2V5cztcblxuXHRcdGNvbnN0IGJhc2VMb2dnZXI6IEJhc2VMb2dnZXIgPSB7XG5cdFx0XHRnZXQgY3VycmVudExldmVsKCkge1xuXHRcdFx0XHRyZXR1cm4gY3VycmVudExldmVsO1xuXHRcdFx0fSxcblx0XHRcdGdldCBsb2dMZXZlbHMoKSB7XG5cdFx0XHRcdHJldHVybiBhbGxMZXZlbHM7XG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRjb25zdCBsb2dGdW5jdGlvbiA9XG5cdFx0XHQobGV2ZWw6IHN0cmluZykgPT5cblx0XHRcdChtc2c6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCwgLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblx0XHRcdFx0bGV0IG1lc3NhZ2U6IHN0cmluZztcblxuXHRcdFx0XHRpZiAodHlwZW9mIG1zZyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG1lc3NhZ2UgPVxuXHRcdFx0XHRcdFx0bXNnIGluc3RhbmNlb2YgRXJyb3Jcblx0XHRcdFx0XHRcdFx0PyBmb3JtYXRFcnJvcihtc2cpXG5cdFx0XHRcdFx0XHRcdDogSlNPTi5zdHJpbmdpZnkocmVkYWN0Lm9iamVjdChtc2csIHJlZGFjdGlvbktleXMpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtZXNzYWdlID0gU3RyaW5nKG1zZyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBsb2dMaW5lID0gYFske3RpbWVzdGFtcH1dICR7bGV2ZWwudG9VcHBlckNhc2UoKX0gWyR7bmFtZX1dOiAke21lc3NhZ2V9YDtcblx0XHRcdFx0Y29uc3QgcGF5bG9hZCA9IGFyZ3MubWFwKChhcmcpID0+IHJlZGFjdC5vYmplY3QoYXJnLCByZWRhY3Rpb25LZXlzKSk7XG5cblx0XHRcdFx0aWYgKHBheWxvYWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGxvZ0xpbmUsIC4uLnBheWxvYWQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGxvZ0xpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Y29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5cdFx0Y29uc3QgbG9nZ2VyID0gT2JqZWN0LmFzc2lnbihiYXNlTG9nZ2VyLCB7XG5cdFx0XHRpc0xldmVsRW5hYmxlZDogKGxldmVsOiBzdHJpbmcpID0+IChhbGxMZXZlbHNbbGV2ZWxdID8/IDApID49IHRocmVzaG9sZCxcblx0XHR9KTtcblxuXHRcdGZvciAoY29uc3QgW2xldmVsTmFtZSwgbGV2ZWxWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsTGV2ZWxzKSkge1xuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBEeW5hbWljIGxvZ2dlciBsZXZlbCBjcmVhdGlvbiByZXF1aXJlcyBhbnlcblx0XHRcdChsb2dnZXIgYXMgYW55KVtsZXZlbE5hbWVdID0gbGV2ZWxWYWx1ZSA+PSB0aHJlc2hvbGQgPyBsb2dGdW5jdGlvbihsZXZlbE5hbWUpIDogbm9vcDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbG9nZ2VyIGFzIExvZ2dlcjxULCBDdXN0b21Pbmx5Pjtcblx0fVxufVxuIl0sIm5hbWVzIjpbImZvcm1hdEVycm9yIiwiTG9nQWRhcHRlciIsInJlZGFjdCIsIkRlZmF1bHRMb2dMZXZlbCIsIkxvZ0xldmVscyIsIkNvbnNvbGVBZGFwdGVyIiwiY29uZmlndXJlZExldmVscyIsImNvbmZpZ3VyZWRMb2dMZXZlbCIsImNvbmZpZ3VyZWRMb2dMZXZlbFZhbHVlIiwiaW5mbyIsInJlZGFjdGlvbktleXMiLCJmcm9tT3B0aW9ucyIsIl9vcHRpb25zIiwiY29uZmlndXJlIiwic2NyaWJlT3B0aW9ucyIsImdldExvZ0xldmVscyIsImxvZ0xldmVsU3RyIiwibG9nTGV2ZWwiLCJyZWRhY3Rpb25zIiwiZ2V0TG9nZ2VyIiwibmFtZSIsImxvZ2dlck5hbWUiLCJjcmVhdGVDb25zb2xlTG9nZ2VyIiwiYWxsTGV2ZWxzIiwiY3VycmVudExldmVsIiwidGhyZXNob2xkIiwiYmFzZUxvZ2dlciIsImxvZ0xldmVscyIsImxvZ0Z1bmN0aW9uIiwibGV2ZWwiLCJtc2ciLCJhcmdzIiwidGltZXN0YW1wIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwibWVzc2FnZSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9iamVjdCIsIlN0cmluZyIsImxvZ0xpbmUiLCJ0b1VwcGVyQ2FzZSIsInBheWxvYWQiLCJtYXAiLCJhcmciLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwibm9vcCIsImxvZ2dlciIsIk9iamVjdCIsImFzc2lnbiIsImlzTGV2ZWxFbmFibGVkIiwibGV2ZWxOYW1lIiwibGV2ZWxWYWx1ZSIsImVudHJpZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFdBQVcsRUFBRUMsVUFBVSxRQUFRLHNCQUFzQjtBQUU5RCxTQUFTQyxNQUFNLFFBQVEsY0FBYztBQUNyQyxTQUNDQyxlQUFlLEVBRWZDLFNBQVMsUUFFSCxhQUFhO0FBSXBCLE9BQU8sTUFBTUMsdUJBQXVCSjtJQUMzQkssaUJBQXlDO0lBQ3pDQyxxQkFBNkJKLGdCQUFnQjtJQUM3Q0ssMEJBQWtDSixVQUFVSyxJQUFJLENBQUM7SUFDakRDLGdCQUFxQ1IsT0FBT1MsV0FBVyxHQUFHO0lBRWxFLFlBQW1CQyxXQUFrQyxDQUFDLENBQUMsQ0FBRTtRQUN4RCxLQUFLO0lBQ047SUFFT0MsVUFDTkMsYUFBMkMsRUFDMUM7UUFDRCxJQUFJLENBQUNSLGdCQUFnQixHQUFHLElBQUksQ0FBQ1MsWUFBWSxDQUFDRDtRQUMxQyxNQUFNRSxjQUFjRixjQUFjRyxRQUFRLElBQUlkO1FBQzlDLElBQUksQ0FBQ0ksa0JBQWtCLEdBQUdTO1FBQzFCLElBQUksQ0FBQ1IsdUJBQXVCLEdBQUcsSUFBSSxDQUFDRixnQkFBZ0IsQ0FBQ1UsWUFBWSxJQUFJWixVQUFVSyxJQUFJO1FBQ25GLElBQUksQ0FBQ0MsYUFBYSxHQUFHUixPQUFPUyxXQUFXLENBQUNHLGNBQWNJLFVBQVU7SUFDakU7SUFFT0MsVUFDTkMsSUFBYSxFQUNXO1FBQ3hCLE1BQU1DLGFBQWFELFFBQVE7UUFDM0IsT0FBTyxJQUFJLENBQUNFLG1CQUFtQixDQUFnQkQ7SUFDaEQ7SUFFUUMsb0JBR05GLElBQVksRUFBeUI7UUFDdEMsTUFBTUcsWUFBWSxJQUFJLENBQUNqQixnQkFBZ0I7UUFDdkMsTUFBTWtCLGVBQWUsSUFBSSxDQUFDakIsa0JBQWtCO1FBQzVDLE1BQU1rQixZQUFZLElBQUksQ0FBQ2pCLHVCQUF1QjtRQUM5QyxNQUFNRSxnQkFBZ0IsSUFBSSxDQUFDQSxhQUFhO1FBRXhDLE1BQU1nQixhQUF5QjtZQUM5QixJQUFJRixnQkFBZTtnQkFDbEIsT0FBT0E7WUFDUjtZQUNBLElBQUlHLGFBQVk7Z0JBQ2YsT0FBT0o7WUFDUjtRQUNEO1FBRUEsTUFBTUssY0FDTCxDQUFDQyxRQUNELENBQUNDLEtBQStCLEdBQUdDO2dCQUNsQyxNQUFNQyxZQUFZLElBQUlDLE9BQU9DLFdBQVc7Z0JBQ3hDLElBQUlDO2dCQUVKLElBQUksT0FBT0wsUUFBUSxVQUFVO29CQUM1QkssVUFDQ0wsZUFBZU0sUUFDWnBDLFlBQVk4QixPQUNaTyxLQUFLQyxTQUFTLENBQUNwQyxPQUFPcUMsTUFBTSxDQUFDVCxLQUFLcEI7Z0JBQ3ZDLE9BQU87b0JBQ055QixVQUFVSyxPQUFPVjtnQkFDbEI7Z0JBRUEsTUFBTVcsVUFBVSxDQUFDLENBQUMsRUFBRVQsVUFBVSxFQUFFLEVBQUVILE1BQU1hLFdBQVcsR0FBRyxFQUFFLEVBQUV0QixLQUFLLEdBQUcsRUFBRWUsU0FBUztnQkFDN0UsTUFBTVEsVUFBVVosS0FBS2EsR0FBRyxDQUFDLENBQUNDLE1BQVEzQyxPQUFPcUMsTUFBTSxDQUFDTSxLQUFLbkM7Z0JBRXJELElBQUlpQyxRQUFRRyxNQUFNLEdBQUcsR0FBRztvQkFDdkJDLFFBQVFDLEdBQUcsQ0FBQ1AsWUFBWUU7Z0JBQ3pCLE9BQU87b0JBQ05JLFFBQVFDLEdBQUcsQ0FBQ1A7Z0JBQ2I7WUFDRDtRQUVELE1BQU1RLE9BQU8sS0FBTztRQUVwQixNQUFNQyxTQUFTQyxPQUFPQyxNQUFNLENBQUMxQixZQUFZO1lBQ3hDMkIsZ0JBQWdCLENBQUN4QixRQUFrQixBQUFDTixDQUFBQSxTQUFTLENBQUNNLE1BQU0sSUFBSSxDQUFBLEtBQU1KO1FBQy9EO1FBRUEsS0FBSyxNQUFNLENBQUM2QixXQUFXQyxXQUFXLElBQUlKLE9BQU9LLE9BQU8sQ0FBQ2pDLFdBQVk7WUFDaEUseUZBQXlGO1lBQ3hGMkIsTUFBYyxDQUFDSSxVQUFVLEdBQUdDLGNBQWM5QixZQUFZRyxZQUFZMEIsYUFBYUw7UUFDakY7UUFFQSxPQUFPQztJQUNSO0FBQ0QifQ==
package/es6/src/index.js CHANGED
@@ -4,6 +4,7 @@ export * from "./errors.js";
4
4
  export * from "./logger.adapter.js";
5
5
  export * from "./logger.factory.js";
6
6
  export * from "./logger.type.js";
7
+ export * from "./redact.js";
7
8
  export * from "./types.js";
8
9
 
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnNvbGUuYWRhcHRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW52LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2dnZXIuZmFjdG9yeS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9nZ2VyLnR5cGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsY0FBYztBQUM1QixjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLHNCQUFzQjtBQUNwQyxjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLGFBQWEifQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnNvbGUuYWRhcHRlci5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW52LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvZ2dlci5hZGFwdGVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2dnZXIuZmFjdG9yeS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9nZ2VyLnR5cGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlZGFjdC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMuanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QjtBQUNyQyxjQUFjLFdBQVc7QUFDekIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsY0FBYztBQUM1QixjQUFjLGFBQWEifQ==
@@ -0,0 +1,52 @@
1
+ import { DefaultCensor, DefaultRedactions } from "./types.js";
2
+ function keysFromPaths(paths) {
3
+ const keys = new Set();
4
+ for (const path of paths){
5
+ const segments = path.split(".").filter((segment)=>segment.length > 0 && segment !== "*");
6
+ const key = segments.at(-1);
7
+ if (key != null) {
8
+ keys.add(key);
9
+ }
10
+ }
11
+ return keys;
12
+ }
13
+ function isPlainObject(value) {
14
+ if (value == null || typeof value !== "object" || Array.isArray(value) || value instanceof Error) {
15
+ return false;
16
+ }
17
+ const proto = Object.getPrototypeOf(value);
18
+ return proto === Object.prototype || proto === null;
19
+ }
20
+ function object(value, keys, censor = DefaultCensor, seen = new WeakSet()) {
21
+ if (value == null || typeof value !== "object") {
22
+ return value;
23
+ }
24
+ if (value instanceof Error) {
25
+ return value;
26
+ }
27
+ if (seen.has(value)) {
28
+ return value;
29
+ }
30
+ seen.add(value);
31
+ if (Array.isArray(value)) {
32
+ return value.map((item)=>object(item, keys, censor, seen));
33
+ }
34
+ if (!isPlainObject(value)) {
35
+ return value;
36
+ }
37
+ const out = {};
38
+ for (const [key, nested] of Object.entries(value)){
39
+ out[key] = keys.has(key) ? censor : object(nested, keys, censor, seen);
40
+ }
41
+ return out;
42
+ }
43
+ function fromOptions(options) {
44
+ return keysFromPaths(options?.paths ?? DefaultRedactions.paths);
45
+ }
46
+ export const redact = {
47
+ object,
48
+ keysFromPaths,
49
+ fromOptions
50
+ };
51
+
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL3JlZGFjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0Q2Vuc29yLCBEZWZhdWx0UmVkYWN0aW9ucywgdHlwZSBSZWRhY3Rpb25PcHRpb25zIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuZnVuY3Rpb24ga2V5c0Zyb21QYXRocyhwYXRoczogc3RyaW5nW10pOiBTZXQ8c3RyaW5nPiB7XG5cdGNvbnN0IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0Zm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG5cdFx0Y29uc3Qgc2VnbWVudHMgPSBwYXRoXG5cdFx0XHQuc3BsaXQoXCIuXCIpXG5cdFx0XHQuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50Lmxlbmd0aCA+IDAgJiYgc2VnbWVudCAhPT0gXCIqXCIpO1xuXHRcdGNvbnN0IGtleSA9IHNlZ21lbnRzLmF0KC0xKTtcblx0XHRpZiAoa2V5ICE9IG51bGwpIHtcblx0XHRcdGtleXMuYWRkKGtleSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRpZiAoXG5cdFx0dmFsdWUgPT0gbnVsbCB8fFxuXHRcdHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fFxuXHRcdEFycmF5LmlzQXJyYXkodmFsdWUpIHx8XG5cdFx0dmFsdWUgaW5zdGFuY2VvZiBFcnJvclxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXHRyZXR1cm4gcHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIG9iamVjdChcblx0dmFsdWU6IHVua25vd24sXG5cdGtleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4sXG5cdGNlbnNvcjogc3RyaW5nID0gRGVmYXVsdENlbnNvcixcblx0c2VlbjogV2Vha1NldDxvYmplY3Q+ID0gbmV3IFdlYWtTZXQoKSxcbik6IHVua25vd24ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRzZWVuLmFkZCh2YWx1ZSk7XG5cdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IG9iamVjdChpdGVtLCBrZXlzLCBjZW5zb3IsIHNlZW4pKTtcblx0fVxuXHRpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0Zm9yIChjb25zdCBba2V5LCBuZXN0ZWRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuXHRcdG91dFtrZXldID0ga2V5cy5oYXMoa2V5KSA/IGNlbnNvciA6IG9iamVjdChuZXN0ZWQsIGtleXMsIGNlbnNvciwgc2Vlbik7XG5cdH1cblx0cmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZnJvbU9wdGlvbnMob3B0aW9ucz86IFJlZGFjdGlvbk9wdGlvbnMpOiBTZXQ8c3RyaW5nPiB7XG5cdHJldHVybiBrZXlzRnJvbVBhdGhzKG9wdGlvbnM/LnBhdGhzID8/IERlZmF1bHRSZWRhY3Rpb25zLnBhdGhzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlZGFjdCA9IHsgb2JqZWN0LCBrZXlzRnJvbVBhdGhzLCBmcm9tT3B0aW9ucyB9O1xuIl0sIm5hbWVzIjpbIkRlZmF1bHRDZW5zb3IiLCJEZWZhdWx0UmVkYWN0aW9ucyIsImtleXNGcm9tUGF0aHMiLCJwYXRocyIsImtleXMiLCJTZXQiLCJwYXRoIiwic2VnbWVudHMiLCJzcGxpdCIsImZpbHRlciIsInNlZ21lbnQiLCJsZW5ndGgiLCJrZXkiLCJhdCIsImFkZCIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwicHJvdG8iLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInByb3RvdHlwZSIsIm9iamVjdCIsImNlbnNvciIsInNlZW4iLCJXZWFrU2V0IiwiaGFzIiwibWFwIiwiaXRlbSIsIm91dCIsIm5lc3RlZCIsImVudHJpZXMiLCJmcm9tT3B0aW9ucyIsIm9wdGlvbnMiLCJyZWRhY3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsRUFBRUMsaUJBQWlCLFFBQStCLGFBQWE7QUFFckYsU0FBU0MsY0FBY0MsS0FBZTtJQUNyQyxNQUFNQyxPQUFPLElBQUlDO0lBQ2pCLEtBQUssTUFBTUMsUUFBUUgsTUFBTztRQUN6QixNQUFNSSxXQUFXRCxLQUNmRSxLQUFLLENBQUMsS0FDTkMsTUFBTSxDQUFDLENBQUNDLFVBQVlBLFFBQVFDLE1BQU0sR0FBRyxLQUFLRCxZQUFZO1FBQ3hELE1BQU1FLE1BQU1MLFNBQVNNLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLElBQUlELE9BQU8sTUFBTTtZQUNoQlIsS0FBS1UsR0FBRyxDQUFDRjtRQUNWO0lBQ0Q7SUFDQSxPQUFPUjtBQUNSO0FBRUEsU0FBU1csY0FBY0MsS0FBYztJQUNwQyxJQUNDQSxTQUFTLFFBQ1QsT0FBT0EsVUFBVSxZQUNqQkMsTUFBTUMsT0FBTyxDQUFDRixVQUNkQSxpQkFBaUJHLE9BQ2hCO1FBQ0QsT0FBTztJQUNSO0lBQ0EsTUFBTUMsUUFBUUMsT0FBT0MsY0FBYyxDQUFDTjtJQUNwQyxPQUFPSSxVQUFVQyxPQUFPRSxTQUFTLElBQUlILFVBQVU7QUFDaEQ7QUFFQSxTQUFTSSxPQUNSUixLQUFjLEVBQ2RaLElBQXlCLEVBQ3pCcUIsU0FBaUJ6QixhQUFhLEVBQzlCMEIsT0FBd0IsSUFBSUMsU0FBUztJQUVyQyxJQUFJWCxTQUFTLFFBQVEsT0FBT0EsVUFBVSxVQUFVO1FBQy9DLE9BQU9BO0lBQ1I7SUFDQSxJQUFJQSxpQkFBaUJHLE9BQU87UUFDM0IsT0FBT0g7SUFDUjtJQUNBLElBQUlVLEtBQUtFLEdBQUcsQ0FBQ1osUUFBUTtRQUNwQixPQUFPQTtJQUNSO0lBQ0FVLEtBQUtaLEdBQUcsQ0FBQ0U7SUFDVCxJQUFJQyxNQUFNQyxPQUFPLENBQUNGLFFBQVE7UUFDekIsT0FBT0EsTUFBTWEsR0FBRyxDQUFDLENBQUNDLE9BQVNOLE9BQU9NLE1BQU0xQixNQUFNcUIsUUFBUUM7SUFDdkQ7SUFDQSxJQUFJLENBQUNYLGNBQWNDLFFBQVE7UUFDMUIsT0FBT0E7SUFDUjtJQUNBLE1BQU1lLE1BQStCLENBQUM7SUFDdEMsS0FBSyxNQUFNLENBQUNuQixLQUFLb0IsT0FBTyxJQUFJWCxPQUFPWSxPQUFPLENBQUNqQixPQUFRO1FBQ2xEZSxHQUFHLENBQUNuQixJQUFJLEdBQUdSLEtBQUt3QixHQUFHLENBQUNoQixPQUFPYSxTQUFTRCxPQUFPUSxRQUFRNUIsTUFBTXFCLFFBQVFDO0lBQ2xFO0lBQ0EsT0FBT0s7QUFDUjtBQUVBLFNBQVNHLFlBQVlDLE9BQTBCO0lBQzlDLE9BQU9qQyxjQUFjaUMsU0FBU2hDLFNBQVNGLGtCQUFrQkUsS0FBSztBQUMvRDtBQUVBLE9BQU8sTUFBTWlDLFNBQVM7SUFBRVo7SUFBUXRCO0lBQWVnQztBQUFZLEVBQUUifQ==
package/es6/src/types.js CHANGED
@@ -15,11 +15,23 @@ export const LogLevels = {
15
15
  trace: 10
16
16
  };
17
17
  export const DefaultLogLevel = "info";
18
+ /** Pino's default censor. ConsoleAdapter uses the same placeholder. */ export const DefaultCensor = "[Redacted]";
19
+ /**
20
+ * Object keys Scribe redacts. Adapters apply this list — Pino via `redact.paths`
21
+ * (top-level and one nest), ConsoleAdapter via `redact.object`.
22
+ */ export const DefaultRedactionKeys = [
23
+ "password",
24
+ "secret",
25
+ "token",
26
+ "otp",
27
+ "pw",
28
+ "userconfig"
29
+ ];
18
30
  export const DefaultRedactions = {
19
- paths: [
20
- "*.password",
21
- "*.secret"
22
- ]
31
+ paths: DefaultRedactionKeys.flatMap((key)=>[
32
+ key,
33
+ `*.${key}`
34
+ ])
23
35
  };
24
36
 
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExPR19MRVZFTFMgPSBbXCJmYXRhbFwiLCBcImVycm9yXCIsIFwid2FyblwiLCBcImluZm9cIiwgXCJkZWJ1Z1wiLCBcInRyYWNlXCJdIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2dMZXZlbCA9IHR5cGVvZiBMT0dfTEVWRUxTO1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0TGV2ZWxzID0gTG9nTGV2ZWxbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVscyA9IHtcblx0ZmF0YWw6IDYwLFxuXHRlcnJvcjogNTAsXG5cdHdhcm46IDQwLFxuXHRpbmZvOiAzMCxcblx0ZGVidWc6IDIwLFxuXHR0cmFjZTogMTAsXG59IHNhdGlzZmllcyBSZWNvcmQ8RGVmYXVsdExldmVscywgbnVtYmVyPjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dMZXZlbDogRGVmYXVsdExldmVscyA9IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBSZWRhY3Rpb25PcHRpb25zID0ge1xuXHRwYXRoczogc3RyaW5nW107XG59O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdFJlZGFjdGlvbnM6IFJlZGFjdGlvbk9wdGlvbnMgPSB7IHBhdGhzOiBbXCIqLnBhc3N3b3JkXCIsIFwiKi5zZWNyZXRcIl0gfTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpYmVPcHRpb25zPFxuXHRUIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXIsXG5cdEN1c3RvbU9ubHkgZXh0ZW5kcyB0cnVlIHwgZmFsc2UgPSB1bmRlZmluZWQsXG4+IHtcblx0bG9nTGV2ZWw/OiBEZWZhdWx0TGV2ZWxzIHwgc3RyaW5nO1xuXHRjdXN0b21MZXZlbHM/OiB7XG5cdFx0W2xldmVsIGluIFRdOiBudW1iZXI7XG5cdH07XG5cdGN1c3RvbU9ubHk/OiBDdXN0b21Pbmx5O1xuXHRyZWRhY3Rpb25zPzogUmVkYWN0aW9uT3B0aW9ucztcbn1cblxuZXhwb3J0IHR5cGUgTG9nQWRhcHRlck9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG4iXSwibmFtZXMiOlsiTE9HX0xFVkVMUyIsIkxvZ0xldmVscyIsImZhdGFsIiwiZXJyb3IiLCJ3YXJuIiwiaW5mbyIsImRlYnVnIiwidHJhY2UiLCJEZWZhdWx0TG9nTGV2ZWwiLCJEZWZhdWx0UmVkYWN0aW9ucyIsInBhdGhzIl0sIm1hcHBpbmdzIjoiQUFBQSxNQUFNQSxhQUFhO0lBQUM7SUFBUztJQUFTO0lBQVE7SUFBUTtJQUFTO0NBQVE7QUFNdkUsT0FBTyxNQUFNQyxZQUFZO0lBQ3hCQyxPQUFPO0lBQ1BDLE9BQU87SUFDUEMsTUFBTTtJQUNOQyxNQUFNO0lBQ05DLE9BQU87SUFDUEMsT0FBTztBQUNSLEVBQTBDO0FBRTFDLE9BQU8sTUFBTUMsa0JBQWlDLE9BQU87QUFNckQsT0FBTyxNQUFNQyxvQkFBc0M7SUFBRUMsT0FBTztRQUFDO1FBQWM7S0FBVztBQUFDLEVBQUUifQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjcmliZS9zY3JpYmUvc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExPR19MRVZFTFMgPSBbXCJmYXRhbFwiLCBcImVycm9yXCIsIFwid2FyblwiLCBcImluZm9cIiwgXCJkZWJ1Z1wiLCBcInRyYWNlXCJdIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBMb2dMZXZlbCA9IHR5cGVvZiBMT0dfTEVWRUxTO1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0TGV2ZWxzID0gTG9nTGV2ZWxbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IExvZ0xldmVscyA9IHtcblx0ZmF0YWw6IDYwLFxuXHRlcnJvcjogNTAsXG5cdHdhcm46IDQwLFxuXHRpbmZvOiAzMCxcblx0ZGVidWc6IDIwLFxuXHR0cmFjZTogMTAsXG59IHNhdGlzZmllcyBSZWNvcmQ8RGVmYXVsdExldmVscywgbnVtYmVyPjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dMZXZlbDogRGVmYXVsdExldmVscyA9IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBSZWRhY3Rpb25PcHRpb25zID0ge1xuXHRwYXRoczogc3RyaW5nW107XG59O1xuXG4vKiogUGlubydzIGRlZmF1bHQgY2Vuc29yLiBDb25zb2xlQWRhcHRlciB1c2VzIHRoZSBzYW1lIHBsYWNlaG9sZGVyLiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRDZW5zb3IgPSBcIltSZWRhY3RlZF1cIjtcblxuLyoqXG4gKiBPYmplY3Qga2V5cyBTY3JpYmUgcmVkYWN0cy4gQWRhcHRlcnMgYXBwbHkgdGhpcyBsaXN0IOKAlCBQaW5vIHZpYSBgcmVkYWN0LnBhdGhzYFxuICogKHRvcC1sZXZlbCBhbmQgb25lIG5lc3QpLCBDb25zb2xlQWRhcHRlciB2aWEgYHJlZGFjdC5vYmplY3RgLlxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFJlZGFjdGlvbktleXMgPSBbXG5cdFwicGFzc3dvcmRcIixcblx0XCJzZWNyZXRcIixcblx0XCJ0b2tlblwiLFxuXHRcIm90cFwiLFxuXHRcInB3XCIsXG5cdFwidXNlcmNvbmZpZ1wiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRSZWRhY3Rpb25zOiBSZWRhY3Rpb25PcHRpb25zID0ge1xuXHRwYXRoczogRGVmYXVsdFJlZGFjdGlvbktleXMuZmxhdE1hcCgoa2V5KSA9PiBba2V5LCBgKi4ke2tleX1gXSksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmliZU9wdGlvbnM8XG5cdFQgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcixcblx0Q3VzdG9tT25seSBleHRlbmRzIHRydWUgfCBmYWxzZSA9IHVuZGVmaW5lZCxcbj4ge1xuXHRsb2dMZXZlbD86IERlZmF1bHRMZXZlbHMgfCBzdHJpbmc7XG5cdGN1c3RvbUxldmVscz86IHtcblx0XHRbbGV2ZWwgaW4gVF06IG51bWJlcjtcblx0fTtcblx0Y3VzdG9tT25seT86IEN1c3RvbU9ubHk7XG5cdHJlZGFjdGlvbnM/OiBSZWRhY3Rpb25PcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBMb2dBZGFwdGVyT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiJdLCJuYW1lcyI6WyJMT0dfTEVWRUxTIiwiTG9nTGV2ZWxzIiwiZmF0YWwiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwiZGVidWciLCJ0cmFjZSIsIkRlZmF1bHRMb2dMZXZlbCIsIkRlZmF1bHRDZW5zb3IiLCJEZWZhdWx0UmVkYWN0aW9uS2V5cyIsIkRlZmF1bHRSZWRhY3Rpb25zIiwicGF0aHMiLCJmbGF0TWFwIiwia2V5Il0sIm1hcHBpbmdzIjoiQUFBQSxNQUFNQSxhQUFhO0lBQUM7SUFBUztJQUFTO0lBQVE7SUFBUTtJQUFTO0NBQVE7QUFNdkUsT0FBTyxNQUFNQyxZQUFZO0lBQ3hCQyxPQUFPO0lBQ1BDLE9BQU87SUFDUEMsTUFBTTtJQUNOQyxNQUFNO0lBQ05DLE9BQU87SUFDUEMsT0FBTztBQUNSLEVBQTBDO0FBRTFDLE9BQU8sTUFBTUMsa0JBQWlDLE9BQU87QUFNckQscUVBQXFFLEdBQ3JFLE9BQU8sTUFBTUMsZ0JBQWdCLGFBQWE7QUFFMUM7OztDQUdDLEdBQ0QsT0FBTyxNQUFNQyx1QkFBdUI7SUFDbkM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0EsQ0FBVTtBQUVYLE9BQU8sTUFBTUMsb0JBQXNDO0lBQ2xEQyxPQUFPRixxQkFBcUJHLE9BQU8sQ0FBQyxDQUFDQyxNQUFRO1lBQUNBO1lBQUssQ0FBQyxFQUFFLEVBQUVBLEtBQUs7U0FBQztBQUMvRCxFQUFFIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/scribe",
3
- "version": "0.0.1-dev.80",
3
+ "version": "0.0.1-dev.81",
4
4
  "description": "Structured logging interface with pluggable adapters",
5
5
  "keywords": [
6
6
  "typescript",
@@ -6,6 +6,7 @@ export declare class ConsoleAdapter extends LogAdapter {
6
6
  private configuredLevels;
7
7
  private configuredLogLevel;
8
8
  private configuredLogLevelValue;
9
+ private redactionKeys;
9
10
  constructor(_options?: ConsoleAdapterOptions);
10
11
  configure<T extends string = never, CustomOnly extends true | false = false>(scribeOptions: ScribeOptions<T, CustomOnly>): void;
11
12
  getLogger<T extends string = never, CustomOnly extends true | false = false>(name?: string): Logger<T, CustomOnly>;
@@ -4,4 +4,5 @@ export * from "./errors.js";
4
4
  export * from "./logger.adapter.js";
5
5
  export * from "./logger.factory.js";
6
6
  export * from "./logger.type.js";
7
+ export * from "./redact.js";
7
8
  export * from "./types.js";
@@ -0,0 +1,10 @@
1
+ import { type RedactionOptions } from "./types.js";
2
+ declare function keysFromPaths(paths: string[]): Set<string>;
3
+ declare function object(value: unknown, keys: ReadonlySet<string>, censor?: string, seen?: WeakSet<object>): unknown;
4
+ declare function fromOptions(options?: RedactionOptions): Set<string>;
5
+ export declare const redact: {
6
+ object: typeof object;
7
+ keysFromPaths: typeof keysFromPaths;
8
+ fromOptions: typeof fromOptions;
9
+ };
10
+ export {};
@@ -13,6 +13,13 @@ export declare const DefaultLogLevel: DefaultLevels;
13
13
  export type RedactionOptions = {
14
14
  paths: string[];
15
15
  };
16
+ /** Pino's default censor. ConsoleAdapter uses the same placeholder. */
17
+ export declare const DefaultCensor = "[Redacted]";
18
+ /**
19
+ * Object keys Scribe redacts. Adapters apply this list — Pino via `redact.paths`
20
+ * (top-level and one nest), ConsoleAdapter via `redact.object`.
21
+ */
22
+ export declare const DefaultRedactionKeys: readonly ["password", "secret", "token", "otp", "pw", "userconfig"];
16
23
  export declare const DefaultRedactions: RedactionOptions;
17
24
  export interface ScribeOptions<T extends string = never, CustomOnly extends true | false = undefined> {
18
25
  logLevel?: DefaultLevels | string;