@honeybadger-io/js 6.16.6 → 6.17.0

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.
@@ -271,7 +271,7 @@ var require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
271
271
  }
272
272
  };
273
273
  Object.defineProperty(exports, "__esModule", { value: true });
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;
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.runBeforeBreadcrumbHandlers = 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;
275
275
  /* eslint-disable prefer-rest-params */
276
276
  var stackTraceParser = __importStar(require$$0$1);
277
277
  function merge(obj1, obj2) {
@@ -484,6 +484,25 @@ var require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
484
484
  });
485
485
  }
486
486
  exports.runBeforeEventHandlers = runBeforeEventHandlers;
487
+ function runBeforeBreadcrumbHandlers(breadcrumb, handlers, logger) {
488
+ for (var i = 0, len = handlers.length; i < len; i++) {
489
+ var result = void 0;
490
+ try {
491
+ result = handlers[i](breadcrumb);
492
+ }
493
+ catch (err) {
494
+ // Breadcrumbs are recorded inside instrumented fetch/XHR/DOM callbacks,
495
+ // so a buggy handler must not throw into the host app. Log and treat as no-op.
496
+ logger === null || logger === void 0 ? void 0 : logger.error('beforeBreadcrumb handler threw; continuing', err);
497
+ continue;
498
+ }
499
+ if (result === false) {
500
+ return false;
501
+ }
502
+ }
503
+ return true;
504
+ }
505
+ exports.runBeforeBreadcrumbHandlers = runBeforeBreadcrumbHandlers;
487
506
  function resolveInsights(config) {
488
507
  var _a, _b;
489
508
  var insights = config.insights;
@@ -1549,12 +1568,14 @@ var Client = /** @class */ (function () {
1549
1568
  this.__store = null;
1550
1569
  this.__beforeNotifyHandlers = [];
1551
1570
  this.__beforeEventHandlers = [];
1571
+ this.__beforeBreadcrumbHandlers = [];
1572
+ this.__runningBeforeBreadcrumbHandlers = false;
1552
1573
  this.__afterNotifyHandlers = [];
1553
1574
  this.__pendingEvents = new Set();
1554
1575
  this.__notifier = {
1555
1576
  name: '@honeybadger-io/core',
1556
1577
  url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/core',
1557
- version: '6.16.6'
1578
+ version: '6.17.0'
1558
1579
  };
1559
1580
  this.config = __assign$1(__assign$1({}, defaults_1.CONFIG), opts);
1560
1581
  this.__initStore();
@@ -1621,6 +1642,10 @@ var Client = /** @class */ (function () {
1621
1642
  this.__beforeEventHandlers.push(handler);
1622
1643
  return this;
1623
1644
  };
1645
+ Client.prototype.beforeBreadcrumb = function (handler) {
1646
+ this.__beforeBreadcrumbHandlers.push(handler);
1647
+ return this;
1648
+ };
1624
1649
  Client.prototype.afterNotify = function (handler) {
1625
1650
  this.__afterNotifyHandlers.push(handler);
1626
1651
  return this;
@@ -1826,12 +1851,29 @@ var Client = /** @class */ (function () {
1826
1851
  var metadata = (0, util_1$5.shallowClone)(opts.metadata);
1827
1852
  var category = opts.category || 'custom';
1828
1853
  var timestamp = new Date().toISOString();
1829
- this.__store.addBreadcrumb({
1854
+ var breadcrumb = {
1830
1855
  category: category,
1831
1856
  message: message,
1832
1857
  metadata: metadata,
1833
1858
  timestamp: timestamp
1834
- });
1859
+ };
1860
+ // A handler that logs, or the error we log when a handler throws, goes
1861
+ // through instrumented console methods and lands back here. Skipping the
1862
+ // handlers for those breadcrumbs keeps that from recursing.
1863
+ if (!this.__runningBeforeBreadcrumbHandlers) {
1864
+ this.__runningBeforeBreadcrumbHandlers = true;
1865
+ var keep = void 0;
1866
+ try {
1867
+ keep = (0, util_1$5.runBeforeBreadcrumbHandlers)(breadcrumb, this.__beforeBreadcrumbHandlers, this.logger);
1868
+ }
1869
+ finally {
1870
+ this.__runningBeforeBreadcrumbHandlers = false;
1871
+ }
1872
+ if (!keep) {
1873
+ return this;
1874
+ }
1875
+ }
1876
+ this.__store.addBreadcrumb(breadcrumb);
1835
1877
  return this;
1836
1878
  };
1837
1879
  /**
@@ -4170,7 +4212,7 @@ var globalSingleton = {};
4170
4212
  var NOTIFIER = {
4171
4213
  name: '@honeybadger-io/js',
4172
4214
  url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/js',
4173
- version: '6.16.6'
4215
+ version: '6.17.0'
4174
4216
  };
4175
4217
  var userAgent = function () {
4176
4218
  return "Honeybadger JS Server Client ".concat(NOTIFIER.version, ", ").concat(os_1.default.version(), "; ").concat(os_1.default.platform());