field-redactor 1.5.0 → 1.6.1
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.
- package/CHANGELOG.md +41 -0
- package/CONTRIBUTING.md +64 -0
- package/README.md +3 -0
- package/dist/api/fieldRedactor.d.ts +51 -0
- package/dist/api/fieldRedactor.d.ts.map +1 -0
- package/dist/api/fieldRedactor.js +165 -0
- package/dist/api/fieldRedactor.js.map +1 -0
- package/dist/api/fieldRedactorConfigBuilder.d.ts +57 -0
- package/dist/api/fieldRedactorConfigBuilder.d.ts.map +1 -0
- package/dist/api/fieldRedactorConfigBuilder.js +115 -0
- package/dist/api/fieldRedactorConfigBuilder.js.map +1 -0
- package/dist/api/fieldRedactorDeps.d.ts +19 -0
- package/dist/api/fieldRedactorDeps.d.ts.map +1 -0
- package/dist/api/fieldRedactorDeps.js +45 -0
- package/dist/api/fieldRedactorDeps.js.map +1 -0
- package/dist/arrayRedaction.d.ts +12 -0
- package/dist/arrayRedaction.d.ts.map +1 -0
- package/dist/arrayRedaction.js +70 -0
- package/dist/arrayRedaction.js.map +1 -0
- package/dist/config/configValidator.d.ts +9 -0
- package/dist/config/configValidator.d.ts.map +1 -0
- package/dist/config/configValidator.js +77 -0
- package/dist/config/configValidator.js.map +1 -0
- package/dist/config/customObjectSchemas.d.ts +7 -0
- package/dist/config/customObjectSchemas.d.ts.map +1 -0
- package/dist/config/customObjectSchemas.js +35 -0
- package/dist/config/customObjectSchemas.js.map +1 -0
- package/dist/config/presets.d.ts +22 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +50 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/redactionRules.d.ts +26 -0
- package/dist/config/redactionRules.d.ts.map +1 -0
- package/dist/config/redactionRules.js +107 -0
- package/dist/config/redactionRules.js.map +1 -0
- package/dist/configValidator.d.ts +3 -4
- package/dist/configValidator.d.ts.map +1 -1
- package/dist/configValidator.js +9 -26
- package/dist/configValidator.js.map +1 -1
- package/dist/customObjectFieldHandler.d.ts +21 -0
- package/dist/customObjectFieldHandler.d.ts.map +1 -0
- package/dist/customObjectFieldHandler.js +159 -0
- package/dist/customObjectFieldHandler.js.map +1 -0
- package/dist/customObjectManager.d.ts +1 -1
- package/dist/customObjectManager.js +3 -3
- package/dist/customObjectManager.js.map +1 -1
- package/dist/customObjectSchemas.d.ts +7 -0
- package/dist/customObjectSchemas.d.ts.map +1 -0
- package/dist/customObjectSchemas.js +35 -0
- package/dist/customObjectSchemas.js.map +1 -0
- package/dist/dryRun.d.ts +2 -1
- package/dist/dryRun.d.ts.map +1 -1
- package/dist/dryRun.js +2 -2
- package/dist/dryRun.js.map +1 -1
- package/dist/dryRunAttribution.d.ts +5 -3
- package/dist/dryRunAttribution.d.ts.map +1 -1
- package/dist/dryRunAttribution.js +9 -101
- package/dist/dryRunAttribution.js.map +1 -1
- package/dist/dryrun/dryRun.d.ts +9 -0
- package/dist/dryrun/dryRun.d.ts.map +1 -0
- package/dist/dryrun/dryRun.js +75 -0
- package/dist/dryrun/dryRun.js.map +1 -0
- package/dist/dryrun/dryRunAttribution.d.ts +10 -0
- package/dist/dryrun/dryRunAttribution.d.ts.map +1 -0
- package/dist/dryrun/dryRunAttribution.js +14 -0
- package/dist/dryrun/dryRunAttribution.js.map +1 -0
- package/dist/engine/arrayRedaction.d.ts +12 -0
- package/dist/engine/arrayRedaction.d.ts.map +1 -0
- package/dist/engine/arrayRedaction.js +70 -0
- package/dist/engine/arrayRedaction.js.map +1 -0
- package/dist/engine/customObjectFieldHandler.d.ts +30 -0
- package/dist/engine/customObjectFieldHandler.d.ts.map +1 -0
- package/dist/engine/customObjectFieldHandler.js +149 -0
- package/dist/engine/customObjectFieldHandler.js.map +1 -0
- package/dist/engine/objectRedactor.d.ts +18 -0
- package/dist/engine/objectRedactor.d.ts.map +1 -0
- package/dist/engine/objectRedactor.js +38 -0
- package/dist/engine/objectRedactor.js.map +1 -0
- package/dist/engine/objectRedactorCustomObject.d.ts +12 -0
- package/dist/engine/objectRedactorCustomObject.d.ts.map +1 -0
- package/dist/engine/objectRedactorCustomObject.js +22 -0
- package/dist/engine/objectRedactorCustomObject.js.map +1 -0
- package/dist/engine/objectRedactorHelpers.d.ts +8 -0
- package/dist/engine/objectRedactorHelpers.d.ts.map +1 -0
- package/dist/engine/objectRedactorHelpers.js +35 -0
- package/dist/engine/objectRedactorHelpers.js.map +1 -0
- package/dist/engine/objectRedactorMutation.d.ts +10 -0
- package/dist/engine/objectRedactorMutation.d.ts.map +1 -0
- package/dist/engine/objectRedactorMutation.js +89 -0
- package/dist/engine/objectRedactorMutation.js.map +1 -0
- package/dist/engine/objectRedactorSync.d.ts +2 -0
- package/dist/engine/objectRedactorSync.d.ts.map +1 -0
- package/dist/engine/objectRedactorSync.js +7 -0
- package/dist/engine/objectRedactorSync.js.map +1 -0
- package/dist/engine/objectRedactorTraversal.d.ts +41 -0
- package/dist/engine/objectRedactorTraversal.d.ts.map +1 -0
- package/dist/engine/objectRedactorTraversal.js +201 -0
- package/dist/engine/objectRedactorTraversal.js.map +1 -0
- package/dist/engine/primitiveRedactor.d.ts +33 -0
- package/dist/engine/primitiveRedactor.d.ts.map +1 -0
- package/dist/engine/primitiveRedactor.js +75 -0
- package/dist/engine/primitiveRedactor.js.map +1 -0
- package/dist/engine/traversalServices.d.ts +21 -0
- package/dist/engine/traversalServices.d.ts.map +1 -0
- package/dist/engine/traversalServices.js +3 -0
- package/dist/engine/traversalServices.js.map +1 -0
- package/dist/fieldDisposition.d.ts +3 -0
- package/dist/fieldDisposition.d.ts.map +1 -0
- package/dist/fieldDisposition.js +6 -0
- package/dist/fieldDisposition.js.map +1 -0
- package/dist/fieldRedactor.d.ts +6 -21
- package/dist/fieldRedactor.d.ts.map +1 -1
- package/dist/fieldRedactor.js +37 -56
- package/dist/fieldRedactor.js.map +1 -1
- package/dist/fieldRedactorConfigBuilder.d.ts +7 -1
- package/dist/fieldRedactorConfigBuilder.d.ts.map +1 -1
- package/dist/fieldRedactorConfigBuilder.js +14 -1
- package/dist/fieldRedactorConfigBuilder.js.map +1 -1
- package/dist/fieldRedactorDeps.d.ts +2 -0
- package/dist/fieldRedactorDeps.d.ts.map +1 -1
- package/dist/fieldRedactorDeps.js +11 -9
- package/dist/fieldRedactorDeps.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/jsonWalk.d.ts +1 -1
- package/dist/jsonWalk.d.ts.map +1 -1
- package/dist/jsonWalk.js +2 -33
- package/dist/jsonWalk.js.map +1 -1
- package/dist/maybeAsync.d.ts +7 -0
- package/dist/maybeAsync.d.ts.map +1 -0
- package/dist/maybeAsync.js +56 -0
- package/dist/maybeAsync.js.map +1 -0
- package/dist/objectRedactor.d.ts +2 -1
- package/dist/objectRedactor.d.ts.map +1 -1
- package/dist/objectRedactor.js +2 -2
- package/dist/objectRedactor.js.map +1 -1
- package/dist/objectRedactorCustomObject.d.ts +19 -40
- package/dist/objectRedactorCustomObject.d.ts.map +1 -1
- package/dist/objectRedactorCustomObject.js +20 -101
- package/dist/objectRedactorCustomObject.js.map +1 -1
- package/dist/objectRedactorHelpers.d.ts.map +1 -1
- package/dist/objectRedactorHelpers.js +3 -0
- package/dist/objectRedactorHelpers.js.map +1 -1
- package/dist/objectRedactorTraversal.d.ts +20 -36
- package/dist/objectRedactorTraversal.d.ts.map +1 -1
- package/dist/objectRedactorTraversal.js +141 -516
- package/dist/objectRedactorTraversal.js.map +1 -1
- package/dist/pathParsing.d.ts +11 -0
- package/dist/pathParsing.d.ts.map +1 -0
- package/dist/pathParsing.js +53 -0
- package/dist/pathParsing.js.map +1 -0
- package/dist/pathRuleMatcher.d.ts +19 -0
- package/dist/pathRuleMatcher.d.ts.map +1 -0
- package/dist/pathRuleMatcher.js +42 -0
- package/dist/pathRuleMatcher.js.map +1 -0
- package/dist/redactionRules.d.ts +3 -4
- package/dist/redactionRules.d.ts.map +1 -1
- package/dist/redactionRules.js +7 -9
- package/dist/redactionRules.js.map +1 -1
- package/dist/ruleResolver.d.ts +65 -0
- package/dist/ruleResolver.d.ts.map +1 -0
- package/dist/ruleResolver.js +193 -0
- package/dist/ruleResolver.js.map +1 -0
- package/dist/rules/customObjectManager.d.ts +28 -0
- package/dist/rules/customObjectManager.d.ts.map +1 -0
- package/dist/rules/customObjectManager.js +60 -0
- package/dist/rules/customObjectManager.js.map +1 -0
- package/dist/rules/fieldDisposition.d.ts +3 -0
- package/dist/rules/fieldDisposition.d.ts.map +1 -0
- package/dist/rules/fieldDisposition.js +6 -0
- package/dist/rules/fieldDisposition.js.map +1 -0
- package/dist/rules/pathRuleMatcher.d.ts +19 -0
- package/dist/rules/pathRuleMatcher.d.ts.map +1 -0
- package/dist/rules/pathRuleMatcher.js +40 -0
- package/dist/rules/pathRuleMatcher.js.map +1 -0
- package/dist/rules/ruleResolver.d.ts +63 -0
- package/dist/rules/ruleResolver.d.ts.map +1 -0
- package/dist/rules/ruleResolver.js +188 -0
- package/dist/rules/ruleResolver.js.map +1 -0
- package/dist/rules/schemaSiblingKey.d.ts +4 -0
- package/dist/rules/schemaSiblingKey.d.ts.map +1 -0
- package/dist/rules/schemaSiblingKey.js +19 -0
- package/dist/rules/schemaSiblingKey.js.map +1 -0
- package/dist/rules/secretManager.d.ts +31 -0
- package/dist/rules/secretManager.d.ts.map +1 -0
- package/dist/rules/secretManager.js +85 -0
- package/dist/rules/secretManager.js.map +1 -0
- package/dist/rules/valuePatternMatcher.d.ts +15 -0
- package/dist/rules/valuePatternMatcher.d.ts.map +1 -0
- package/dist/rules/valuePatternMatcher.js +30 -0
- package/dist/rules/valuePatternMatcher.js.map +1 -0
- package/dist/secretManager.d.ts +6 -19
- package/dist/secretManager.d.ts.map +1 -1
- package/dist/secretManager.js +19 -30
- package/dist/secretManager.js.map +1 -1
- package/dist/traversalServices.d.ts +21 -0
- package/dist/traversalServices.d.ts.map +1 -0
- package/dist/traversalServices.js +3 -0
- package/dist/traversalServices.js.map +1 -0
- package/dist/types.d.ts +41 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -1
- package/dist/types.js.map +1 -1
- package/dist/util/jsonWalk.d.ts +10 -0
- package/dist/util/jsonWalk.d.ts.map +1 -0
- package/dist/util/jsonWalk.js +53 -0
- package/dist/util/jsonWalk.js.map +1 -0
- package/dist/util/maybeAsync.d.ts +6 -0
- package/dist/util/maybeAsync.d.ts.map +1 -0
- package/dist/util/maybeAsync.js +54 -0
- package/dist/util/maybeAsync.js.map +1 -0
- package/dist/util/pathParsing.d.ts +11 -0
- package/dist/util/pathParsing.d.ts.map +1 -0
- package/dist/util/pathParsing.js +53 -0
- package/dist/util/pathParsing.js.map +1 -0
- package/dist/util/primitiveCoercion.d.ts +4 -0
- package/dist/util/primitiveCoercion.d.ts.map +1 -0
- package/dist/util/primitiveCoercion.js +21 -0
- package/dist/util/primitiveCoercion.js.map +1 -0
- package/dist/util/regexUtils.d.ts +3 -0
- package/dist/util/regexUtils.d.ts.map +1 -0
- package/dist/util/regexUtils.js +8 -0
- package/dist/util/regexUtils.js.map +1 -0
- package/docs/guides/migration-1.5-to-1.6.md +57 -0
- package/docs/guides/path-rules.md +47 -0
- package/docs/reference/config.md +5 -1
- package/docs/release-notes/README.md +4 -1
- package/docs/release-notes/v1.6.0.md +59 -0
- package/docs/release-notes/v1.6.1.md +24 -0
- package/jest.config.js +3 -1
- package/package.json +8 -2
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArrayRedactor = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const objectRedactorMutation_1 = require("./objectRedactorMutation");
|
|
6
|
+
const maybeAsync_1 = require("./maybeAsync");
|
|
7
|
+
const objectRedactorHelpers_1 = require("./objectRedactorHelpers");
|
|
8
|
+
class ArrayRedactor {
|
|
9
|
+
constructor(services) {
|
|
10
|
+
this.services = services;
|
|
11
|
+
}
|
|
12
|
+
redactArrayInObject(array, key, forceDeepRedaction, parent, pathSegments) {
|
|
13
|
+
const redacted = this.services.ruleResolver.shouldTraverseContainerByKey(key, forceDeepRedaction)
|
|
14
|
+
? this.redactAllArrayValues(array, this.services.ruleResolver.containerForceDeepRedaction(key, forceDeepRedaction), parent.copyOnWrite, pathSegments)
|
|
15
|
+
: this.redactObjectsInArray(array, parent.copyOnWrite, pathSegments);
|
|
16
|
+
if (redacted instanceof Promise) {
|
|
17
|
+
return redacted.then((result) => {
|
|
18
|
+
parent.set(key, result);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
parent.set(key, redacted);
|
|
22
|
+
}
|
|
23
|
+
redactObjectsInArray(array, copyOnWrite, pathSegments) {
|
|
24
|
+
const container = (0, objectRedactorMutation_1.createContainerMutation)(array, copyOnWrite);
|
|
25
|
+
const work = (0, maybeAsync_1.runSequential)(array, (item, index) => {
|
|
26
|
+
if (!(0, types_1.isJsonObject)(item)) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const customObject = this.services.ruleResolver.getMatchingSchema(item);
|
|
30
|
+
const child = (0, objectRedactorMutation_1.createContainerMutation)(item, copyOnWrite);
|
|
31
|
+
const itemPath = [...pathSegments, index];
|
|
32
|
+
return (0, maybeAsync_1.finalizeMaybeAsync)(customObject
|
|
33
|
+
? this.services.handleCustomObject(child, customObject)
|
|
34
|
+
: this.services.redactSecretFields(child, false, itemPath), () => {
|
|
35
|
+
container.set(String(index), child.result());
|
|
36
|
+
}, this.services.asyncMode);
|
|
37
|
+
}, this.services.asyncMode);
|
|
38
|
+
return (0, maybeAsync_1.finalizeMaybeAsync)(work, () => container.result(), this.services.asyncMode);
|
|
39
|
+
}
|
|
40
|
+
redactAllArrayValues(array, forceDeepRedaction, copyOnWrite, pathSegments) {
|
|
41
|
+
const container = (0, objectRedactorMutation_1.createContainerMutation)(array, copyOnWrite);
|
|
42
|
+
const work = (0, maybeAsync_1.runSequential)(array, (item, index) => {
|
|
43
|
+
const key = String(index);
|
|
44
|
+
const itemPath = [...pathSegments, index];
|
|
45
|
+
if (Array.isArray(item)) {
|
|
46
|
+
const nested = this.redactAllArrayValues(item, forceDeepRedaction, copyOnWrite, itemPath);
|
|
47
|
+
if (nested instanceof Promise) {
|
|
48
|
+
return nested.then((result) => {
|
|
49
|
+
container.set(key, result);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
container.set(key, nested);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!(0, types_1.isJsonObject)(item)) {
|
|
56
|
+
return this.services.setPrimitive(container, key, (0, objectRedactorHelpers_1.toRedactablePrimitive)(item));
|
|
57
|
+
}
|
|
58
|
+
const customObject = this.services.ruleResolver.getMatchingSchema(item);
|
|
59
|
+
const child = (0, objectRedactorMutation_1.createContainerMutation)(item, copyOnWrite);
|
|
60
|
+
return (0, maybeAsync_1.finalizeMaybeAsync)(customObject
|
|
61
|
+
? this.services.handleCustomObject(child, customObject)
|
|
62
|
+
: this.services.redactSecretFields(child, forceDeepRedaction, itemPath), () => {
|
|
63
|
+
container.set(key, child.result());
|
|
64
|
+
}, this.services.asyncMode);
|
|
65
|
+
}, this.services.asyncMode);
|
|
66
|
+
return (0, maybeAsync_1.finalizeMaybeAsync)(work, () => container.result(), this.services.asyncMode);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ArrayRedactor = ArrayRedactor;
|
|
70
|
+
//# sourceMappingURL=arrayRedaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrayRedaction.js","sourceRoot":"","sources":["../src/arrayRedaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FieldRedactorConfig } from '../types';
|
|
2
|
+
export { hasExplicitRedactionRules } from './redactionRules';
|
|
3
|
+
export { assertNoIdenticalCustomObjectSchemas } from './customObjectSchemas';
|
|
4
|
+
/**
|
|
5
|
+
* Returns non-fatal configuration warnings. Throws {@link FieldRedactorConfigurationError} for
|
|
6
|
+
* invalid custom object duplicates and when `strict` is true on any warning.
|
|
7
|
+
*/
|
|
8
|
+
export declare const validateFieldRedactorConfig: (config?: FieldRedactorConfig) => string[];
|
|
9
|
+
//# sourceMappingURL=configValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configValidator.d.ts","sourceRoot":"","sources":["../../src/config/configValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oCAAoC,EAAE,MAAM,uBAAuB,CAAC;AAgE7E;;;GAGG;AACH,eAAO,MAAM,2BAA2B,YAAa,mBAAmB,KAAG,MAAM,EAiBhF,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateFieldRedactorConfig = exports.assertNoIdenticalCustomObjectSchemas = exports.hasExplicitRedactionRules = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const regexUtils_1 = require("../util/regexUtils");
|
|
6
|
+
const redactionRules_1 = require("./redactionRules");
|
|
7
|
+
const customObjectSchemas_1 = require("./customObjectSchemas");
|
|
8
|
+
var redactionRules_2 = require("./redactionRules");
|
|
9
|
+
Object.defineProperty(exports, "hasExplicitRedactionRules", { enumerable: true, get: function () { return redactionRules_2.hasExplicitRedactionRules; } });
|
|
10
|
+
var customObjectSchemas_2 = require("./customObjectSchemas");
|
|
11
|
+
Object.defineProperty(exports, "assertNoIdenticalCustomObjectSchemas", { enumerable: true, get: function () { return customObjectSchemas_2.assertNoIdenticalCustomObjectSchemas; } });
|
|
12
|
+
const KEY_RULE_FIELDS = new Set(redactionRules_1.SECRET_REGEX_FIELDS);
|
|
13
|
+
const collectRegexWarnings = (config) => {
|
|
14
|
+
const warnings = [];
|
|
15
|
+
const keyRuleDuplicates = new Map();
|
|
16
|
+
for (const field of redactionRules_1.REGEX_ARRAY_CONFIG_FIELDS) {
|
|
17
|
+
const regexes = config[field];
|
|
18
|
+
if (!regexes) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
for (const regex of regexes) {
|
|
22
|
+
if (regex.global) {
|
|
23
|
+
warnings.push(`Global regex ${(0, regexUtils_1.formatRegExp)(regex)} in \`${field}\` can produce surprising \`.test()\` results; remove the \`g\` flag.`);
|
|
24
|
+
}
|
|
25
|
+
if (!KEY_RULE_FIELDS.has(field)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const identity = (0, regexUtils_1.regexIdentity)(regex);
|
|
29
|
+
const prior = keyRuleDuplicates.get(identity);
|
|
30
|
+
if (prior && prior !== field) {
|
|
31
|
+
warnings.push(`${(0, regexUtils_1.formatRegExp)(regex)} appears in both \`${prior}\` and \`${field}\` — only the higher-precedence rule applies.`);
|
|
32
|
+
}
|
|
33
|
+
else if (!prior) {
|
|
34
|
+
keyRuleDuplicates.set(identity, field);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return warnings;
|
|
39
|
+
};
|
|
40
|
+
const collectSchemaWarnings = (customObjects) => {
|
|
41
|
+
const warnings = [];
|
|
42
|
+
customObjects.forEach((schema, schemaIndex) => {
|
|
43
|
+
for (const [field, rule] of Object.entries(schema)) {
|
|
44
|
+
if (typeof rule === 'string' && !Object.prototype.hasOwnProperty.call(schema, rule)) {
|
|
45
|
+
warnings.push(`Schema at index ${schemaIndex}: field \`${field}: '${rule}'\` references sibling key \`${rule}\` which is not defined in the schema.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
for (const [i, j] of (0, customObjectSchemas_1.analyzeSchemaPairs)(customObjects).subsetPairs) {
|
|
50
|
+
const keysA = Object.keys(customObjects[i]);
|
|
51
|
+
const keysB = Object.keys(customObjects[j]);
|
|
52
|
+
warnings.push(`Schemas at index ${i} and ${j} may both match the same object; index ${keysB.length > keysA.length ? j : i} wins only when it has more keys.`);
|
|
53
|
+
}
|
|
54
|
+
return warnings;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Returns non-fatal configuration warnings. Throws {@link FieldRedactorConfigurationError} for
|
|
58
|
+
* invalid custom object duplicates and when `strict` is true on any warning.
|
|
59
|
+
*/
|
|
60
|
+
const validateFieldRedactorConfig = (config) => {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
const resolved = (_a = (0, redactionRules_1.normalizeFieldRedactorConfig)(config)) !== null && _a !== void 0 ? _a : {};
|
|
63
|
+
(0, customObjectSchemas_1.assertNoIdenticalCustomObjectSchemas)(resolved.customObjects);
|
|
64
|
+
const warnings = [
|
|
65
|
+
...(!(0, redactionRules_1.hasExplicitRedactionRules)(resolved)
|
|
66
|
+
? ['All values will be redacted. Did you mean to set `secretKeys` or use `FieldRedactor.createSafe()`?']
|
|
67
|
+
: []),
|
|
68
|
+
...collectRegexWarnings(resolved),
|
|
69
|
+
...collectSchemaWarnings((_b = resolved.customObjects) !== null && _b !== void 0 ? _b : [])
|
|
70
|
+
];
|
|
71
|
+
if (resolved.strict && warnings[0]) {
|
|
72
|
+
throw new errors_1.FieldRedactorConfigurationError(warnings[0]);
|
|
73
|
+
}
|
|
74
|
+
return warnings;
|
|
75
|
+
};
|
|
76
|
+
exports.validateFieldRedactorConfig = validateFieldRedactorConfig;
|
|
77
|
+
//# sourceMappingURL=configValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configValidator.js","sourceRoot":"","sources":["../../src/config/configValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CustomObject } from '../types';
|
|
2
|
+
export declare const analyzeSchemaPairs: (customObjects: CustomObject[]) => {
|
|
3
|
+
identicalPairs: Array<[number, number, string[]]>;
|
|
4
|
+
subsetPairs: Array<[number, number]>;
|
|
5
|
+
};
|
|
6
|
+
export declare const assertNoIdenticalCustomObjectSchemas: (customObjects?: CustomObject[]) => void;
|
|
7
|
+
//# sourceMappingURL=customObjectSchemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customObjectSchemas.d.ts","sourceRoot":"","sources":["../../src/config/customObjectSchemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,kBAAkB,kBACd,YAAY,EAAE,KAC5B;IAAE,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAAC,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAsB3F,CAAC;AAEF,eAAO,MAAM,oCAAoC,mBAAoB,YAAY,EAAE,KAAG,IAUrF,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertNoIdenticalCustomObjectSchemas = exports.analyzeSchemaPairs = void 0;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const analyzeSchemaPairs = (customObjects) => {
|
|
6
|
+
const identicalPairs = [];
|
|
7
|
+
const subsetPairs = [];
|
|
8
|
+
for (let i = 0; i < customObjects.length - 1; i++) {
|
|
9
|
+
const keysA = Object.keys(customObjects[i]);
|
|
10
|
+
for (let j = i + 1; j < customObjects.length; j++) {
|
|
11
|
+
const keysB = Object.keys(customObjects[j]);
|
|
12
|
+
if (keysA.length === keysB.length && keysA.every((key) => keysB.includes(key))) {
|
|
13
|
+
identicalPairs.push([i, j, keysA]);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const aSubsetOfB = keysA.length < keysB.length && keysA.every((key) => keysB.includes(key));
|
|
17
|
+
const bSubsetOfA = keysB.length < keysA.length && keysB.every((key) => keysA.includes(key));
|
|
18
|
+
if (aSubsetOfB || bSubsetOfA) {
|
|
19
|
+
subsetPairs.push([i, j]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { identicalPairs, subsetPairs };
|
|
24
|
+
};
|
|
25
|
+
exports.analyzeSchemaPairs = analyzeSchemaPairs;
|
|
26
|
+
const assertNoIdenticalCustomObjectSchemas = (customObjects) => {
|
|
27
|
+
if (!customObjects || customObjects.length <= 1) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
for (const [i, j, keys] of (0, exports.analyzeSchemaPairs)(customObjects).identicalPairs) {
|
|
31
|
+
throw new errors_1.FieldRedactorConfigurationError(`Custom Objects at indexes ${i} and ${j} cannot have identical keys: ${keys}`);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.assertNoIdenticalCustomObjectSchemas = assertNoIdenticalCustomObjectSchemas;
|
|
35
|
+
//# sourceMappingURL=customObjectSchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customObjectSchemas.js","sourceRoot":"","sources":["../../src/config/customObjectSchemas.ts"],"names":[],"mappings":";;;AAAA,sCAA4D;AAGrD,MAAM,kBAAkB,GAAG,CAChC,aAA6B,EACgE,EAAE;IAC/F,MAAM,cAAc,GAAsC,EAAE,CAAC;IAC7D,MAAM,WAAW,GAA4B,EAAE,CAAC;IAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/E,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnC,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5F,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5F,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;gBAC7B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC,CAAC;AAxBW,QAAA,kBAAkB,sBAwB7B;AAEK,MAAM,oCAAoC,GAAG,CAAC,aAA8B,EAAQ,EAAE;IAC3F,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,IAAA,0BAAkB,EAAC,aAAa,CAAC,CAAC,cAAc,EAAE,CAAC;QAC5E,MAAM,IAAI,wCAA+B,CACvC,6BAA6B,CAAC,QAAQ,CAAC,gCAAgC,IAAI,EAAE,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAVW,QAAA,oCAAoC,wCAU/C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FieldRedactorConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Opinionated configuration presets derived from integration test fixtures.
|
|
4
|
+
* Spread into {@link FieldRedactor} or {@link FieldRedactor.createSafe} config and extend as needed.
|
|
5
|
+
*/
|
|
6
|
+
export declare const presets: {
|
|
7
|
+
/**
|
|
8
|
+
* `{ name, type, value }` metadata entries with sibling-key redaction and auth key removal.
|
|
9
|
+
* Pair with your own `secretKeys` for field names that should trigger redaction.
|
|
10
|
+
*/
|
|
11
|
+
loggingMetadata(): Pick<FieldRedactorConfig, "customObjects" | "deleteSecretKeys">;
|
|
12
|
+
/**
|
|
13
|
+
* Application log preset from `realExamples.spec.ts`: common PII field patterns,
|
|
14
|
+
* auth key removal, and `{ name, value }` event metadata schemas.
|
|
15
|
+
*/
|
|
16
|
+
applicationLogging(): Pick<FieldRedactorConfig, "secretKeys" | "deleteSecretKeys" | "customObjects">;
|
|
17
|
+
/**
|
|
18
|
+
* `{ key, value }` shaped entries (blanket coverage small schema).
|
|
19
|
+
*/
|
|
20
|
+
keyValueEntries(): Pick<FieldRedactorConfig, "customObjects">;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/config/presets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAwBpF;;;GAGG;AACH,eAAO,MAAM,OAAO;IAClB;;;OAGG;uBACgB,IAAI,CAAC,mBAAmB,EAAE,eAAe,GAAG,kBAAkB,CAAC;IAOlF;;;OAGG;0BACmB,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,kBAAkB,GAAG,eAAe,CAAC;IAQpG;;OAEG;uBACgB,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC;CAK9D,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.presets = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const AUTH_KEY_REMOVAL = {
|
|
6
|
+
deleteSecretKeys: [/authKey/i]
|
|
7
|
+
};
|
|
8
|
+
const NAME_VALUE_EVENT_SCHEMA = {
|
|
9
|
+
name: types_1.CustomObjectMatchType.Ignore,
|
|
10
|
+
value: 'name'
|
|
11
|
+
};
|
|
12
|
+
const NAME_TYPE_VALUE_METADATA_SCHEMA = {
|
|
13
|
+
name: types_1.CustomObjectMatchType.Ignore,
|
|
14
|
+
type: types_1.CustomObjectMatchType.Ignore,
|
|
15
|
+
value: 'name'
|
|
16
|
+
};
|
|
17
|
+
const KEY_VALUE_ENTRY_SCHEMA = {
|
|
18
|
+
key: types_1.CustomObjectMatchType.Ignore,
|
|
19
|
+
value: 'key'
|
|
20
|
+
};
|
|
21
|
+
const APPLICATION_LOG_SECRET_KEYS = [/email/i, /mdn/i, /phone/i, /.+name$/i, /auth/i];
|
|
22
|
+
/**
|
|
23
|
+
* Opinionated configuration presets derived from integration test fixtures.
|
|
24
|
+
* Spread into {@link FieldRedactor} or {@link FieldRedactor.createSafe} config and extend as needed.
|
|
25
|
+
*/
|
|
26
|
+
exports.presets = {
|
|
27
|
+
/**
|
|
28
|
+
* `{ name, type, value }` metadata entries with sibling-key redaction and auth key removal.
|
|
29
|
+
* Pair with your own `secretKeys` for field names that should trigger redaction.
|
|
30
|
+
*/
|
|
31
|
+
loggingMetadata() {
|
|
32
|
+
return Object.assign(Object.assign({}, AUTH_KEY_REMOVAL), { customObjects: [NAME_TYPE_VALUE_METADATA_SCHEMA] });
|
|
33
|
+
},
|
|
34
|
+
/**
|
|
35
|
+
* Application log preset from `realExamples.spec.ts`: common PII field patterns,
|
|
36
|
+
* auth key removal, and `{ name, value }` event metadata schemas.
|
|
37
|
+
*/
|
|
38
|
+
applicationLogging() {
|
|
39
|
+
return Object.assign(Object.assign({ secretKeys: APPLICATION_LOG_SECRET_KEYS }, AUTH_KEY_REMOVAL), { customObjects: [NAME_VALUE_EVENT_SCHEMA] });
|
|
40
|
+
},
|
|
41
|
+
/**
|
|
42
|
+
* `{ key, value }` shaped entries (blanket coverage small schema).
|
|
43
|
+
*/
|
|
44
|
+
keyValueEntries() {
|
|
45
|
+
return {
|
|
46
|
+
customObjects: [KEY_VALUE_ENTRY_SCHEMA]
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/config/presets.ts"],"names":[],"mappings":";;;AAAA,oCAAoF;AAEpF,MAAM,gBAAgB,GAAkD;IACtE,gBAAgB,EAAE,CAAC,UAAU,CAAC;CAC/B,CAAC;AAEF,MAAM,uBAAuB,GAAiB;IAC5C,IAAI,EAAE,6BAAqB,CAAC,MAAM;IAClC,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,+BAA+B,GAAiB;IACpD,IAAI,EAAE,6BAAqB,CAAC,MAAM;IAClC,IAAI,EAAE,6BAAqB,CAAC,MAAM;IAClC,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,sBAAsB,GAAiB;IAC3C,GAAG,EAAE,6BAAqB,CAAC,MAAM;IACjC,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAEtF;;;GAGG;AACU,QAAA,OAAO,GAAG;IACrB;;;OAGG;IACH,eAAe;QACb,uCACK,gBAAgB,KACnB,aAAa,EAAE,CAAC,+BAA+B,CAAC,IAChD;IACJ,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,qCACE,UAAU,EAAE,2BAA2B,IACpC,gBAAgB,KACnB,aAAa,EAAE,CAAC,uBAAuB,CAAC,IACxC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;YACL,aAAa,EAAE,CAAC,sBAAsB,CAAC;SACxC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { CustomObject, FieldRedactorConfig } from '../types';
|
|
2
|
+
export declare const SECRET_REGEX_FIELDS: readonly ["secretKeys", "deepSecretKeys", "fullSecretKeys", "deleteSecretKeys"];
|
|
3
|
+
export declare const SECRET_REGEX_ALIAS_FIELDS: readonly ["opaqueSecretKeys", "removeSecretKeys"];
|
|
4
|
+
export declare const VALUE_PATTERN_FIELDS: readonly ["valuePatterns"];
|
|
5
|
+
export declare const PASS_KEY_FIELDS: readonly ["passKeys"];
|
|
6
|
+
export declare const REGEX_ARRAY_CONFIG_FIELDS: readonly ["secretKeys", "deepSecretKeys", "fullSecretKeys", "deleteSecretKeys", "opaqueSecretKeys", "removeSecretKeys", "valuePatterns", "passKeys"];
|
|
7
|
+
export type SecretRegexField = (typeof SECRET_REGEX_FIELDS)[number];
|
|
8
|
+
export type RegexArrayConfigField = (typeof REGEX_ARRAY_CONFIG_FIELDS)[number];
|
|
9
|
+
export declare const RULE_LIST_FIELDS: readonly ["secretKeys", "deepSecretKeys", "fullSecretKeys", "deleteSecretKeys", "opaqueSecretKeys", "removeSecretKeys", "valuePatterns", "passKeys", "customObjects"];
|
|
10
|
+
export declare const hasExplicitRedactionRules: (config?: FieldRedactorConfig) => boolean;
|
|
11
|
+
/** Merge preferred Opaque/Remove aliases into legacy full/delete fields. */
|
|
12
|
+
export declare const normalizeFieldRedactorConfig: (config?: FieldRedactorConfig) => FieldRedactorConfig | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* When only value patterns / path rules are configured, shallow key matching must be disabled
|
|
15
|
+
* (`secretKeys: []`) so the legacy default does not redact every field.
|
|
16
|
+
* Expects an already-normalized config (aliases merged).
|
|
17
|
+
*/
|
|
18
|
+
export declare const resolveSecretKeys: (config?: FieldRedactorConfig) => RegExp[] | undefined;
|
|
19
|
+
export declare const appendRegExpArray: <F extends RegexArrayConfigField>(config: FieldRedactorConfig, field: F, patterns: RegExp[]) => void;
|
|
20
|
+
export type RegisteredSchema = {
|
|
21
|
+
object: CustomObject;
|
|
22
|
+
name?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare const finalizeRegisteredSchemas: (schemas: RegisteredSchema[]) => Pick<FieldRedactorConfig, "customObjects" | "schemaNames">;
|
|
25
|
+
export declare const mergePartialConfig: (target: FieldRedactorConfig, schemas: RegisteredSchema[], partial: Partial<FieldRedactorConfig>) => void;
|
|
26
|
+
//# sourceMappingURL=redactionRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactionRules.d.ts","sourceRoot":"","sources":["../../src/config/redactionRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,mBAAmB,iFAAkF,CAAC;AAEnH,eAAO,MAAM,yBAAyB,mDAAoD,CAAC;AAE3F,eAAO,MAAM,oBAAoB,4BAA6B,CAAC;AAE/D,eAAO,MAAM,eAAe,uBAAwB,CAAC;AAErD,eAAO,MAAM,yBAAyB,sJAK5B,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,eAAO,MAAM,gBAAgB,uKAA2D,CAAC;AAIzF,eAAO,MAAM,yBAAyB,YAAa,mBAAmB,KAAG,OAEpC,CAAC;AAEtC,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,YAAa,mBAAmB,KAAG,mBAAmB,GAAG,SAiBjG,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,YAAY,mBAAmB,KAAQ,MAAM,EAAE,GAAG,SAmB/E,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,qBAAqB,UACvD,mBAAmB,SACpB,CAAC,YACE,MAAM,EAAE,KACjB,IAEF,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,eAAO,MAAM,yBAAyB,YAC3B,gBAAgB,EAAE,KAC1B,IAAI,CAAC,mBAAmB,EAAE,eAAe,GAAG,aAAa,CAS3D,CAAC;AAqBF,eAAO,MAAM,kBAAkB,WACrB,mBAAmB,WAClB,gBAAgB,EAAE,WAClB,OAAO,CAAC,mBAAmB,CAAC,KACpC,IASF,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.mergePartialConfig = exports.finalizeRegisteredSchemas = exports.appendRegExpArray = exports.resolveSecretKeys = exports.normalizeFieldRedactorConfig = exports.hasExplicitRedactionRules = exports.RULE_LIST_FIELDS = exports.REGEX_ARRAY_CONFIG_FIELDS = exports.PASS_KEY_FIELDS = exports.VALUE_PATTERN_FIELDS = exports.SECRET_REGEX_ALIAS_FIELDS = exports.SECRET_REGEX_FIELDS = void 0;
|
|
15
|
+
exports.SECRET_REGEX_FIELDS = ['secretKeys', 'deepSecretKeys', 'fullSecretKeys', 'deleteSecretKeys'];
|
|
16
|
+
exports.SECRET_REGEX_ALIAS_FIELDS = ['opaqueSecretKeys', 'removeSecretKeys'];
|
|
17
|
+
exports.VALUE_PATTERN_FIELDS = ['valuePatterns'];
|
|
18
|
+
exports.PASS_KEY_FIELDS = ['passKeys'];
|
|
19
|
+
exports.REGEX_ARRAY_CONFIG_FIELDS = [
|
|
20
|
+
...exports.SECRET_REGEX_FIELDS,
|
|
21
|
+
...exports.SECRET_REGEX_ALIAS_FIELDS,
|
|
22
|
+
...exports.VALUE_PATTERN_FIELDS,
|
|
23
|
+
...exports.PASS_KEY_FIELDS
|
|
24
|
+
];
|
|
25
|
+
exports.RULE_LIST_FIELDS = [...exports.REGEX_ARRAY_CONFIG_FIELDS, 'customObjects'];
|
|
26
|
+
const hasNonEmptyArray = (value) => value !== undefined && value.length > 0;
|
|
27
|
+
const hasExplicitRedactionRules = (config) => exports.RULE_LIST_FIELDS.some((field) => hasNonEmptyArray(config === null || config === void 0 ? void 0 : config[field])) ||
|
|
28
|
+
hasNonEmptyArray(config === null || config === void 0 ? void 0 : config.pathRules);
|
|
29
|
+
exports.hasExplicitRedactionRules = hasExplicitRedactionRules;
|
|
30
|
+
/** Merge preferred Opaque/Remove aliases into legacy full/delete fields. */
|
|
31
|
+
const normalizeFieldRedactorConfig = (config) => {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
if (!config) {
|
|
34
|
+
return config;
|
|
35
|
+
}
|
|
36
|
+
const opaqueSecretKeys = config.opaqueSecretKeys;
|
|
37
|
+
const removeSecretKeys = config.removeSecretKeys;
|
|
38
|
+
if (!(opaqueSecretKeys === null || opaqueSecretKeys === void 0 ? void 0 : opaqueSecretKeys.length) && !(removeSecretKeys === null || removeSecretKeys === void 0 ? void 0 : removeSecretKeys.length)) {
|
|
39
|
+
return config;
|
|
40
|
+
}
|
|
41
|
+
const { opaqueSecretKeys: _opaque, removeSecretKeys: _remove } = config, rest = __rest(config, ["opaqueSecretKeys", "removeSecretKeys"]);
|
|
42
|
+
return Object.assign(Object.assign({}, rest), { fullSecretKeys: [...((_a = config.fullSecretKeys) !== null && _a !== void 0 ? _a : []), ...(opaqueSecretKeys !== null && opaqueSecretKeys !== void 0 ? opaqueSecretKeys : [])], deleteSecretKeys: [...((_b = config.deleteSecretKeys) !== null && _b !== void 0 ? _b : []), ...(removeSecretKeys !== null && removeSecretKeys !== void 0 ? removeSecretKeys : [])] });
|
|
43
|
+
};
|
|
44
|
+
exports.normalizeFieldRedactorConfig = normalizeFieldRedactorConfig;
|
|
45
|
+
/**
|
|
46
|
+
* When only value patterns / path rules are configured, shallow key matching must be disabled
|
|
47
|
+
* (`secretKeys: []`) so the legacy default does not redact every field.
|
|
48
|
+
* Expects an already-normalized config (aliases merged).
|
|
49
|
+
*/
|
|
50
|
+
const resolveSecretKeys = (config = {}) => {
|
|
51
|
+
const { secretKeys, deepSecretKeys, fullSecretKeys, deleteSecretKeys, customObjects, valuePatterns, pathRules } = config;
|
|
52
|
+
if (secretKeys !== undefined) {
|
|
53
|
+
return secretKeys;
|
|
54
|
+
}
|
|
55
|
+
if (((valuePatterns === null || valuePatterns === void 0 ? void 0 : valuePatterns.length) || (pathRules === null || pathRules === void 0 ? void 0 : pathRules.length)) &&
|
|
56
|
+
!(deepSecretKeys === null || deepSecretKeys === void 0 ? void 0 : deepSecretKeys.length) &&
|
|
57
|
+
!(fullSecretKeys === null || fullSecretKeys === void 0 ? void 0 : fullSecretKeys.length) &&
|
|
58
|
+
!(deleteSecretKeys === null || deleteSecretKeys === void 0 ? void 0 : deleteSecretKeys.length) &&
|
|
59
|
+
!(customObjects === null || customObjects === void 0 ? void 0 : customObjects.length)) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
};
|
|
64
|
+
exports.resolveSecretKeys = resolveSecretKeys;
|
|
65
|
+
const appendRegExpArray = (config, field, patterns) => {
|
|
66
|
+
var _a;
|
|
67
|
+
config[field] = [...((_a = config[field]) !== null && _a !== void 0 ? _a : []), ...patterns];
|
|
68
|
+
};
|
|
69
|
+
exports.appendRegExpArray = appendRegExpArray;
|
|
70
|
+
const finalizeRegisteredSchemas = (schemas) => {
|
|
71
|
+
if (schemas.length === 0) {
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
const customObjects = schemas.map((entry) => entry.object);
|
|
75
|
+
const schemaNames = schemas.map((entry) => entry.name);
|
|
76
|
+
return schemaNames.some((name) => name !== undefined) ? { customObjects, schemaNames } : { customObjects };
|
|
77
|
+
};
|
|
78
|
+
exports.finalizeRegisteredSchemas = finalizeRegisteredSchemas;
|
|
79
|
+
const PRESET_SCALAR_FIELDS = [
|
|
80
|
+
'redactor',
|
|
81
|
+
'syncRedactor',
|
|
82
|
+
'ignoreBooleans',
|
|
83
|
+
'ignoreNullOrUndefined',
|
|
84
|
+
'cloneInput',
|
|
85
|
+
'strict',
|
|
86
|
+
'onConfigWarning'
|
|
87
|
+
];
|
|
88
|
+
const applyUnsetScalars = (target, partial) => {
|
|
89
|
+
for (const field of PRESET_SCALAR_FIELDS) {
|
|
90
|
+
const value = partial[field];
|
|
91
|
+
if (value !== undefined && target[field] === undefined) {
|
|
92
|
+
Object.assign(target, { [field]: value });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const mergePartialConfig = (target, schemas, partial) => {
|
|
97
|
+
var _a, _b;
|
|
98
|
+
for (const field of exports.REGEX_ARRAY_CONFIG_FIELDS) {
|
|
99
|
+
if ((_a = partial[field]) === null || _a === void 0 ? void 0 : _a.length) {
|
|
100
|
+
(0, exports.appendRegExpArray)(target, field, partial[field]);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
(_b = partial.customObjects) === null || _b === void 0 ? void 0 : _b.forEach((object) => schemas.push({ object }));
|
|
104
|
+
applyUnsetScalars(target, partial);
|
|
105
|
+
};
|
|
106
|
+
exports.mergePartialConfig = mergePartialConfig;
|
|
107
|
+
//# sourceMappingURL=redactionRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactionRules.js","sourceRoot":"","sources":["../../src/config/redactionRules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
export declare const assertNoIdenticalCustomObjectSchemas: (customObjects?: CustomObject[]) => void;
|
|
1
|
+
import { FieldRedactorConfig } from './types';
|
|
2
|
+
export { hasExplicitRedactionRules } from './redactionRules';
|
|
3
|
+
export { assertNoIdenticalCustomObjectSchemas } from './customObjectSchemas';
|
|
5
4
|
/**
|
|
6
5
|
* Returns non-fatal configuration warnings. Throws {@link FieldRedactorConfigurationError} for
|
|
7
6
|
* invalid custom object duplicates and when `strict` is true on any warning.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configValidator.d.ts","sourceRoot":"","sources":["../src/configValidator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configValidator.d.ts","sourceRoot":"","sources":["../src/configValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oCAAoC,EAAE,MAAM,uBAAuB,CAAC;AAgE7E;;;GAGG;AACH,eAAO,MAAM,2BAA2B,YAAa,mBAAmB,KAAG,MAAM,EAiBhF,CAAC"}
|
package/dist/configValidator.js
CHANGED
|
@@ -4,23 +4,12 @@ exports.validateFieldRedactorConfig = exports.assertNoIdenticalCustomObjectSchem
|
|
|
4
4
|
const errors_1 = require("./errors");
|
|
5
5
|
const regexUtils_1 = require("./regexUtils");
|
|
6
6
|
const redactionRules_1 = require("./redactionRules");
|
|
7
|
-
|
|
7
|
+
const customObjectSchemas_1 = require("./customObjectSchemas");
|
|
8
|
+
var redactionRules_2 = require("./redactionRules");
|
|
9
|
+
Object.defineProperty(exports, "hasExplicitRedactionRules", { enumerable: true, get: function () { return redactionRules_2.hasExplicitRedactionRules; } });
|
|
10
|
+
var customObjectSchemas_2 = require("./customObjectSchemas");
|
|
11
|
+
Object.defineProperty(exports, "assertNoIdenticalCustomObjectSchemas", { enumerable: true, get: function () { return customObjectSchemas_2.assertNoIdenticalCustomObjectSchemas; } });
|
|
8
12
|
const KEY_RULE_FIELDS = new Set(redactionRules_1.SECRET_REGEX_FIELDS);
|
|
9
|
-
const assertNoIdenticalCustomObjectSchemas = (customObjects) => {
|
|
10
|
-
if (!customObjects || customObjects.length <= 1) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
for (let i = 0; i < customObjects.length - 1; i++) {
|
|
14
|
-
const keys = Object.keys(customObjects[i]);
|
|
15
|
-
for (let j = i + 1; j < customObjects.length; j++) {
|
|
16
|
-
const otherKeys = Object.keys(customObjects[j]);
|
|
17
|
-
if (keys.length === otherKeys.length && keys.every((key) => otherKeys.includes(key))) {
|
|
18
|
-
throw new errors_1.FieldRedactorConfigurationError(`Custom Objects at indexes ${i} and ${j} cannot have identical keys: ${keys}`);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
exports.assertNoIdenticalCustomObjectSchemas = assertNoIdenticalCustomObjectSchemas;
|
|
24
13
|
const collectRegexWarnings = (config) => {
|
|
25
14
|
const warnings = [];
|
|
26
15
|
const keyRuleDuplicates = new Map();
|
|
@@ -57,16 +46,10 @@ const collectSchemaWarnings = (customObjects) => {
|
|
|
57
46
|
}
|
|
58
47
|
}
|
|
59
48
|
});
|
|
60
|
-
for (
|
|
49
|
+
for (const [i, j] of (0, customObjectSchemas_1.analyzeSchemaPairs)(customObjects).subsetPairs) {
|
|
61
50
|
const keysA = Object.keys(customObjects[i]);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const aSubsetOfB = keysA.length < keysB.length && keysA.every((key) => keysB.includes(key));
|
|
65
|
-
const bSubsetOfA = keysB.length < keysA.length && keysB.every((key) => keysA.includes(key));
|
|
66
|
-
if (aSubsetOfB || bSubsetOfA) {
|
|
67
|
-
warnings.push(`Schemas at index ${i} and ${j} may both match the same object; index ${keysB.length > keysA.length ? j : i} wins only when it has more keys.`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
51
|
+
const keysB = Object.keys(customObjects[j]);
|
|
52
|
+
warnings.push(`Schemas at index ${i} and ${j} may both match the same object; index ${keysB.length > keysA.length ? j : i} wins only when it has more keys.`);
|
|
70
53
|
}
|
|
71
54
|
return warnings;
|
|
72
55
|
};
|
|
@@ -77,7 +60,7 @@ const collectSchemaWarnings = (customObjects) => {
|
|
|
77
60
|
const validateFieldRedactorConfig = (config) => {
|
|
78
61
|
var _a;
|
|
79
62
|
const resolved = config !== null && config !== void 0 ? config : {};
|
|
80
|
-
(0,
|
|
63
|
+
(0, customObjectSchemas_1.assertNoIdenticalCustomObjectSchemas)(resolved.customObjects);
|
|
81
64
|
const warnings = [
|
|
82
65
|
...(!(0, redactionRules_1.hasExplicitRedactionRules)(resolved)
|
|
83
66
|
? ['All values will be redacted. Did you mean to set `secretKeys` or use `FieldRedactor.createSafe()`?']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configValidator.js","sourceRoot":"","sources":["../src/configValidator.ts"],"names":[],"mappings":";;;AAAA,qCAA2D;AAC3D,6CAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"configValidator.js","sourceRoot":"","sources":["../src/configValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CustomObject, JsonObject } from './types';
|
|
2
|
+
import { ContainerMutation } from './objectRedactorMutation';
|
|
3
|
+
import { MaybeAsync } from './maybeAsync';
|
|
4
|
+
import { TraversalServices } from './traversalServices';
|
|
5
|
+
export declare class CustomObjectFieldHandler {
|
|
6
|
+
private readonly services;
|
|
7
|
+
constructor(services: TraversalServices);
|
|
8
|
+
handleCustomObject(container: ContainerMutation<JsonObject>, customObject: CustomObject): MaybeAsync<void>;
|
|
9
|
+
private handleCustomObjectValueIfArray;
|
|
10
|
+
private handleCustomObjectArrayValueIfStringKeySpecified;
|
|
11
|
+
private handleCustomObjectArrayValueIfMatchTypeSpecified;
|
|
12
|
+
private setRedactedArray;
|
|
13
|
+
private handleCustomObjectValueIfObject;
|
|
14
|
+
private handleCustomObjectObjectValueIfStringKeySpecified;
|
|
15
|
+
private handleCustomObjectObjectValueIfMatchTypeSpecified;
|
|
16
|
+
private setRedactedObject;
|
|
17
|
+
private handleCustomObjectValueIfPrimitive;
|
|
18
|
+
private handleCustomObjectPrimitiveValueIfMatchTypeSpecified;
|
|
19
|
+
private handleCustomObjectPrimitiveValueIfStringKeySpecified;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=customObjectFieldHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customObjectFieldHandler.d.ts","sourceRoot":"","sources":["../src/customObjectFieldHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAIZ,UAAU,EAGX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAA2B,MAAM,0BAA0B,CAAC;AAOtF,OAAO,EAAsB,UAAU,EAAoC,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,iBAAiB;IAExD,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;IAmB1G,OAAO,CAAC,8BAA8B;IAiBtC,OAAO,CAAC,gDAAgD;IAkCxD,OAAO,CAAC,gDAAgD;IAsBxD,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,+BAA+B;IAiBvC,OAAO,CAAC,iDAAiD;IA8CzD,OAAO,CAAC,iDAAiD;IAsBzD,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kCAAkC;IAiB1C,OAAO,CAAC,oDAAoD;IAgB5D,OAAO,CAAC,oDAAoD;CAkB7D"}
|