@honeybadger-io/js 6.16.5 → 6.16.6

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.
@@ -200,6 +200,17 @@ var stackTraceParser_esm = /*#__PURE__*/Object.freeze({
200
200
  var require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
201
201
 
202
202
  (function (exports) {
203
+ var __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () {
204
+ __assign = Object.assign || function(t) {
205
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
206
+ s = arguments[i];
207
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
208
+ t[p] = s[p];
209
+ }
210
+ return t;
211
+ };
212
+ return __assign.apply(this, arguments);
213
+ };
203
214
  var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
204
215
  if (k2 === undefined) k2 = k;
205
216
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -260,7 +271,7 @@ var require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
260
271
  }
261
272
  };
262
273
  Object.defineProperty(exports, "__esModule", { value: true });
263
- exports.logDeprecatedMethod = exports.globalThisOrWindow = exports.isBrowserConfig = exports.clone = exports.formatCGIData = exports.filterUrl = exports.filter = exports.generateStackTrace = exports.endpoint = exports.instrumentConsole = exports.instrument = exports.isErrorObject = exports.makeNotice = exports.logger = exports.sanitize = exports.shallowClone = exports.runAfterNotifyHandlers = exports.shouldSampleEvent = exports.resolveInsights = exports.runBeforeEventHandlers = exports.runBeforeNotifyHandlers = exports.getSourceForBacktrace = exports.getCauses = exports.calculateBacktraceShift = exports.DEFAULT_BACKTRACE_SHIFT = exports.makeBacktrace = exports.objectIsExtensible = exports.objectIsEmpty = exports.mergeNotice = exports.merge = void 0;
274
+ exports.logDeprecatedMethod = exports.globalThisOrWindow = exports.isBrowserConfig = exports.clone = exports.formatCGIData = exports.filterBreadcrumbs = exports.filterUrl = exports.filter = exports.generateStackTrace = exports.endpoint = exports.instrumentConsole = exports.instrument = exports.isErrorObject = exports.makeNotice = exports.logger = exports.sanitize = exports.shallowClone = exports.runAfterNotifyHandlers = exports.shouldSampleEvent = exports.resolveInsights = exports.runBeforeEventHandlers = exports.runBeforeNotifyHandlers = exports.getSourceForBacktrace = exports.getCauses = exports.calculateBacktraceShift = exports.DEFAULT_BACKTRACE_SHIFT = exports.makeBacktrace = exports.objectIsExtensible = exports.objectIsEmpty = exports.mergeNotice = exports.merge = void 0;
264
275
  /* eslint-disable prefer-rest-params */
265
276
  var stackTraceParser = __importStar(require$$0$1);
266
277
  function merge(obj1, obj2) {
@@ -846,6 +857,76 @@ var require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
846
857
  return result;
847
858
  }
848
859
  exports.filterUrl = filterUrl;
860
+ /**
861
+ * Breadcrumb metadata keys whose value is a URL, and so may carry a query string.
862
+ *
863
+ * Checked by name rather than by running `filterUrl` over every string value: a `?` is
864
+ * ordinary punctuation in a breadcrumb message or a console argument, and rewriting around
865
+ * it would mangle text that is not a URL at all.
866
+ */
867
+ var URL_METADATA_KEYS = ['url', 'from', 'to', 'href'];
868
+ /**
869
+ * Recursively rewrites the query string of every URL-bearing value.
870
+ *
871
+ * Nested as well as top-level: a breadcrumb may well carry
872
+ * `metadata: { request: { url: '/checkout?token=secret' } }`, and `filter` leaves that URL
873
+ * alone because the key `request` matches no filter.
874
+ *
875
+ * Safe to recurse without a seen-list because `filter` has already run: it replaces a
876
+ * circular reference with a string, so what arrives here is acyclic.
877
+ */
878
+ function filterUrlValues(value, filters) {
879
+ if (is('Array', value)) {
880
+ return value.map(function (entry) { return filterUrlValues(entry, filters); });
881
+ }
882
+ if (!is('Object', value)) {
883
+ return value;
884
+ }
885
+ var result = {};
886
+ var source = value;
887
+ // Own enumerable keys only, assigned with `defineProperty`: a plain `result[key] =` would
888
+ // reassign the prototype rather than create a property for a key named `__proto__`, and
889
+ // breadcrumb metadata is host-supplied.
890
+ Object.keys(source).forEach(function (key) {
891
+ var entry = source[key];
892
+ var filtered = URL_METADATA_KEYS.includes(key.toLowerCase()) && typeof entry === 'string'
893
+ ? filterUrl(entry, filters)
894
+ : filterUrlValues(entry, filters);
895
+ Object.defineProperty(result, key, {
896
+ value: filtered,
897
+ enumerable: true,
898
+ writable: true,
899
+ configurable: true
900
+ });
901
+ });
902
+ return result;
903
+ }
904
+ /**
905
+ * Applies `filters` to a breadcrumb trail.
906
+ *
907
+ * Metadata is filtered by key, exactly as `params` and `session` are, and any value under a
908
+ * URL-bearing key additionally has its query string filtered. Breadcrumb metadata is mostly
909
+ * generated by this library -- the XHR, fetch and navigation integrations all record a full
910
+ * URL -- so a query string lands there without the user ever choosing to put it there.
911
+ */
912
+ function filterBreadcrumbs(trail, filters) {
913
+ if (!is('Array', trail)) {
914
+ return [];
915
+ }
916
+ return trail.map(function (breadcrumb) {
917
+ // Leave a crumb that never carried metadata exactly as it is, so the payload shape does
918
+ // not change for it.
919
+ if (!is('Object', breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.metadata)) {
920
+ return breadcrumb;
921
+ }
922
+ // `filter` runs first, so a key-matched value is already '[FILTERED]' by the time the
923
+ // URL pass sees it. Passing that through `filterUrl` is harmless: it holds no '?', so
924
+ // it is returned untouched.
925
+ var metadata = filterUrlValues(filter(breadcrumb.metadata, filters), filters);
926
+ return __assign(__assign({}, breadcrumb), { metadata: metadata });
927
+ });
928
+ }
929
+ exports.filterBreadcrumbs = filterBreadcrumbs;
849
930
  function formatCGIData(vars, prefix) {
850
931
  if (prefix === void 0) { prefix = ''; }
851
932
  var formattedVars = {};
@@ -1473,7 +1554,7 @@ var Client = /** @class */ (function () {
1473
1554
  this.__notifier = {
1474
1555
  name: '@honeybadger-io/core',
1475
1556
  url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/core',
1476
- version: '6.16.5'
1557
+ version: '6.16.6'
1477
1558
  };
1478
1559
  this.config = __assign$1(__assign$1({}, defaults_1.CONFIG), opts);
1479
1560
  this.__initStore();
@@ -1834,7 +1915,7 @@ var Client = /** @class */ (function () {
1834
1915
  notifier: this.__notifier,
1835
1916
  breadcrumbs: {
1836
1917
  enabled: !!this.config.breadcrumbsEnabled,
1837
- trail: notice.__breadcrumbs || []
1918
+ trail: (0, util_1$5.filterBreadcrumbs)(notice.__breadcrumbs || [], this.config.filters)
1838
1919
  },
1839
1920
  error: {
1840
1921
  class: notice.name,
@@ -4089,7 +4170,7 @@ var globalSingleton = {};
4089
4170
  var NOTIFIER = {
4090
4171
  name: '@honeybadger-io/js',
4091
4172
  url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/js',
4092
- version: '6.16.5'
4173
+ version: '6.16.6'
4093
4174
  };
4094
4175
  var userAgent = function () {
4095
4176
  return "Honeybadger JS Server Client ".concat(NOTIFIER.version, ", ").concat(os_1.default.version(), "; ").concat(os_1.default.platform());