@sophonz/redaction 0.0.2 → 0.0.4

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/build/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { createAttributeScrubber } from './attributes';
2
- export { createSanitizeUrl, DEFAULT_QUERY_PARAMS_TO_SCRUB, defaultSanitizeUrl, REDACTED, } from './url';
2
+ export { createSanitizeUrl, DEFAULT_QUERY_PARAMS_TO_DROP, DEFAULT_QUERY_PARAMS_TO_SCRUB, defaultSanitizeUrl, REDACTED, } from './url';
3
3
  export type { AttributeScrubber, AttributeScrubberOptions, SanitizeUrl, SanitizeUrlOptions, ScrubAttributes, ScrubbableValue, } from './types';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,kBAAkB,EAClB,QAAQ,GACT,MAAM,OAAO,CAAC;AAEf,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,6BAA6B,EAC7B,kBAAkB,EAClB,QAAQ,GACT,MAAM,OAAO,CAAC;AAEf,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,SAAS,CAAC"}
package/build/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.REDACTED = exports.defaultSanitizeUrl = exports.DEFAULT_QUERY_PARAMS_TO_SCRUB = exports.createSanitizeUrl = exports.createAttributeScrubber = void 0;
3
+ exports.REDACTED = exports.defaultSanitizeUrl = exports.DEFAULT_QUERY_PARAMS_TO_SCRUB = exports.DEFAULT_QUERY_PARAMS_TO_DROP = exports.createSanitizeUrl = exports.createAttributeScrubber = void 0;
4
4
  var attributes_1 = require("./attributes");
5
5
  Object.defineProperty(exports, "createAttributeScrubber", { enumerable: true, get: function () { return attributes_1.createAttributeScrubber; } });
6
6
  var url_1 = require("./url");
7
7
  Object.defineProperty(exports, "createSanitizeUrl", { enumerable: true, get: function () { return url_1.createSanitizeUrl; } });
8
+ Object.defineProperty(exports, "DEFAULT_QUERY_PARAMS_TO_DROP", { enumerable: true, get: function () { return url_1.DEFAULT_QUERY_PARAMS_TO_DROP; } });
8
9
  Object.defineProperty(exports, "DEFAULT_QUERY_PARAMS_TO_SCRUB", { enumerable: true, get: function () { return url_1.DEFAULT_QUERY_PARAMS_TO_SCRUB; } });
9
10
  Object.defineProperty(exports, "defaultSanitizeUrl", { enumerable: true, get: function () { return url_1.defaultSanitizeUrl; } });
10
11
  Object.defineProperty(exports, "REDACTED", { enumerable: true, get: function () { return url_1.REDACTED; } });
package/build/types.d.ts CHANGED
@@ -2,6 +2,8 @@ export type SanitizeUrl = (url: string) => string;
2
2
  export interface SanitizeUrlOptions {
3
3
  additionalQueryParamsToScrub?: readonly string[];
4
4
  queryParamsToScrub?: readonly string[];
5
+ additionalQueryParamsToDrop?: readonly string[];
6
+ queryParamsToDrop?: readonly string[];
5
7
  redactCredentials?: boolean;
6
8
  scrubFragment?: boolean;
7
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;AAKlD,MAAM,WAAW,kBAAkB;IAWjC,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAUjD,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAKvC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAW5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAsBD,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,UAAU,GACV,eAAe,EAAE,GACjB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;AAyBvC,MAAM,WAAW,iBAAiB;IAQhC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IASzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAgBxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAWvC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,eAAe,GAAG,SAAS,CAAC;CAC9E;AAKD,MAAM,WAAW,wBAAwB;IAQvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACtD;AAYD,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;AAKlD,MAAM,WAAW,kBAAkB;IAWjC,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAUjD,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAavC,2BAA2B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAQhD,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAKtC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAW5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAsBD,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,UAAU,GACV,eAAe,EAAE,GACjB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;AAyBvC,MAAM,WAAW,iBAAiB;IAQhC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IASzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAgBxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAWvC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,eAAe,GAAG,SAAS,CAAC;CAC9E;AAKD,MAAM,WAAW,wBAAwB;IAQvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACtD;AAYD,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC"}
package/build/url.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { SanitizeUrl, SanitizeUrlOptions } from './types';
2
2
  export declare const REDACTED = "REDACTED";
3
3
  export declare const DEFAULT_QUERY_PARAMS_TO_SCRUB: readonly string[];
4
+ export declare const DEFAULT_QUERY_PARAMS_TO_DROP: readonly string[];
4
5
  export declare function createSanitizeUrl(options?: SanitizeUrlOptions): SanitizeUrl;
5
6
  export declare function defaultSanitizeUrl(url: string): string;
6
7
  //# sourceMappingURL=url.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAY/D,eAAO,MAAM,QAAQ,aAAa,CAAC;AAMnC,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAoBzD,CAAC;AAgMH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAsCb;AAgBD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAY/D,eAAO,MAAM,QAAQ,aAAa,CAAC;AAMnC,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAoBzD,CAAC;AAkBH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAKxD,CAAC;AA6NH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAmDb;AAgBD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD"}
package/build/url.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_QUERY_PARAMS_TO_SCRUB = exports.REDACTED = void 0;
3
+ exports.DEFAULT_QUERY_PARAMS_TO_DROP = exports.DEFAULT_QUERY_PARAMS_TO_SCRUB = exports.REDACTED = void 0;
4
4
  exports.createSanitizeUrl = createSanitizeUrl;
5
5
  exports.defaultSanitizeUrl = defaultSanitizeUrl;
6
6
  exports.REDACTED = 'REDACTED';
@@ -25,6 +25,10 @@ exports.DEFAULT_QUERY_PARAMS_TO_SCRUB = Object.freeze([
25
25
  'signature',
26
26
  'hash',
27
27
  ]);
28
+ exports.DEFAULT_QUERY_PARAMS_TO_DROP = Object.freeze([
29
+ '_rsc',
30
+ '_',
31
+ ]);
28
32
  const SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*:/;
29
33
  function isSlash(ch) {
30
34
  return ch === '/' || ch === '\\';
@@ -43,36 +47,44 @@ function normalizeParamName(raw) {
43
47
  }
44
48
  return name.trim().toLowerCase();
45
49
  }
46
- function scrubParams(params, scrub) {
50
+ function scrubParams(params, scrub, drop) {
47
51
  if (params === '' || params.indexOf('=') === -1) {
48
52
  return params;
49
53
  }
50
54
  const pairs = params.split('&');
55
+ const kept = [];
51
56
  let changed = false;
52
57
  for (let i = 0; i < pairs.length; i++) {
53
58
  const pair = pairs[i];
54
59
  const eq = pair.indexOf('=');
55
60
  if (eq === -1) {
61
+ kept.push(pair);
62
+ continue;
63
+ }
64
+ const name = normalizeParamName(pair.slice(0, eq));
65
+ if (drop.has(name)) {
66
+ changed = true;
56
67
  continue;
57
68
  }
58
69
  const rawName = pair.slice(0, eq);
59
- if (!scrub.has(normalizeParamName(rawName))) {
70
+ if (!scrub.has(name)) {
71
+ kept.push(pair);
60
72
  continue;
61
73
  }
62
74
  const redacted = rawName + '=' + exports.REDACTED;
63
75
  if (redacted !== pair) {
64
- pairs[i] = redacted;
65
76
  changed = true;
66
77
  }
78
+ kept.push(redacted);
67
79
  }
68
- return changed ? pairs.join('&') : params;
80
+ return changed ? kept.join('&') : params;
69
81
  }
70
- function scrubFragmentParams(fragment, scrub) {
82
+ function scrubFragmentParams(fragment, scrub, drop) {
71
83
  const q = fragment.indexOf('?');
72
84
  if (q !== -1) {
73
- return fragment.slice(0, q + 1) + scrubParams(fragment.slice(q + 1), scrub);
85
+ return (fragment.slice(0, q + 1) + scrubParams(fragment.slice(q + 1), scrub, drop));
74
86
  }
75
- return scrubParams(fragment, scrub);
87
+ return scrubParams(fragment, scrub, drop);
76
88
  }
77
89
  function redactCredentials(head) {
78
90
  let start = -1;
@@ -112,7 +124,7 @@ function redactCredentials(head) {
112
124
  }
113
125
  return head.slice(0, start) + replacement + head.slice(start + at);
114
126
  }
115
- function sanitize(url, scrub, credentials, fragment) {
127
+ function sanitize(url, scrub, drop, credentials, fragment) {
116
128
  const hash = url.indexOf('#');
117
129
  const beforeHash = hash === -1 ? url : url.slice(0, hash);
118
130
  const fragmentText = hash === -1 ? '' : url.slice(hash + 1);
@@ -121,17 +133,20 @@ function sanitize(url, scrub, credentials, fragment) {
121
133
  const query = question === -1 ? '' : beforeHash.slice(question + 1);
122
134
  let out = credentials ? redactCredentials(head) : head;
123
135
  if (question !== -1) {
124
- out += '?' + scrubParams(query, scrub);
136
+ const scrubbed = scrubParams(query, scrub, drop);
137
+ if (scrubbed !== '' || query === '') {
138
+ out += '?' + scrubbed;
139
+ }
125
140
  }
126
141
  if (hash !== -1) {
127
142
  out +=
128
143
  '#' +
129
- (fragment ? scrubFragmentParams(fragmentText, scrub) : fragmentText);
144
+ (fragment ? scrubFragmentParams(fragmentText, scrub, drop) : fragmentText);
130
145
  }
131
146
  return out;
132
147
  }
133
148
  function createSanitizeUrl(options = {}) {
134
- var _a;
149
+ var _a, _b;
135
150
  const scrub = new Set();
136
151
  const base = (_a = options.queryParamsToScrub) !== null && _a !== void 0 ? _a : exports.DEFAULT_QUERY_PARAMS_TO_SCRUB;
137
152
  for (let i = 0; i < base.length; i++) {
@@ -144,6 +159,18 @@ function createSanitizeUrl(options = {}) {
144
159
  }
145
160
  }
146
161
  scrub.delete('');
162
+ const drop = new Set();
163
+ const dropBase = (_b = options.queryParamsToDrop) !== null && _b !== void 0 ? _b : exports.DEFAULT_QUERY_PARAMS_TO_DROP;
164
+ for (let i = 0; i < dropBase.length; i++) {
165
+ drop.add(normalizeParamName(dropBase[i]));
166
+ }
167
+ const dropExtra = options.additionalQueryParamsToDrop;
168
+ if (dropExtra) {
169
+ for (let i = 0; i < dropExtra.length; i++) {
170
+ drop.add(normalizeParamName(dropExtra[i]));
171
+ }
172
+ }
173
+ drop.delete('');
147
174
  const credentials = options.redactCredentials !== false;
148
175
  const fragment = options.scrubFragment !== false;
149
176
  return function sanitizeUrl(url) {
@@ -151,7 +178,7 @@ function createSanitizeUrl(options = {}) {
151
178
  return '';
152
179
  }
153
180
  try {
154
- return sanitize(url, scrub, credentials, fragment);
181
+ return sanitize(url, scrub, drop, credentials, fragment);
155
182
  }
156
183
  catch {
157
184
  return exports.REDACTED;
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.0.1";
1
+ export declare const VERSION = "0.0.3";
2
2
  //# sourceMappingURL=version.d.ts.map
package/build/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '0.0.1';
4
+ exports.VERSION = '0.0.3';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sophonz/redaction",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Sophonz Redaction",
5
5
  "homepage": "https://sophonz.com",
6
6
  "repository": {