@redocly/respect-core 2.43.1 → 2.43.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-secrets.d.ts","sourceRoot":"","sources":["../../../src/modules/logger-output/mask-secrets.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,yBAAyB,UAMrC,CAAC;
|
|
1
|
+
{"version":3,"file":"mask-secrets.d.ts","sourceRoot":"","sources":["../../../src/modules/logger-output/mask-secrets.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,yBAAyB,UAMrC,CAAC;AA4BF,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,MAAM,EACjE,MAAM,EAAE,CAAC,EACT,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,CAAC,CA2CH;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAE9E;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,GAAG,EACR,SAAS,GAAE,MAAM,EAA8B,GAC9C,MAAM,EAAE,CA6CV;AAED,wBAAgB,wBAAwB,CAAC,CAAC,SAAS;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,MAAM,EAAE,EAChF,KAAK,EACL,gBAAgB,EAChB,UAAU,GACX,EAAE;IACD,KAAK,EAAE,CAAC,CAAC;IACT,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB,GAAG,CAAC,CAEJ"}
|
|
@@ -7,31 +7,51 @@ export const POTENTIALLY_SECRET_FIELDS = [
|
|
|
7
7
|
'password',
|
|
8
8
|
'client_secret',
|
|
9
9
|
];
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
/**
|
|
11
|
+
* A secret can appear in a log or capture already encoded: a JSON body
|
|
12
|
+
* escapes quotes and backslashes, a form-urlencoded body or a URL
|
|
13
|
+
* percent-encodes special characters. Mask those variants along with the
|
|
14
|
+
* raw value.
|
|
15
|
+
*/
|
|
16
|
+
function collectSecretPatterns(secretsSet) {
|
|
17
|
+
const patterns = new Set();
|
|
18
|
+
for (const secret of secretsSet) {
|
|
19
|
+
if (!secret.trim())
|
|
20
|
+
continue;
|
|
21
|
+
patterns.add(secret);
|
|
22
|
+
patterns.add(JSON.stringify(secret).slice(1, -1));
|
|
23
|
+
// A lone surrogate reaching us through a captured `\uD800` escape makes
|
|
24
|
+
// encodeURIComponent throw; URLSearchParams substitutes U+FFFD instead.
|
|
25
|
+
if (secret.isWellFormed()) {
|
|
26
|
+
patterns.add(encodeURIComponent(secret));
|
|
27
|
+
}
|
|
28
|
+
// URLSearchParams serializes to `secret=value`; drop the key to keep
|
|
29
|
+
// the form-urlencoded variant (spaces become `+`, unlike encodeURIComponent).
|
|
30
|
+
patterns.add(new URLSearchParams([['secret', secret]]).toString().slice('secret='.length));
|
|
20
31
|
}
|
|
21
|
-
|
|
22
|
-
|
|
32
|
+
// Longest first: a short secret nested in a longer one would otherwise mask
|
|
33
|
+
// only the prefix and leave the rest of the longer secret visible.
|
|
34
|
+
return Array.from(patterns).sort((left, right) => right.length - left.length);
|
|
35
|
+
}
|
|
36
|
+
export function maskSecrets(target, secretsSet) {
|
|
37
|
+
const patterns = collectSecretPatterns(secretsSet);
|
|
38
|
+
const maskString = (value) => {
|
|
23
39
|
let maskedValue = value;
|
|
24
|
-
for (const
|
|
25
|
-
if (maskedValue.includes(
|
|
26
|
-
maskedValue =
|
|
40
|
+
for (const pattern of patterns) {
|
|
41
|
+
if (maskedValue.includes(pattern)) {
|
|
42
|
+
maskedValue = maskedValue.split(pattern).join('*'.repeat(8));
|
|
27
43
|
}
|
|
28
44
|
}
|
|
29
45
|
return maskedValue;
|
|
30
46
|
};
|
|
47
|
+
if (typeof target === 'string') {
|
|
48
|
+
return maskString(target);
|
|
49
|
+
}
|
|
50
|
+
const masked = deepCopy(target);
|
|
31
51
|
const maskRecursive = (current) => {
|
|
32
52
|
for (const key in current) {
|
|
33
53
|
if (typeof current[key] === 'string') {
|
|
34
|
-
current[key] =
|
|
54
|
+
current[key] = maskString(current[key]);
|
|
35
55
|
}
|
|
36
56
|
else if (isPlainObject(current[key]) || Array.isArray(current[key])) {
|
|
37
57
|
// Skip special objects that should not be modified
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-secrets.js","sourceRoot":"","sources":["../../../src/modules/logger-output/mask-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,OAAO;IACP,cAAc;IACd,UAAU;IACV,UAAU;IACV,eAAe;CAChB,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"mask-secrets.js","sourceRoot":"","sources":["../../../src/modules/logger-output/mask-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,OAAO;IACP,cAAc;IACd,UAAU;IACV,UAAU;IACV,eAAe;CAChB,CAAC;AAEF;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,UAAuB;IACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,SAAS;QAC7B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,wEAAwE;QACxE,wEAAwE;QACxE,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;YAC1B,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,qEAAqE;QACrE,8EAA8E;QAC9E,QAAQ,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,4EAA4E;IAC5E,mEAAmE;IACnE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAS,EACT,UAAuB;IAEvB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;QAC3C,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC,MAAM,CAAM,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,aAAa,GAAG,CAAC,OAAY,EAAE,EAAE;QACrC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtE,mDAAmD;gBACnD,IACE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC;oBAC/B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,CAAC;oBACtC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC;oBAC/B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC;oBACnC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC;oBAC/B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC;oBACjC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC;oBAC9B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC;oBAC9B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC;oBAC9B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,EAChC,CAAC;oBACD,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,UAAuB;IACnE,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,GAAQ,EACR,YAAsB,yBAAyB;IAE/C,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,UAAmB,EAAE,EAAE;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,cAAc,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAE9B,oEAAoE;gBACpE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;wBAC9C,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC9C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;wBACrE,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;wBACpC,IAAI,WAAW,EAAE,CAAC;4BAChB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAChC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjD,cAAc,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAA0C,EAChF,KAAK,EACL,gBAAgB,EAChB,UAAU,GAKX;IACC,OAAO,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/respect-core",
|
|
3
|
-
"version": "2.43.
|
|
3
|
+
"version": "2.43.3",
|
|
4
4
|
"description": "API testing framework core",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@faker-js/faker": "^7.6.0",
|
|
49
49
|
"@noble/hashes": "^1.8.0",
|
|
50
50
|
"@redocly/ajv": "^8.18.1",
|
|
51
|
-
"@redocly/openapi-core": "2.43.
|
|
51
|
+
"@redocly/openapi-core": "2.43.3",
|
|
52
52
|
"ajv": "npm:@redocly/ajv@8.18.1",
|
|
53
53
|
"better-ajv-errors": "^2.0.3",
|
|
54
54
|
"colorette": "^2.0.20",
|