@sentry/browser 6.7.2 → 6.8.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.
Files changed (63) hide show
  1. package/build/bundle.es6.js +197 -24
  2. package/build/bundle.es6.js.map +1 -1
  3. package/build/bundle.es6.min.js +2 -2
  4. package/build/bundle.es6.min.js.map +1 -1
  5. package/build/bundle.js +235 -57
  6. package/build/bundle.js.map +1 -1
  7. package/build/bundle.min.js +2 -2
  8. package/build/bundle.min.js.map +1 -1
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/integrations/breadcrumbs.d.ts +1 -1
  12. package/dist/integrations/breadcrumbs.d.ts.map +1 -1
  13. package/dist/integrations/breadcrumbs.js +6 -3
  14. package/dist/integrations/breadcrumbs.js.map +1 -1
  15. package/dist/integrations/dedupe.d.ts +35 -0
  16. package/dist/integrations/dedupe.d.ts.map +1 -0
  17. package/dist/integrations/dedupe.js +166 -0
  18. package/dist/integrations/dedupe.js.map +1 -0
  19. package/dist/integrations/globalhandlers.d.ts.map +1 -1
  20. package/dist/integrations/globalhandlers.js +6 -8
  21. package/dist/integrations/globalhandlers.js.map +1 -1
  22. package/dist/integrations/index.d.ts +1 -0
  23. package/dist/integrations/index.d.ts.map +1 -1
  24. package/dist/integrations/index.js +2 -0
  25. package/dist/integrations/index.js.map +1 -1
  26. package/dist/sdk.d.ts +2 -2
  27. package/dist/sdk.d.ts.map +1 -1
  28. package/dist/sdk.js +1 -0
  29. package/dist/sdk.js.map +1 -1
  30. package/dist/transports/fetch.d.ts.map +1 -1
  31. package/dist/transports/fetch.js +19 -17
  32. package/dist/transports/fetch.js.map +1 -1
  33. package/dist/transports/xhr.d.ts.map +1 -1
  34. package/dist/transports/xhr.js +20 -18
  35. package/dist/transports/xhr.js.map +1 -1
  36. package/esm/index.d.ts +1 -0
  37. package/esm/index.d.ts.map +1 -1
  38. package/esm/integrations/breadcrumbs.d.ts +1 -1
  39. package/esm/integrations/breadcrumbs.d.ts.map +1 -1
  40. package/esm/integrations/breadcrumbs.js +6 -3
  41. package/esm/integrations/breadcrumbs.js.map +1 -1
  42. package/esm/integrations/dedupe.d.ts +35 -0
  43. package/esm/integrations/dedupe.d.ts.map +1 -0
  44. package/esm/integrations/dedupe.js +165 -0
  45. package/esm/integrations/dedupe.js.map +1 -0
  46. package/esm/integrations/globalhandlers.d.ts.map +1 -1
  47. package/esm/integrations/globalhandlers.js +6 -8
  48. package/esm/integrations/globalhandlers.js.map +1 -1
  49. package/esm/integrations/index.d.ts +1 -0
  50. package/esm/integrations/index.d.ts.map +1 -1
  51. package/esm/integrations/index.js +1 -0
  52. package/esm/integrations/index.js.map +1 -1
  53. package/esm/sdk.d.ts +2 -2
  54. package/esm/sdk.d.ts.map +1 -1
  55. package/esm/sdk.js +2 -1
  56. package/esm/sdk.js.map +1 -1
  57. package/esm/transports/fetch.d.ts.map +1 -1
  58. package/esm/transports/fetch.js +19 -17
  59. package/esm/transports/fetch.js.map +1 -1
  60. package/esm/transports/xhr.d.ts.map +1 -1
  61. package/esm/transports/xhr.js +20 -18
  62. package/esm/transports/xhr.js.map +1 -1
  63. package/package.json +5 -5
@@ -119,23 +119,25 @@ var FetchTransport = /** @class */ (function (_super) {
119
119
  if (this.options.headers !== undefined) {
120
120
  options.headers = this.options.headers;
121
121
  }
122
- return this._buffer.add(new utils_1.SyncPromise(function (resolve, reject) {
123
- void _this._fetch(sentryRequest.url, options)
124
- .then(function (response) {
125
- var headers = {
126
- 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),
127
- 'retry-after': response.headers.get('Retry-After'),
128
- };
129
- _this._handleResponse({
130
- requestType: sentryRequest.type,
131
- response: response,
132
- headers: headers,
133
- resolve: resolve,
134
- reject: reject,
135
- });
136
- })
137
- .catch(reject);
138
- }));
122
+ return this._buffer.add(function () {
123
+ return new utils_1.SyncPromise(function (resolve, reject) {
124
+ void _this._fetch(sentryRequest.url, options)
125
+ .then(function (response) {
126
+ var headers = {
127
+ 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),
128
+ 'retry-after': response.headers.get('Retry-After'),
129
+ };
130
+ _this._handleResponse({
131
+ requestType: sentryRequest.type,
132
+ response: response,
133
+ headers: headers,
134
+ resolve: resolve,
135
+ reject: reject,
136
+ });
137
+ })
138
+ .catch(reject);
139
+ });
140
+ });
139
141
  };
140
142
  return FetchTransport;
141
143
  }(base_1.BaseTransport));
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/transports/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';\nimport { Event, Response, SentryRequest, Session, TransportOptions } from '@sentry/types';\nimport { getGlobalObject, isNativeFetch, logger, supportsReferrerPolicy, SyncPromise } from '@sentry/utils';\n\nimport { BaseTransport } from './base';\n\ntype FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nfunction getNativeFetchImplementation(): FetchImpl {\n /* eslint-disable @typescript-eslint/unbound-method */\n\n // Fast path to avoid DOM I/O\n const global = getGlobalObject<Window>();\n if (isNativeFetch(global.fetch)) {\n return global.fetch.bind(global);\n }\n\n const document = global.document;\n let fetchImpl = global.fetch;\n // eslint-disable-next-line deprecation/deprecation\n if (typeof document?.createElement === `function`) {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n if (sandbox.contentWindow?.fetch) {\n fetchImpl = sandbox.contentWindow.fetch;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n }\n }\n\n return fetchImpl.bind(global);\n /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** `fetch` based transport */\nexport class FetchTransport extends BaseTransport {\n /**\n * Fetch API reference which always points to native browser implementation.\n */\n private _fetch: typeof fetch;\n\n public constructor(options: TransportOptions, fetchImpl: FetchImpl = getNativeFetchImplementation()) {\n super(options);\n this._fetch = fetchImpl;\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event): PromiseLike<Response> {\n return this._sendRequest(eventToSentryRequest(event, this._api), event);\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session): PromiseLike<Response> {\n return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n }\n\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n private _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {\n if (this._isRateLimited(sentryRequest.type)) {\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n reason: `Transport for ${sentryRequest.type} requests locked till ${this._disabledUntil(\n sentryRequest.type,\n )} due to too many requests.`,\n status: 429,\n });\n }\n\n const options: RequestInit = {\n body: sentryRequest.body,\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: (supportsReferrerPolicy() ? 'origin' : '') as ReferrerPolicy,\n };\n if (this.options.fetchParameters !== undefined) {\n Object.assign(options, this.options.fetchParameters);\n }\n if (this.options.headers !== undefined) {\n options.headers = this.options.headers;\n }\n\n return this._buffer.add(\n new SyncPromise<Response>((resolve, reject) => {\n void this._fetch(sentryRequest.url, options)\n .then(response => {\n const headers = {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n };\n this._handleResponse({\n requestType: sentryRequest.type,\n response,\n headers,\n resolve,\n reject,\n });\n })\n .catch(reject);\n }),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/transports/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["import { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';\nimport { Event, Response, SentryRequest, Session, TransportOptions } from '@sentry/types';\nimport { getGlobalObject, isNativeFetch, logger, supportsReferrerPolicy, SyncPromise } from '@sentry/utils';\n\nimport { BaseTransport } from './base';\n\ntype FetchImpl = typeof fetch;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nfunction getNativeFetchImplementation(): FetchImpl {\n /* eslint-disable @typescript-eslint/unbound-method */\n\n // Fast path to avoid DOM I/O\n const global = getGlobalObject<Window>();\n if (isNativeFetch(global.fetch)) {\n return global.fetch.bind(global);\n }\n\n const document = global.document;\n let fetchImpl = global.fetch;\n // eslint-disable-next-line deprecation/deprecation\n if (typeof document?.createElement === `function`) {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n if (sandbox.contentWindow?.fetch) {\n fetchImpl = sandbox.contentWindow.fetch;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n }\n }\n\n return fetchImpl.bind(global);\n /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** `fetch` based transport */\nexport class FetchTransport extends BaseTransport {\n /**\n * Fetch API reference which always points to native browser implementation.\n */\n private _fetch: typeof fetch;\n\n public constructor(options: TransportOptions, fetchImpl: FetchImpl = getNativeFetchImplementation()) {\n super(options);\n this._fetch = fetchImpl;\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event): PromiseLike<Response> {\n return this._sendRequest(eventToSentryRequest(event, this._api), event);\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session): PromiseLike<Response> {\n return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n }\n\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n private _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {\n if (this._isRateLimited(sentryRequest.type)) {\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n reason: `Transport for ${sentryRequest.type} requests locked till ${this._disabledUntil(\n sentryRequest.type,\n )} due to too many requests.`,\n status: 429,\n });\n }\n\n const options: RequestInit = {\n body: sentryRequest.body,\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: (supportsReferrerPolicy() ? 'origin' : '') as ReferrerPolicy,\n };\n if (this.options.fetchParameters !== undefined) {\n Object.assign(options, this.options.fetchParameters);\n }\n if (this.options.headers !== undefined) {\n options.headers = this.options.headers;\n }\n\n return this._buffer.add(\n () =>\n new SyncPromise<Response>((resolve, reject) => {\n void this._fetch(sentryRequest.url, options)\n .then(response => {\n const headers = {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n };\n this._handleResponse({\n requestType: sentryRequest.type,\n response,\n headers,\n resolve,\n reject,\n });\n })\n .catch(reject);\n }),\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../src/transports/xhr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,4BAA4B;AAC5B,qBAAa,YAAa,SAAQ,aAAa;IAC7C;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIrD;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC;IAI3D;;;OAGG;IACH,OAAO,CAAC,YAAY;CAoCrB"}
1
+ {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../src/transports/xhr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAiB,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,4BAA4B;AAC5B,qBAAa,YAAa,SAAQ,aAAa;IAC7C;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIrD;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC;IAI3D;;;OAGG;IACH,OAAO,CAAC,YAAY;CAqCrB"}
@@ -35,25 +35,27 @@ var XHRTransport = /** @class */ (function (_super) {
35
35
  status: 429,
36
36
  });
37
37
  }
38
- return this._buffer.add(new utils_1.SyncPromise(function (resolve, reject) {
39
- var request = new XMLHttpRequest();
40
- request.onreadystatechange = function () {
41
- if (request.readyState === 4) {
42
- var headers = {
43
- 'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'),
44
- 'retry-after': request.getResponseHeader('Retry-After'),
45
- };
46
- _this._handleResponse({ requestType: sentryRequest.type, response: request, headers: headers, resolve: resolve, reject: reject });
38
+ return this._buffer.add(function () {
39
+ return new utils_1.SyncPromise(function (resolve, reject) {
40
+ var request = new XMLHttpRequest();
41
+ request.onreadystatechange = function () {
42
+ if (request.readyState === 4) {
43
+ var headers = {
44
+ 'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'),
45
+ 'retry-after': request.getResponseHeader('Retry-After'),
46
+ };
47
+ _this._handleResponse({ requestType: sentryRequest.type, response: request, headers: headers, resolve: resolve, reject: reject });
48
+ }
49
+ };
50
+ request.open('POST', sentryRequest.url);
51
+ for (var header in _this.options.headers) {
52
+ if (_this.options.headers.hasOwnProperty(header)) {
53
+ request.setRequestHeader(header, _this.options.headers[header]);
54
+ }
47
55
  }
48
- };
49
- request.open('POST', sentryRequest.url);
50
- for (var header in _this.options.headers) {
51
- if (_this.options.headers.hasOwnProperty(header)) {
52
- request.setRequestHeader(header, _this.options.headers[header]);
53
- }
54
- }
55
- request.send(sentryRequest.body);
56
- }));
56
+ request.send(sentryRequest.body);
57
+ });
58
+ });
57
59
  };
58
60
  return XHRTransport;
59
61
  }(base_1.BaseTransport));
@@ -1 +1 @@
1
- {"version":3,"file":"xhr.js","sourceRoot":"","sources":["../../src/transports/xhr.ts"],"names":[],"mappings":";;AAAA,qCAA4E;AAE5E,uCAA4C;AAE5C,+BAAuC;AAEvC,4BAA4B;AAC5B;IAAkC,wCAAa;IAA/C;;IAuDA,CAAC;IAtDC;;OAEG;IACI,gCAAS,GAAhB,UAAiB,KAAY;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,2BAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACI,kCAAW,GAAlB,UAAmB,OAAgB;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,6BAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACK,mCAAY,GAApB,UAAqB,aAA4B,EAAE,eAAgC;QAAnF,iBAmCC;QAlCC,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,OAAO,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,MAAM,EAAE,mBAAiB,aAAa,CAAC,IAAI,8BAAyB,IAAI,CAAC,cAAc,CACrF,aAAa,CAAC,IAAI,CACnB,+BAA4B;gBAC7B,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB,IAAI,mBAAW,CAAW,UAAC,OAAO,EAAE,MAAM;YACxC,IAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;YAErC,OAAO,CAAC,kBAAkB,GAAG;gBAC3B,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;oBAC5B,IAAM,OAAO,GAAG;wBACd,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;wBACzE,aAAa,EAAE,OAAO,CAAC,iBAAiB,CAAC,aAAa,CAAC;qBACxD,CAAC;oBACF,KAAI,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,SAAA,EAAE,OAAO,SAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;iBACxG;YACH,CAAC,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;YACxC,KAAK,IAAM,MAAM,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACzC,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;oBAC/C,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;iBAChE;aACF;YACD,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IACH,mBAAC;AAAD,CAAC,AAvDD,CAAkC,oBAAa,GAuD9C;AAvDY,oCAAY","sourcesContent":["import { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';\nimport { Event, Response, SentryRequest, Session } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\nimport { BaseTransport } from './base';\n\n/** `XHR` based transport */\nexport class XHRTransport extends BaseTransport {\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event): PromiseLike<Response> {\n return this._sendRequest(eventToSentryRequest(event, this._api), event);\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session): PromiseLike<Response> {\n return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n }\n\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n private _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {\n if (this._isRateLimited(sentryRequest.type)) {\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n reason: `Transport for ${sentryRequest.type} requests locked till ${this._disabledUntil(\n sentryRequest.type,\n )} due to too many requests.`,\n status: 429,\n });\n }\n\n return this._buffer.add(\n new SyncPromise<Response>((resolve, reject) => {\n const request = new XMLHttpRequest();\n\n request.onreadystatechange = (): void => {\n if (request.readyState === 4) {\n const headers = {\n 'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'),\n 'retry-after': request.getResponseHeader('Retry-After'),\n };\n this._handleResponse({ requestType: sentryRequest.type, response: request, headers, resolve, reject });\n }\n };\n\n request.open('POST', sentryRequest.url);\n for (const header in this.options.headers) {\n if (this.options.headers.hasOwnProperty(header)) {\n request.setRequestHeader(header, this.options.headers[header]);\n }\n }\n request.send(sentryRequest.body);\n }),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"xhr.js","sourceRoot":"","sources":["../../src/transports/xhr.ts"],"names":[],"mappings":";;AAAA,qCAA4E;AAE5E,uCAA4C;AAE5C,+BAAuC;AAEvC,4BAA4B;AAC5B;IAAkC,wCAAa;IAA/C;;IAwDA,CAAC;IAvDC;;OAEG;IACI,gCAAS,GAAhB,UAAiB,KAAY;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,2BAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACI,kCAAW,GAAlB,UAAmB,OAAgB;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,6BAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACK,mCAAY,GAApB,UAAqB,aAA4B,EAAE,eAAgC;QAAnF,iBAoCC;QAnCC,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,OAAO,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,MAAM,EAAE,mBAAiB,aAAa,CAAC,IAAI,8BAAyB,IAAI,CAAC,cAAc,CACrF,aAAa,CAAC,IAAI,CACnB,+BAA4B;gBAC7B,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CACrB;YACE,OAAA,IAAI,mBAAW,CAAW,UAAC,OAAO,EAAE,MAAM;gBACxC,IAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;gBAErC,OAAO,CAAC,kBAAkB,GAAG;oBAC3B,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;wBAC5B,IAAM,OAAO,GAAG;4BACd,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;4BACzE,aAAa,EAAE,OAAO,CAAC,iBAAiB,CAAC,aAAa,CAAC;yBACxD,CAAC;wBACF,KAAI,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,SAAA,EAAE,OAAO,SAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;qBACxG;gBACH,CAAC,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxC,KAAK,IAAM,MAAM,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,EAAE;oBACzC,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;wBAC/C,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;qBAChE;iBACF;gBACD,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;QApBF,CAoBE,CACL,CAAC;IACJ,CAAC;IACH,mBAAC;AAAD,CAAC,AAxDD,CAAkC,oBAAa,GAwD9C;AAxDY,oCAAY","sourcesContent":["import { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';\nimport { Event, Response, SentryRequest, Session } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n\nimport { BaseTransport } from './base';\n\n/** `XHR` based transport */\nexport class XHRTransport extends BaseTransport {\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event): PromiseLike<Response> {\n return this._sendRequest(eventToSentryRequest(event, this._api), event);\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session): PromiseLike<Response> {\n return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n }\n\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n private _sendRequest(sentryRequest: SentryRequest, originalPayload: Event | Session): PromiseLike<Response> {\n if (this._isRateLimited(sentryRequest.type)) {\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n reason: `Transport for ${sentryRequest.type} requests locked till ${this._disabledUntil(\n sentryRequest.type,\n )} due to too many requests.`,\n status: 429,\n });\n }\n\n return this._buffer.add(\n () =>\n new SyncPromise<Response>((resolve, reject) => {\n const request = new XMLHttpRequest();\n\n request.onreadystatechange = (): void => {\n if (request.readyState === 4) {\n const headers = {\n 'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'),\n 'retry-after': request.getResponseHeader('Retry-After'),\n };\n this._handleResponse({ requestType: sentryRequest.type, response: request, headers, resolve, reject });\n }\n };\n\n request.open('POST', sentryRequest.url);\n for (const header in this.options.headers) {\n if (this.options.headers.hasOwnProperty(header)) {\n request.setRequestHeader(header, this.options.headers[header]);\n }\n }\n request.send(sentryRequest.body);\n }),\n );\n }\n}\n"]}
package/esm/index.d.ts CHANGED
@@ -8,6 +8,7 @@ declare const INTEGRATIONS: {
8
8
  Breadcrumbs: typeof BrowserIntegrations.Breadcrumbs;
9
9
  LinkedErrors: typeof BrowserIntegrations.LinkedErrors;
10
10
  UserAgent: typeof BrowserIntegrations.UserAgent;
11
+ Dedupe: typeof BrowserIntegrations.Dedupe;
11
12
  FunctionToString: typeof CoreIntegrations.FunctionToString;
12
13
  InboundFilters: typeof CoreIntegrations.InboundFilters;
13
14
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAE1B,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,KAAK,mBAAmB,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAU3C,QAAA,MAAM,YAAY;;;;;;;;CAIjB,CAAC;AAEF,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAE1B,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,KAAK,mBAAmB,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAU3C,QAAA,MAAM,YAAY;;;;;;;;;CAIjB,CAAC;AAEF,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -3,7 +3,7 @@ import { Event, Integration } from '@sentry/types';
3
3
  interface BreadcrumbsOptions {
4
4
  console: boolean;
5
5
  dom: boolean | {
6
- serializeAttribute: string;
6
+ serializeAttribute: string | string[];
7
7
  };
8
8
  fetch: boolean;
9
9
  history: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/integrations/breadcrumbs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAY,MAAM,eAAe,CAAC;AAU7D,YAAY;AACZ,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,GAAG;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAiB;IAEzC;;OAEG;IACI,IAAI,EAAE,MAAM,CAAkB;IAErC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C;;OAEG;gBACgB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC;IAYxD;;OAEG;IACI,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAiB9C;;;;;;;OAOG;IACI,SAAS,IAAI,IAAI;IA2CxB;;OAEG;IAEH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IAEH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IAEH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IAEH,OAAO,CAAC,gBAAgB;IA0CxB;;OAEG;IAEH,OAAO,CAAC,kBAAkB;CA8B3B"}
1
+ {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/integrations/breadcrumbs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAY,MAAM,eAAe,CAAC;AAU7D,YAAY;AACZ,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,GAAG;QAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IACzD,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAiB;IAEzC;;OAEG;IACI,IAAI,EAAE,MAAM,CAAkB;IAErC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C;;OAEG;gBACgB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC;IAYxD;;OAEG;IACI,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAiB9C;;;;;;;OAOG;IACI,SAAS,IAAI,IAAI;IA2CxB;;OAEG;IAEH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IAEH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IAEH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IAEH,OAAO,CAAC,gBAAgB;IA0CxB;;OAEG;IAEH,OAAO,CAAC,kBAAkB;CA8B3B"}
@@ -141,12 +141,15 @@ var Breadcrumbs = /** @class */ (function () {
141
141
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
142
142
  Breadcrumbs.prototype._domBreadcrumb = function (handlerData) {
143
143
  var target;
144
- var keyAttr = typeof this._options.dom === 'object' ? this._options.dom.serializeAttribute : undefined;
144
+ var keyAttrs = typeof this._options.dom === 'object' ? this._options.dom.serializeAttribute : undefined;
145
+ if (typeof keyAttrs === 'string') {
146
+ keyAttrs = [keyAttrs];
147
+ }
145
148
  // Accessing event.target can throw (see getsentry/raven-js#838, #768)
146
149
  try {
147
150
  target = handlerData.event.target
148
- ? htmlTreeAsString(handlerData.event.target, keyAttr)
149
- : htmlTreeAsString(handlerData.event, keyAttr);
151
+ ? htmlTreeAsString(handlerData.event.target, keyAttrs)
152
+ : htmlTreeAsString(handlerData.event, keyAttrs);
150
153
  }
151
154
  catch (e) {
152
155
  target = '<unknown>';
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.js","sourceRoot":"","sources":["../../src/integrations/breadcrumbs.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport { Event, Integration, Severity } from '@sentry/types';\nimport {\n addInstrumentationHandler,\n getEventDescription,\n getGlobalObject,\n htmlTreeAsString,\n parseUrl,\n safeJoin,\n} from '@sentry/utils';\n\n/** JSDoc */\ninterface BreadcrumbsOptions {\n console: boolean;\n dom: boolean | { serializeAttribute: string };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nexport class Breadcrumbs implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'Breadcrumbs';\n\n /**\n * @inheritDoc\n */\n public name: string = Breadcrumbs.id;\n\n /** JSDoc */\n private readonly _options: BreadcrumbsOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<BreadcrumbsOptions>) {\n this._options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n }\n\n /**\n * Create a breadcrumb of `sentry` from the events themselves\n */\n public addSentryBreadcrumb(event: Event): void {\n if (!this._options.sentry) {\n return;\n }\n getCurrentHub().addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n }\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n public setupOnce(): void {\n if (this._options.console) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._consoleBreadcrumb(...args);\n },\n type: 'console',\n });\n }\n if (this._options.dom) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._domBreadcrumb(...args);\n },\n type: 'dom',\n });\n }\n if (this._options.xhr) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._xhrBreadcrumb(...args);\n },\n type: 'xhr',\n });\n }\n if (this._options.fetch) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._fetchBreadcrumb(...args);\n },\n type: 'fetch',\n });\n }\n if (this._options.history) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._historyBreadcrumb(...args);\n },\n type: 'history',\n });\n }\n }\n\n /**\n * Creates breadcrumbs from console API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _consoleBreadcrumb(handlerData: { [key: string]: any }): void {\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: Severity.fromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n getCurrentHub().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n }\n\n /**\n * Creates breadcrumbs from DOM API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _domBreadcrumb(handlerData: { [key: string]: any }): void {\n let target;\n const keyAttr = typeof this._options.dom === 'object' ? this._options.dom.serializeAttribute : undefined;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = handlerData.event.target\n ? htmlTreeAsString(handlerData.event.target as Node, keyAttr)\n : htmlTreeAsString((handlerData.event as unknown) as Node, keyAttr);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n getCurrentHub().addBreadcrumb(\n {\n category: `ui.${handlerData.name}`,\n message: target,\n },\n {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n },\n );\n }\n\n /**\n * Creates breadcrumbs from XHR API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _xhrBreadcrumb(handlerData: { [key: string]: any }): void {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};\n\n getCurrentHub().addBreadcrumb(\n {\n category: 'xhr',\n data: {\n method,\n url,\n status_code,\n },\n type: 'http',\n },\n {\n xhr: handlerData.xhr,\n input: body,\n },\n );\n\n return;\n }\n }\n\n /**\n * Creates breadcrumbs from fetch API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fetchBreadcrumb(handlerData: { [key: string]: any }): void {\n // We only capture complete fetch requests\n if (!handlerData.endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: handlerData.fetchData,\n level: Severity.Error,\n type: 'http',\n },\n {\n data: handlerData.error,\n input: handlerData.args,\n },\n );\n } else {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: {\n ...handlerData.fetchData,\n status_code: handlerData.response.status,\n },\n type: 'http',\n },\n {\n input: handlerData.args,\n response: handlerData.response,\n },\n );\n }\n }\n\n /**\n * Creates breadcrumbs from history API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _historyBreadcrumb(handlerData: { [key: string]: any }): void {\n const global = getGlobalObject<Window>();\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(global.location.href);\n let parsedFrom = parseUrl(from);\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n getCurrentHub().addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"breadcrumbs.js","sourceRoot":"","sources":["../../src/integrations/breadcrumbs.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport { Event, Integration, Severity } from '@sentry/types';\nimport {\n addInstrumentationHandler,\n getEventDescription,\n getGlobalObject,\n htmlTreeAsString,\n parseUrl,\n safeJoin,\n} from '@sentry/utils';\n\n/** JSDoc */\ninterface BreadcrumbsOptions {\n console: boolean;\n dom: boolean | { serializeAttribute: string | string[] };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nexport class Breadcrumbs implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'Breadcrumbs';\n\n /**\n * @inheritDoc\n */\n public name: string = Breadcrumbs.id;\n\n /** JSDoc */\n private readonly _options: BreadcrumbsOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<BreadcrumbsOptions>) {\n this._options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n }\n\n /**\n * Create a breadcrumb of `sentry` from the events themselves\n */\n public addSentryBreadcrumb(event: Event): void {\n if (!this._options.sentry) {\n return;\n }\n getCurrentHub().addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n }\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n public setupOnce(): void {\n if (this._options.console) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._consoleBreadcrumb(...args);\n },\n type: 'console',\n });\n }\n if (this._options.dom) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._domBreadcrumb(...args);\n },\n type: 'dom',\n });\n }\n if (this._options.xhr) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._xhrBreadcrumb(...args);\n },\n type: 'xhr',\n });\n }\n if (this._options.fetch) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._fetchBreadcrumb(...args);\n },\n type: 'fetch',\n });\n }\n if (this._options.history) {\n addInstrumentationHandler({\n callback: (...args) => {\n this._historyBreadcrumb(...args);\n },\n type: 'history',\n });\n }\n }\n\n /**\n * Creates breadcrumbs from console API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _consoleBreadcrumb(handlerData: { [key: string]: any }): void {\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: Severity.fromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n getCurrentHub().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n }\n\n /**\n * Creates breadcrumbs from DOM API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _domBreadcrumb(handlerData: { [key: string]: any }): void {\n let target;\n let keyAttrs = typeof this._options.dom === 'object' ? this._options.dom.serializeAttribute : undefined;\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = handlerData.event.target\n ? htmlTreeAsString(handlerData.event.target as Node, keyAttrs)\n : htmlTreeAsString((handlerData.event as unknown) as Node, keyAttrs);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n getCurrentHub().addBreadcrumb(\n {\n category: `ui.${handlerData.name}`,\n message: target,\n },\n {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n },\n );\n }\n\n /**\n * Creates breadcrumbs from XHR API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _xhrBreadcrumb(handlerData: { [key: string]: any }): void {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};\n\n getCurrentHub().addBreadcrumb(\n {\n category: 'xhr',\n data: {\n method,\n url,\n status_code,\n },\n type: 'http',\n },\n {\n xhr: handlerData.xhr,\n input: body,\n },\n );\n\n return;\n }\n }\n\n /**\n * Creates breadcrumbs from fetch API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _fetchBreadcrumb(handlerData: { [key: string]: any }): void {\n // We only capture complete fetch requests\n if (!handlerData.endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: handlerData.fetchData,\n level: Severity.Error,\n type: 'http',\n },\n {\n data: handlerData.error,\n input: handlerData.args,\n },\n );\n } else {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: {\n ...handlerData.fetchData,\n status_code: handlerData.response.status,\n },\n type: 'http',\n },\n {\n input: handlerData.args,\n response: handlerData.response,\n },\n );\n }\n }\n\n /**\n * Creates breadcrumbs from history API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _historyBreadcrumb(handlerData: { [key: string]: any }): void {\n const global = getGlobalObject<Window>();\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(global.location.href);\n let parsedFrom = parseUrl(from);\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n getCurrentHub().addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n }\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import { EventProcessor, Hub, Integration } from '@sentry/types';
2
+ /** Deduplication filter */
3
+ export declare class Dedupe implements Integration {
4
+ /**
5
+ * @inheritDoc
6
+ */
7
+ static id: string;
8
+ /**
9
+ * @inheritDoc
10
+ */
11
+ name: string;
12
+ /**
13
+ * @inheritDoc
14
+ */
15
+ private _previousEvent?;
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void;
20
+ /** JSDoc */
21
+ private _shouldDropEvent;
22
+ /** JSDoc */
23
+ private _isSameMessageEvent;
24
+ /** JSDoc */
25
+ private _getFramesFromEvent;
26
+ /** JSDoc */
27
+ private _isSameStacktrace;
28
+ /** JSDoc */
29
+ private _getExceptionFromEvent;
30
+ /** JSDoc */
31
+ private _isSameExceptionEvent;
32
+ /** JSDoc */
33
+ private _isSameFingerprint;
34
+ }
35
+ //# sourceMappingURL=dedupe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedupe.d.ts","sourceRoot":"","sources":["../../src/integrations/dedupe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,cAAc,EAAa,GAAG,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;AAE/F,2BAA2B;AAC3B,qBAAa,MAAO,YAAW,WAAW;IACxC;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAY;IAEpC;;OAEG;IACI,IAAI,EAAE,MAAM,CAAa;IAEhC;;OAEG;IACH,OAAO,CAAC,cAAc,CAAC,CAAQ;IAE/B;;OAEG;IACI,SAAS,CAAC,uBAAuB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,GAAG,IAAI;IAmB7G,YAAY;IACZ,OAAO,CAAC,gBAAgB;IAgBxB,YAAY;IACZ,OAAO,CAAC,mBAAmB;IA6B3B,YAAY;IACZ,OAAO,CAAC,mBAAmB;IAgB3B,YAAY;IACZ,OAAO,CAAC,iBAAiB;IAwCzB,YAAY;IACZ,OAAO,CAAC,sBAAsB;IAI9B,YAAY;IACZ,OAAO,CAAC,qBAAqB;IAuB7B,YAAY;IACZ,OAAO,CAAC,kBAAkB;CAwB3B"}
@@ -0,0 +1,165 @@
1
+ /** Deduplication filter */
2
+ var Dedupe = /** @class */ (function () {
3
+ function Dedupe() {
4
+ /**
5
+ * @inheritDoc
6
+ */
7
+ this.name = Dedupe.id;
8
+ }
9
+ /**
10
+ * @inheritDoc
11
+ */
12
+ Dedupe.prototype.setupOnce = function (addGlobalEventProcessor, getCurrentHub) {
13
+ addGlobalEventProcessor(function (currentEvent) {
14
+ var self = getCurrentHub().getIntegration(Dedupe);
15
+ if (self) {
16
+ // Juuust in case something goes wrong
17
+ try {
18
+ if (self._shouldDropEvent(currentEvent, self._previousEvent)) {
19
+ return null;
20
+ }
21
+ }
22
+ catch (_oO) {
23
+ return (self._previousEvent = currentEvent);
24
+ }
25
+ return (self._previousEvent = currentEvent);
26
+ }
27
+ return currentEvent;
28
+ });
29
+ };
30
+ /** JSDoc */
31
+ Dedupe.prototype._shouldDropEvent = function (currentEvent, previousEvent) {
32
+ if (!previousEvent) {
33
+ return false;
34
+ }
35
+ if (this._isSameMessageEvent(currentEvent, previousEvent)) {
36
+ return true;
37
+ }
38
+ if (this._isSameExceptionEvent(currentEvent, previousEvent)) {
39
+ return true;
40
+ }
41
+ return false;
42
+ };
43
+ /** JSDoc */
44
+ Dedupe.prototype._isSameMessageEvent = function (currentEvent, previousEvent) {
45
+ var currentMessage = currentEvent.message;
46
+ var previousMessage = previousEvent.message;
47
+ // If neither event has a message property, they were both exceptions, so bail out
48
+ if (!currentMessage && !previousMessage) {
49
+ return false;
50
+ }
51
+ // If only one event has a stacktrace, but not the other one, they are not the same
52
+ if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {
53
+ return false;
54
+ }
55
+ if (currentMessage !== previousMessage) {
56
+ return false;
57
+ }
58
+ if (!this._isSameFingerprint(currentEvent, previousEvent)) {
59
+ return false;
60
+ }
61
+ if (!this._isSameStacktrace(currentEvent, previousEvent)) {
62
+ return false;
63
+ }
64
+ return true;
65
+ };
66
+ /** JSDoc */
67
+ Dedupe.prototype._getFramesFromEvent = function (event) {
68
+ var exception = event.exception;
69
+ if (exception) {
70
+ try {
71
+ // @ts-ignore Object could be undefined
72
+ return exception.values[0].stacktrace.frames;
73
+ }
74
+ catch (_oO) {
75
+ return undefined;
76
+ }
77
+ }
78
+ else if (event.stacktrace) {
79
+ return event.stacktrace.frames;
80
+ }
81
+ return undefined;
82
+ };
83
+ /** JSDoc */
84
+ Dedupe.prototype._isSameStacktrace = function (currentEvent, previousEvent) {
85
+ var currentFrames = this._getFramesFromEvent(currentEvent);
86
+ var previousFrames = this._getFramesFromEvent(previousEvent);
87
+ // If neither event has a stacktrace, they are assumed to be the same
88
+ if (!currentFrames && !previousFrames) {
89
+ return true;
90
+ }
91
+ // If only one event has a stacktrace, but not the other one, they are not the same
92
+ if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {
93
+ return false;
94
+ }
95
+ currentFrames = currentFrames;
96
+ previousFrames = previousFrames;
97
+ // If number of frames differ, they are not the same
98
+ if (previousFrames.length !== currentFrames.length) {
99
+ return false;
100
+ }
101
+ // Otherwise, compare the two
102
+ for (var i = 0; i < previousFrames.length; i++) {
103
+ var frameA = previousFrames[i];
104
+ var frameB = currentFrames[i];
105
+ if (frameA.filename !== frameB.filename ||
106
+ frameA.lineno !== frameB.lineno ||
107
+ frameA.colno !== frameB.colno ||
108
+ frameA.function !== frameB.function) {
109
+ return false;
110
+ }
111
+ }
112
+ return true;
113
+ };
114
+ /** JSDoc */
115
+ Dedupe.prototype._getExceptionFromEvent = function (event) {
116
+ return event.exception && event.exception.values && event.exception.values[0];
117
+ };
118
+ /** JSDoc */
119
+ Dedupe.prototype._isSameExceptionEvent = function (currentEvent, previousEvent) {
120
+ var previousException = this._getExceptionFromEvent(previousEvent);
121
+ var currentException = this._getExceptionFromEvent(currentEvent);
122
+ if (!previousException || !currentException) {
123
+ return false;
124
+ }
125
+ if (previousException.type !== currentException.type || previousException.value !== currentException.value) {
126
+ return false;
127
+ }
128
+ if (!this._isSameFingerprint(currentEvent, previousEvent)) {
129
+ return false;
130
+ }
131
+ if (!this._isSameStacktrace(currentEvent, previousEvent)) {
132
+ return false;
133
+ }
134
+ return true;
135
+ };
136
+ /** JSDoc */
137
+ Dedupe.prototype._isSameFingerprint = function (currentEvent, previousEvent) {
138
+ var currentFingerprint = currentEvent.fingerprint;
139
+ var previousFingerprint = previousEvent.fingerprint;
140
+ // If neither event has a fingerprint, they are assumed to be the same
141
+ if (!currentFingerprint && !previousFingerprint) {
142
+ return true;
143
+ }
144
+ // If only one event has a fingerprint, but not the other one, they are not the same
145
+ if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {
146
+ return false;
147
+ }
148
+ currentFingerprint = currentFingerprint;
149
+ previousFingerprint = previousFingerprint;
150
+ // Otherwise, compare the two
151
+ try {
152
+ return !!(currentFingerprint.join('') === previousFingerprint.join(''));
153
+ }
154
+ catch (_oO) {
155
+ return false;
156
+ }
157
+ };
158
+ /**
159
+ * @inheritDoc
160
+ */
161
+ Dedupe.id = 'Dedupe';
162
+ return Dedupe;
163
+ }());
164
+ export { Dedupe };
165
+ //# sourceMappingURL=dedupe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedupe.js","sourceRoot":"","sources":["../../src/integrations/dedupe.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event, EventProcessor, Exception, Hub, Integration, StackFrame } from '@sentry/types';\n\n/** Deduplication filter */\nexport class Dedupe implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'Dedupe';\n\n /**\n * @inheritDoc\n */\n public name: string = Dedupe.id;\n\n /**\n * @inheritDoc\n */\n private _previousEvent?: Event;\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {\n addGlobalEventProcessor((currentEvent: Event) => {\n const self = getCurrentHub().getIntegration(Dedupe);\n if (self) {\n // Juuust in case something goes wrong\n try {\n if (self._shouldDropEvent(currentEvent, self._previousEvent)) {\n return null;\n }\n } catch (_oO) {\n return (self._previousEvent = currentEvent);\n }\n\n return (self._previousEvent = currentEvent);\n }\n return currentEvent;\n });\n }\n\n /** JSDoc */\n private _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n if (!previousEvent) {\n return false;\n }\n\n if (this._isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (this._isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n }\n\n /** JSDoc */\n private _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!this._isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!this._isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n }\n\n /** JSDoc */\n private _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n const exception = event.exception;\n\n if (exception) {\n try {\n // @ts-ignore Object could be undefined\n return exception.values[0].stacktrace.frames;\n } catch (_oO) {\n return undefined;\n }\n } else if (event.stacktrace) {\n return event.stacktrace.frames;\n }\n return undefined;\n }\n\n /** JSDoc */\n private _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n let currentFrames = this._getFramesFromEvent(currentEvent);\n let previousFrames = this._getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames as StackFrame[];\n previousFrames = previousFrames as StackFrame[];\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n const frameA = previousFrames[i];\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /** JSDoc */\n private _getExceptionFromEvent(event: Event): Exception | undefined {\n return event.exception && event.exception.values && event.exception.values[0];\n }\n\n /** JSDoc */\n private _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n const previousException = this._getExceptionFromEvent(previousEvent);\n const currentException = this._getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!this._isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!this._isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n }\n\n /** JSDoc */\n private _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint as string[];\n previousFingerprint = previousFingerprint as string[];\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"globalhandlers.d.ts","sourceRoot":"","sources":["../../src/integrations/globalhandlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,WAAW,EAAuB,MAAM,eAAe,CAAC;AAcxE,YAAY;AACZ,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,sBAAsB;AACtB,qBAAa,cAAe,YAAW,WAAW;IAChD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAoB;IAE5C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAqB;IAExC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,YAAY;IACZ,OAAO,CAAC,wBAAwB,CAAkB;IAElD,YAAY;IACZ,OAAO,CAAC,qCAAqC,CAAkB;IAE/D,YAAY;gBACO,OAAO,CAAC,EAAE,0BAA0B;IAOvD;;OAEG;IACI,SAAS,IAAI,IAAI;IAcxB,YAAY;IACZ,OAAO,CAAC,4BAA4B;IA6CpC,YAAY;IACZ,OAAO,CAAC,yCAAyC;IAgEjD;;OAEG;IAEH,OAAO,CAAC,2BAA2B;IA6BnC;;;;;OAKG;IACH,OAAO,CAAC,gCAAgC;IAcxC,YAAY;IAEZ,OAAO,CAAC,6BAA6B;CAuBtC"}
1
+ {"version":3,"file":"globalhandlers.d.ts","sourceRoot":"","sources":["../../src/integrations/globalhandlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,WAAW,EAAuB,MAAM,eAAe,CAAC;AAcxE,YAAY;AACZ,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,sBAAsB;AACtB,qBAAa,cAAe,YAAW,WAAW;IAChD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAoB;IAE5C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAqB;IAExC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,YAAY;IACZ,OAAO,CAAC,wBAAwB,CAAkB;IAElD,YAAY;IACZ,OAAO,CAAC,qCAAqC,CAAkB;IAE/D,YAAY;gBACO,OAAO,CAAC,EAAE,0BAA0B;IAOvD;;OAEG;IACI,SAAS,IAAI,IAAI;IAcxB,YAAY;IACZ,OAAO,CAAC,4BAA4B;IA8CpC,YAAY;IACZ,OAAO,CAAC,yCAAyC;IAgEjD;;OAEG;IAEH,OAAO,CAAC,2BAA2B;IA2BnC;;;;;OAKG;IACH,OAAO,CAAC,gCAAgC;IAcxC,YAAY;IAEZ,OAAO,CAAC,6BAA6B;CAuBtC"}
@@ -50,9 +50,9 @@ var GlobalHandlers = /** @class */ (function () {
50
50
  return;
51
51
  }
52
52
  var client = currentHub.getClient();
53
- var event = isPrimitive(error)
53
+ var event = error === undefined && isString(data.msg)
54
54
  ? _this._eventFromIncompleteOnError(data.msg, data.url, data.line, data.column)
55
- : _this._enhanceEventWithInitialFrame(eventFromUnknownInput(error, undefined, {
55
+ : _this._enhanceEventWithInitialFrame(eventFromUnknownInput(error || data.msg, undefined, {
56
56
  attachStacktrace: client && client.getOptions().attachStacktrace,
57
57
  rejection: false,
58
58
  }), data.url, data.line, data.column);
@@ -133,12 +133,10 @@ var GlobalHandlers = /** @class */ (function () {
133
133
  // If 'message' is ErrorEvent, get real message from inside
134
134
  var message = isErrorEvent(msg) ? msg.message : msg;
135
135
  var name;
136
- if (isString(message)) {
137
- var groups = message.match(ERROR_TYPES_RE);
138
- if (groups) {
139
- name = groups[1];
140
- message = groups[2];
141
- }
136
+ var groups = message.match(ERROR_TYPES_RE);
137
+ if (groups) {
138
+ name = groups[1];
139
+ message = groups[2];
142
140
  }
143
141
  var event = {
144
142
  exception: {