@sentry/browser 6.16.1 → 6.17.0-beta.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 (119) hide show
  1. package/build/bundle.es6.js +1255 -1375
  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 +1292 -1443
  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/backend.d.ts +2 -2
  10. package/dist/backend.d.ts.map +1 -1
  11. package/dist/backend.js +1 -2
  12. package/dist/backend.js.map +1 -1
  13. package/dist/eventbuilder.d.ts +2 -2
  14. package/dist/eventbuilder.d.ts.map +1 -1
  15. package/dist/eventbuilder.js +4 -5
  16. package/dist/eventbuilder.js.map +1 -1
  17. package/dist/exports.d.ts +1 -1
  18. package/dist/exports.d.ts.map +1 -1
  19. package/dist/exports.js +0 -3
  20. package/dist/exports.js.map +1 -1
  21. package/dist/helpers.d.ts.map +1 -1
  22. package/dist/helpers.js +26 -37
  23. package/dist/helpers.js.map +1 -1
  24. package/dist/integrations/breadcrumbs.d.ts +0 -20
  25. package/dist/integrations/breadcrumbs.d.ts.map +1 -1
  26. package/dist/integrations/breadcrumbs.js +132 -174
  27. package/dist/integrations/breadcrumbs.js.map +1 -1
  28. package/dist/integrations/dedupe.d.ts +0 -14
  29. package/dist/integrations/dedupe.d.ts.map +1 -1
  30. package/dist/integrations/dedupe.js +126 -126
  31. package/dist/integrations/dedupe.js.map +1 -1
  32. package/dist/integrations/globalhandlers.d.ts +7 -25
  33. package/dist/integrations/globalhandlers.d.ts.map +1 -1
  34. package/dist/integrations/globalhandlers.js +176 -169
  35. package/dist/integrations/globalhandlers.js.map +1 -1
  36. package/dist/integrations/linkederrors.d.ts +15 -13
  37. package/dist/integrations/linkederrors.d.ts.map +1 -1
  38. package/dist/integrations/linkederrors.js +26 -28
  39. package/dist/integrations/linkederrors.js.map +1 -1
  40. package/dist/integrations/trycatch.d.ts +0 -8
  41. package/dist/integrations/trycatch.d.ts.map +1 -1
  42. package/dist/integrations/trycatch.js +154 -153
  43. package/dist/integrations/trycatch.js.map +1 -1
  44. package/dist/integrations/useragent.js +2 -3
  45. package/dist/integrations/useragent.js.map +1 -1
  46. package/dist/sdk.d.ts.map +1 -1
  47. package/dist/sdk.js +23 -19
  48. package/dist/sdk.js.map +1 -1
  49. package/dist/transports/base.d.ts +9 -4
  50. package/dist/transports/base.d.ts.map +1 -1
  51. package/dist/transports/base.js +23 -19
  52. package/dist/transports/base.js.map +1 -1
  53. package/dist/transports/fetch.d.ts +2 -10
  54. package/dist/transports/fetch.d.ts.map +1 -1
  55. package/dist/transports/fetch.js +3 -17
  56. package/dist/transports/fetch.js.map +1 -1
  57. package/dist/transports/utils.d.ts.map +1 -1
  58. package/dist/transports/utils.js +7 -5
  59. package/dist/transports/utils.js.map +1 -1
  60. package/dist/transports/xhr.d.ts +2 -10
  61. package/dist/transports/xhr.d.ts.map +1 -1
  62. package/dist/transports/xhr.js +3 -17
  63. package/dist/transports/xhr.js.map +1 -1
  64. package/esm/backend.d.ts +2 -2
  65. package/esm/backend.d.ts.map +1 -1
  66. package/esm/backend.js +1 -2
  67. package/esm/backend.js.map +1 -1
  68. package/esm/eventbuilder.d.ts +2 -2
  69. package/esm/eventbuilder.d.ts.map +1 -1
  70. package/esm/eventbuilder.js +5 -6
  71. package/esm/eventbuilder.js.map +1 -1
  72. package/esm/exports.d.ts +1 -1
  73. package/esm/exports.d.ts.map +1 -1
  74. package/esm/exports.js +0 -1
  75. package/esm/exports.js.map +1 -1
  76. package/esm/helpers.d.ts.map +1 -1
  77. package/esm/helpers.js +28 -39
  78. package/esm/helpers.js.map +1 -1
  79. package/esm/integrations/breadcrumbs.d.ts +0 -20
  80. package/esm/integrations/breadcrumbs.d.ts.map +1 -1
  81. package/esm/integrations/breadcrumbs.js +134 -176
  82. package/esm/integrations/breadcrumbs.js.map +1 -1
  83. package/esm/integrations/dedupe.d.ts +0 -14
  84. package/esm/integrations/dedupe.d.ts.map +1 -1
  85. package/esm/integrations/dedupe.js +126 -126
  86. package/esm/integrations/dedupe.js.map +1 -1
  87. package/esm/integrations/globalhandlers.d.ts +7 -25
  88. package/esm/integrations/globalhandlers.d.ts.map +1 -1
  89. package/esm/integrations/globalhandlers.js +178 -171
  90. package/esm/integrations/globalhandlers.js.map +1 -1
  91. package/esm/integrations/linkederrors.d.ts +15 -13
  92. package/esm/integrations/linkederrors.d.ts.map +1 -1
  93. package/esm/integrations/linkederrors.js +24 -28
  94. package/esm/integrations/linkederrors.js.map +1 -1
  95. package/esm/integrations/trycatch.d.ts +0 -8
  96. package/esm/integrations/trycatch.d.ts.map +1 -1
  97. package/esm/integrations/trycatch.js +155 -154
  98. package/esm/integrations/trycatch.js.map +1 -1
  99. package/esm/integrations/useragent.js +2 -3
  100. package/esm/integrations/useragent.js.map +1 -1
  101. package/esm/sdk.d.ts.map +1 -1
  102. package/esm/sdk.js +24 -20
  103. package/esm/sdk.js.map +1 -1
  104. package/esm/transports/base.d.ts +9 -4
  105. package/esm/transports/base.d.ts.map +1 -1
  106. package/esm/transports/base.js +25 -21
  107. package/esm/transports/base.js.map +1 -1
  108. package/esm/transports/fetch.d.ts +2 -10
  109. package/esm/transports/fetch.d.ts.map +1 -1
  110. package/esm/transports/fetch.js +3 -17
  111. package/esm/transports/fetch.js.map +1 -1
  112. package/esm/transports/utils.d.ts.map +1 -1
  113. package/esm/transports/utils.js +8 -6
  114. package/esm/transports/utils.js.map +1 -1
  115. package/esm/transports/xhr.d.ts +2 -10
  116. package/esm/transports/xhr.d.ts.map +1 -1
  117. package/esm/transports/xhr.js +3 -17
  118. package/esm/transports/xhr.js.map +1 -1
  119. package/package.json +4 -5
@@ -1,5 +1,5 @@
1
1
  import { __assign } from "tslib";
2
- import { fill, getFunctionName, getGlobalObject } from '@sentry/utils';
2
+ import { fill, getFunctionName, getGlobalObject, getOriginalFunction } from '@sentry/utils';
3
3
  import { wrap } from '../helpers';
4
4
  var DEFAULT_EVENT_TARGET = [
5
5
  'EventTarget',
@@ -51,180 +51,181 @@ var TryCatch = /** @class */ (function () {
51
51
  TryCatch.prototype.setupOnce = function () {
52
52
  var global = getGlobalObject();
53
53
  if (this._options.setTimeout) {
54
- fill(global, 'setTimeout', this._wrapTimeFunction.bind(this));
54
+ fill(global, 'setTimeout', _wrapTimeFunction);
55
55
  }
56
56
  if (this._options.setInterval) {
57
- fill(global, 'setInterval', this._wrapTimeFunction.bind(this));
57
+ fill(global, 'setInterval', _wrapTimeFunction);
58
58
  }
59
59
  if (this._options.requestAnimationFrame) {
60
- fill(global, 'requestAnimationFrame', this._wrapRAF.bind(this));
60
+ fill(global, 'requestAnimationFrame', _wrapRAF);
61
61
  }
62
62
  if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {
63
- fill(XMLHttpRequest.prototype, 'send', this._wrapXHR.bind(this));
63
+ fill(XMLHttpRequest.prototype, 'send', _wrapXHR);
64
64
  }
65
- if (this._options.eventTarget) {
66
- var eventTarget = Array.isArray(this._options.eventTarget) ? this._options.eventTarget : DEFAULT_EVENT_TARGET;
67
- eventTarget.forEach(this._wrapEventTarget.bind(this));
65
+ var eventTargetOption = this._options.eventTarget;
66
+ if (eventTargetOption) {
67
+ var eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;
68
+ eventTarget.forEach(_wrapEventTarget);
68
69
  }
69
70
  };
70
- /** JSDoc */
71
- TryCatch.prototype._wrapTimeFunction = function (original) {
72
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
- return function () {
74
- var args = [];
75
- for (var _i = 0; _i < arguments.length; _i++) {
76
- args[_i] = arguments[_i];
77
- }
78
- var originalCallback = args[0];
79
- args[0] = wrap(originalCallback, {
80
- mechanism: {
81
- data: { function: getFunctionName(original) },
82
- handled: true,
83
- type: 'instrument',
84
- },
85
- });
86
- return original.apply(this, args);
87
- };
71
+ /**
72
+ * @inheritDoc
73
+ */
74
+ TryCatch.id = 'TryCatch';
75
+ return TryCatch;
76
+ }());
77
+ export { TryCatch };
78
+ /** JSDoc */
79
+ function _wrapTimeFunction(original) {
80
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
+ return function () {
82
+ var args = [];
83
+ for (var _i = 0; _i < arguments.length; _i++) {
84
+ args[_i] = arguments[_i];
85
+ }
86
+ var originalCallback = args[0];
87
+ args[0] = wrap(originalCallback, {
88
+ mechanism: {
89
+ data: { function: getFunctionName(original) },
90
+ handled: true,
91
+ type: 'instrument',
92
+ },
93
+ });
94
+ return original.apply(this, args);
88
95
  };
89
- /** JSDoc */
96
+ }
97
+ /** JSDoc */
98
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
+ function _wrapRAF(original) {
90
100
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
91
- TryCatch.prototype._wrapRAF = function (original) {
92
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
- return function (callback) {
94
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
95
- return original.call(this, wrap(callback, {
96
- mechanism: {
97
- data: {
98
- function: 'requestAnimationFrame',
99
- handler: getFunctionName(original),
100
- },
101
- handled: true,
102
- type: 'instrument',
101
+ return function (callback) {
102
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
103
+ return original.call(this, wrap(callback, {
104
+ mechanism: {
105
+ data: {
106
+ function: 'requestAnimationFrame',
107
+ handler: getFunctionName(original),
103
108
  },
104
- }));
105
- };
109
+ handled: true,
110
+ type: 'instrument',
111
+ },
112
+ }));
106
113
  };
107
- /** JSDoc */
108
- TryCatch.prototype._wrapEventTarget = function (target) {
109
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
- var global = getGlobalObject();
111
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
112
- var proto = global[target] && global[target].prototype;
113
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins
114
- if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {
115
- return;
114
+ }
115
+ /** JSDoc */
116
+ function _wrapXHR(originalSend) {
117
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+ return function () {
119
+ var args = [];
120
+ for (var _i = 0; _i < arguments.length; _i++) {
121
+ args[_i] = arguments[_i];
116
122
  }
117
- fill(proto, 'addEventListener', function (original) {
118
- return function (eventName, fn, options) {
119
- try {
120
- if (typeof fn.handleEvent === 'function') {
121
- fn.handleEvent = wrap(fn.handleEvent.bind(fn), {
122
- mechanism: {
123
- data: {
124
- function: 'handleEvent',
125
- handler: getFunctionName(fn),
126
- target: target,
127
- },
128
- handled: true,
129
- type: 'instrument',
130
- },
131
- });
132
- }
133
- }
134
- catch (err) {
135
- // can sometimes get 'Permission denied to access property "handle Event'
136
- }
137
- return original.call(this, eventName,
123
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
124
+ var xhr = this;
125
+ var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];
126
+ xmlHttpRequestProps.forEach(function (prop) {
127
+ if (prop in xhr && typeof xhr[prop] === 'function') {
138
128
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
- wrap(fn, {
140
- mechanism: {
141
- data: {
142
- function: 'addEventListener',
143
- handler: getFunctionName(fn),
144
- target: target,
129
+ fill(xhr, prop, function (original) {
130
+ var wrapOptions = {
131
+ mechanism: {
132
+ data: {
133
+ function: prop,
134
+ handler: getFunctionName(original),
135
+ },
136
+ handled: true,
137
+ type: 'instrument',
145
138
  },
146
- handled: true,
147
- type: 'instrument',
148
- },
149
- }), options);
150
- };
151
- });
152
- fill(proto, 'removeEventListener', function (originalRemoveEventListener) {
153
- return function (eventName, fn, options) {
154
- var _a;
155
- /**
156
- * There are 2 possible scenarios here:
157
- *
158
- * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified
159
- * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function
160
- * as a pass-through, and call original `removeEventListener` with it.
161
- *
162
- * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using
163
- * our wrapped version of `addEventListener`, which internally calls `wrap` helper.
164
- * This helper "wraps" whole callback inside a try/catch statement, and attached appropriate metadata to it,
165
- * in order for us to make a distinction between wrapped/non-wrapped functions possible.
166
- * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.
167
- *
168
- * When someone adds a handler prior to initialization, and then do it again, but after,
169
- * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible
170
- * to get rid of the initial handler and it'd stick there forever.
171
- */
172
- var wrappedEventHandler = fn;
173
- try {
174
- var originalEventHandler = (_a = wrappedEventHandler) === null || _a === void 0 ? void 0 : _a.__sentry_wrapped__;
175
- if (originalEventHandler) {
176
- originalRemoveEventListener.call(this, eventName, originalEventHandler, options);
139
+ };
140
+ // If Instrument integration has been called before TryCatch, get the name of original function
141
+ var originalFunction = getOriginalFunction(original);
142
+ if (originalFunction) {
143
+ wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);
177
144
  }
178
- }
179
- catch (e) {
180
- // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments
181
- }
182
- return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);
183
- };
145
+ // Otherwise wrap directly
146
+ return wrap(original, wrapOptions);
147
+ });
148
+ }
184
149
  });
150
+ return originalSend.apply(this, args);
185
151
  };
186
- /** JSDoc */
187
- TryCatch.prototype._wrapXHR = function (originalSend) {
188
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
189
- return function () {
190
- var args = [];
191
- for (var _i = 0; _i < arguments.length; _i++) {
192
- args[_i] = arguments[_i];
193
- }
194
- // eslint-disable-next-line @typescript-eslint/no-this-alias
195
- var xhr = this;
196
- var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];
197
- xmlHttpRequestProps.forEach(function (prop) {
198
- if (prop in xhr && typeof xhr[prop] === 'function') {
199
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
200
- fill(xhr, prop, function (original) {
201
- var wrapOptions = {
202
- mechanism: {
203
- data: {
204
- function: prop,
205
- handler: getFunctionName(original),
206
- },
207
- handled: true,
208
- type: 'instrument',
152
+ }
153
+ /** JSDoc */
154
+ function _wrapEventTarget(target) {
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+ var global = getGlobalObject();
157
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
158
+ var proto = global[target] && global[target].prototype;
159
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins
160
+ if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {
161
+ return;
162
+ }
163
+ fill(proto, 'addEventListener', function (original) {
164
+ return function (eventName, fn, options) {
165
+ try {
166
+ if (typeof fn.handleEvent === 'function') {
167
+ fn.handleEvent = wrap(fn.handleEvent.bind(fn), {
168
+ mechanism: {
169
+ data: {
170
+ function: 'handleEvent',
171
+ handler: getFunctionName(fn),
172
+ target: target,
209
173
  },
210
- };
211
- // If Instrument integration has been called before TryCatch, get the name of original function
212
- if (original.__sentry_original__) {
213
- wrapOptions.mechanism.data.handler = getFunctionName(original.__sentry_original__);
214
- }
215
- // Otherwise wrap directly
216
- return wrap(original, wrapOptions);
174
+ handled: true,
175
+ type: 'instrument',
176
+ },
217
177
  });
218
178
  }
219
- });
220
- return originalSend.apply(this, args);
179
+ }
180
+ catch (err) {
181
+ // can sometimes get 'Permission denied to access property "handle Event'
182
+ }
183
+ return original.call(this, eventName,
184
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
185
+ wrap(fn, {
186
+ mechanism: {
187
+ data: {
188
+ function: 'addEventListener',
189
+ handler: getFunctionName(fn),
190
+ target: target,
191
+ },
192
+ handled: true,
193
+ type: 'instrument',
194
+ },
195
+ }), options);
196
+ };
197
+ });
198
+ fill(proto, 'removeEventListener', function (originalRemoveEventListener) {
199
+ return function (eventName, fn, options) {
200
+ /**
201
+ * There are 2 possible scenarios here:
202
+ *
203
+ * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified
204
+ * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function
205
+ * as a pass-through, and call original `removeEventListener` with it.
206
+ *
207
+ * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using
208
+ * our wrapped version of `addEventListener`, which internally calls `wrap` helper.
209
+ * This helper "wraps" whole callback inside a try/catch statement, and attached appropriate metadata to it,
210
+ * in order for us to make a distinction between wrapped/non-wrapped functions possible.
211
+ * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.
212
+ *
213
+ * When someone adds a handler prior to initialization, and then do it again, but after,
214
+ * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible
215
+ * to get rid of the initial handler and it'd stick there forever.
216
+ */
217
+ var wrappedEventHandler = fn;
218
+ try {
219
+ var originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;
220
+ if (originalEventHandler) {
221
+ originalRemoveEventListener.call(this, eventName, originalEventHandler, options);
222
+ }
223
+ }
224
+ catch (e) {
225
+ // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments
226
+ }
227
+ return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);
221
228
  };
222
- };
223
- /**
224
- * @inheritDoc
225
- */
226
- TryCatch.id = 'TryCatch';
227
- return TryCatch;
228
- }());
229
- export { TryCatch };
229
+ });
230
+ }
230
231
  //# sourceMappingURL=trycatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trycatch.js","sourceRoot":"","sources":["../../src/integrations/trycatch.ts"],"names":[],"mappings":"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","sourcesContent":["import { Integration, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getGlobalObject } from '@sentry/utils';\n\nimport { wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\n/** JSDoc */\ninterface TryCatchOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nexport class TryCatch implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'TryCatch';\n\n /**\n * @inheritDoc\n */\n public name: string = TryCatch.id;\n\n /** JSDoc */\n private readonly _options: TryCatchOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<TryCatchOptions>) {\n this._options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n }\n\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n public setupOnce(): void {\n const global = getGlobalObject();\n\n if (this._options.setTimeout) {\n fill(global, 'setTimeout', this._wrapTimeFunction.bind(this));\n }\n\n if (this._options.setInterval) {\n fill(global, 'setInterval', this._wrapTimeFunction.bind(this));\n }\n\n if (this._options.requestAnimationFrame) {\n fill(global, 'requestAnimationFrame', this._wrapRAF.bind(this));\n }\n\n if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n fill(XMLHttpRequest.prototype, 'send', this._wrapXHR.bind(this));\n }\n\n if (this._options.eventTarget) {\n const eventTarget = Array.isArray(this._options.eventTarget) ? this._options.eventTarget : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(this._wrapEventTarget.bind(this));\n }\n }\n\n /** JSDoc */\n private _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function(this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: true,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n }\n\n /** JSDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function(this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.call(\n this,\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n }),\n );\n };\n }\n\n /** JSDoc */\n private _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const global = getGlobalObject() as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = global[target] && global[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function(\n original: () => void,\n ): (eventName: string, fn: EventListenerObject, options?: boolean | AddEventListenerOptions) => void {\n return function(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.call(\n this,\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap((fn as any) as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n }),\n options,\n );\n };\n });\n\n fill(proto, 'removeEventListener', function(\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = (fn as unknown) as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler?.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n });\n }\n\n /** JSDoc */\n private _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function(this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function(original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n if (original.__sentry_original__) {\n wrapOptions.mechanism.data.handler = getFunctionName(original.__sentry_original__);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n }\n}\n"]}
1
+ {"version":3,"file":"trycatch.js","sourceRoot":"","sources":["../../src/integrations/trycatch.ts"],"names":[],"mappings":"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","sourcesContent":["import { Integration, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getGlobalObject, getOriginalFunction } from '@sentry/utils';\n\nimport { wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\n/** JSDoc */\ninterface TryCatchOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nexport class TryCatch implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'TryCatch';\n\n /**\n * @inheritDoc\n */\n public name: string = TryCatch.id;\n\n /** JSDoc */\n private readonly _options: TryCatchOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<TryCatchOptions>) {\n this._options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n }\n\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n public setupOnce(): void {\n const global = getGlobalObject();\n\n if (this._options.setTimeout) {\n fill(global, 'setTimeout', _wrapTimeFunction);\n }\n\n if (this._options.setInterval) {\n fill(global, 'setInterval', _wrapTimeFunction);\n }\n\n if (this._options.requestAnimationFrame) {\n fill(global, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = this._options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n }\n}\n\n/** JSDoc */\nfunction _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function(this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: true,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function(this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.call(\n this,\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n }),\n );\n };\n}\n\n/** JSDoc */\nfunction _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function(this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function(original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\n/** JSDoc */\nfunction _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const global = getGlobalObject() as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = global[target] && global[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function(\n original: () => void,\n ): (eventName: string, fn: EventListenerObject, options?: boolean | AddEventListenerOptions) => void {\n return function(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.call(\n this,\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap((fn as any) as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n }),\n options,\n );\n };\n });\n\n fill(proto, 'removeEventListener', function(\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = (fn as unknown) as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n });\n}\n"]}
@@ -15,17 +15,16 @@ var UserAgent = /** @class */ (function () {
15
15
  */
16
16
  UserAgent.prototype.setupOnce = function () {
17
17
  addGlobalEventProcessor(function (event) {
18
- var _a, _b, _c;
19
18
  if (getCurrentHub().getIntegration(UserAgent)) {
20
19
  // if none of the information we want exists, don't bother
21
20
  if (!global.navigator && !global.location && !global.document) {
22
21
  return event;
23
22
  }
24
23
  // grab as much info as exists and add it to the event
25
- var url = ((_a = event.request) === null || _a === void 0 ? void 0 : _a.url) || ((_b = global.location) === null || _b === void 0 ? void 0 : _b.href);
24
+ var url = (event.request && event.request.url) || (global.location && global.location.href);
26
25
  var referrer = (global.document || {}).referrer;
27
26
  var userAgent = (global.navigator || {}).userAgent;
28
- var headers = __assign(__assign(__assign({}, (_c = event.request) === null || _c === void 0 ? void 0 : _c.headers), (referrer && { Referer: referrer })), (userAgent && { 'User-Agent': userAgent }));
27
+ var headers = __assign(__assign(__assign({}, (event.request && event.request.headers)), (referrer && { Referer: referrer })), (userAgent && { 'User-Agent': userAgent }));
29
28
  var request = __assign(__assign({}, (url && { url: url })), { headers: headers });
30
29
  return __assign(__assign({}, event), { request: request });
31
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useragent.js","sourceRoot":"","sources":["../../src/integrations/useragent.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,IAAM,MAAM,GAAG,eAAe,EAAU,CAAC;AAEzC,gBAAgB;AAChB;IAAA;QAME;;WAEG;QACI,SAAI,GAAW,SAAS,CAAC,EAAE,CAAC;IA8BrC,CAAC;IA5BC;;OAEG;IACI,6BAAS,GAAhB;QACE,uBAAuB,CAAC,UAAC,KAAY;;YACnC,IAAI,aAAa,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBAC7C,0DAA0D;gBAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAC7D,OAAO,KAAK,CAAC;iBACd;gBAED,sDAAsD;gBACtD,IAAM,GAAG,GAAG,OAAA,KAAK,CAAC,OAAO,0CAAE,GAAG,YAAI,MAAM,CAAC,QAAQ,0CAAE,IAAI,CAAA,CAAC;gBAChD,IAAA,2CAAQ,CAA2B;gBACnC,IAAA,8CAAS,CAA4B;gBAE7C,IAAM,OAAO,wCACR,KAAK,CAAC,OAAO,0CAAE,OAAO,GACtB,CAAC,QAAQ,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GACnC,CAAC,SAAS,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAC9C,CAAC;gBACF,IAAM,OAAO,yBAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,KAAA,EAAE,CAAC,KAAE,OAAO,SAAA,GAAE,CAAC;gBAEjD,6BAAY,KAAK,KAAE,OAAO,SAAA,IAAG;aAC9B;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IArCD;;OAEG;IACW,YAAE,GAAW,WAAW,CAAC;IAmCzC,gBAAC;CAAA,AAvCD,IAuCC;SAvCY,SAAS","sourcesContent":["import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, Integration } from '@sentry/types';\nimport { getGlobalObject } from '@sentry/utils';\n\nconst global = getGlobalObject<Window>();\n\n/** UserAgent */\nexport class UserAgent implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'UserAgent';\n\n /**\n * @inheritDoc\n */\n public name: string = UserAgent.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor((event: Event) => {\n if (getCurrentHub().getIntegration(UserAgent)) {\n // if none of the information we want exists, don't bother\n if (!global.navigator && !global.location && !global.document) {\n return event;\n }\n\n // grab as much info as exists and add it to the event\n const url = event.request?.url || global.location?.href;\n const { referrer } = global.document || {};\n const { userAgent } = global.navigator || {};\n\n const headers = {\n ...event.request?.headers,\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...(url && { url }), headers };\n\n return { ...event, request };\n }\n return event;\n });\n }\n}\n"]}
1
+ {"version":3,"file":"useragent.js","sourceRoot":"","sources":["../../src/integrations/useragent.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,IAAM,MAAM,GAAG,eAAe,EAAU,CAAC;AAEzC,gBAAgB;AAChB;IAAA;QAME;;WAEG;QACI,SAAI,GAAW,SAAS,CAAC,EAAE,CAAC;IA8BrC,CAAC;IA5BC;;OAEG;IACI,6BAAS,GAAhB;QACE,uBAAuB,CAAC,UAAC,KAAY;YACnC,IAAI,aAAa,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBAC7C,0DAA0D;gBAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAC7D,OAAO,KAAK,CAAC;iBACd;gBAED,sDAAsD;gBACtD,IAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtF,IAAA,2CAAQ,CAA2B;gBACnC,IAAA,8CAAS,CAA4B;gBAE7C,IAAM,OAAO,kCACR,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GACxC,CAAC,QAAQ,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GACnC,CAAC,SAAS,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAC9C,CAAC;gBACF,IAAM,OAAO,yBAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,KAAA,EAAE,CAAC,KAAE,OAAO,SAAA,GAAE,CAAC;gBAEjD,6BAAY,KAAK,KAAE,OAAO,SAAA,IAAG;aAC9B;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IArCD;;OAEG;IACW,YAAE,GAAW,WAAW,CAAC;IAmCzC,gBAAC;CAAA,AAvCD,IAuCC;SAvCY,SAAS","sourcesContent":["import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, Integration } from '@sentry/types';\nimport { getGlobalObject } from '@sentry/utils';\n\nconst global = getGlobalObject<Window>();\n\n/** UserAgent */\nexport class UserAgent implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'UserAgent';\n\n /**\n * @inheritDoc\n */\n public name: string = UserAgent.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor((event: Event) => {\n if (getCurrentHub().getIntegration(UserAgent)) {\n // if none of the information we want exists, don't bother\n if (!global.navigator && !global.location && !global.document) {\n return event;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (global.location && global.location.href);\n const { referrer } = global.document || {};\n const { userAgent } = global.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...(url && { url }), headers };\n\n return { ...event, request };\n }\n return event;\n });\n }\n}\n"]}
package/esm/sdk.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5F,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAwB,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExG,eAAO,MAAM,mBAAmB,uJAS/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,cAAmB,GAAG,IAAI,CAuBvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAiBxE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAO5D;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAO5D;AAED;;;;;;GAMG;AAEH,wBAAgB,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAEnD"}
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAI5F,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAwB,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExG,eAAO,MAAM,mBAAmB,uJAS/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,cAAmB,GAAG,IAAI,CAuBvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAiBxE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAS5D;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAS5D;AAED;;;;;;GAMG;AAEH,wBAAgB,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAEnD"}
package/esm/sdk.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { __assign } from "tslib";
2
2
  import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';
3
- import { addInstrumentationHandler, getGlobalObject, logger, SyncPromise } from '@sentry/utils';
3
+ import { addInstrumentationHandler, getGlobalObject, isDebugBuild, logger, resolvedSyncPromise } from '@sentry/utils';
4
4
  import { BrowserClient } from './client';
5
5
  import { wrap as internalWrap } from './helpers';
6
6
  import { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';
@@ -149,8 +149,10 @@ export function flush(timeout) {
149
149
  if (client) {
150
150
  return client.flush(timeout);
151
151
  }
152
- logger.warn('Cannot flush events. No client defined.');
153
- return SyncPromise.resolve(false);
152
+ if (isDebugBuild()) {
153
+ logger.warn('Cannot flush events. No client defined.');
154
+ }
155
+ return resolvedSyncPromise(false);
154
156
  }
155
157
  /**
156
158
  * Call `close()` on the current client, if there is one. See {@link Client.close}.
@@ -165,8 +167,10 @@ export function close(timeout) {
165
167
  if (client) {
166
168
  return client.close(timeout);
167
169
  }
168
- logger.warn('Cannot flush events and disable SDK. No client defined.');
169
- return SyncPromise.resolve(false);
170
+ if (isDebugBuild()) {
171
+ logger.warn('Cannot flush events and disable SDK. No client defined.');
172
+ }
173
+ return resolvedSyncPromise(false);
170
174
  }
171
175
  /**
172
176
  * Wrap code within a try/catch block so the SDK is able to capture errors.
@@ -179,6 +183,10 @@ export function close(timeout) {
179
183
  export function wrap(fn) {
180
184
  return internalWrap(fn)();
181
185
  }
186
+ function startSessionOnHub(hub) {
187
+ hub.startSession({ ignoreDuration: true });
188
+ hub.captureSession();
189
+ }
182
190
  /**
183
191
  * Enable automatic Session Tracking for the initial page load.
184
192
  */
@@ -186,7 +194,9 @@ function startSessionTracking() {
186
194
  var window = getGlobalObject();
187
195
  var document = window.document;
188
196
  if (typeof document === 'undefined') {
189
- logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');
197
+ if (isDebugBuild()) {
198
+ logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');
199
+ }
190
200
  return;
191
201
  }
192
202
  var hub = getCurrentHub();
@@ -196,27 +206,21 @@ function startSessionTracking() {
196
206
  // https://github.com/getsentry/sentry-javascript/issues/3207 and
197
207
  // https://github.com/getsentry/sentry-javascript/issues/3234 and
198
208
  // https://github.com/getsentry/sentry-javascript/issues/3278.
199
- if (typeof hub.startSession !== 'function' || typeof hub.captureSession !== 'function') {
209
+ if (!hub.captureSession) {
200
210
  return;
201
211
  }
202
212
  // The session duration for browser sessions does not track a meaningful
203
213
  // concept that can be used as a metric.
204
214
  // Automatically captured sessions are akin to page views, and thus we
205
215
  // discard their duration.
206
- hub.startSession({ ignoreDuration: true });
207
- hub.captureSession();
216
+ startSessionOnHub(hub);
208
217
  // We want to create a session for every navigation as well
209
- addInstrumentationHandler({
210
- callback: function (_a) {
211
- var from = _a.from, to = _a.to;
212
- // Don't create an additional session for the initial route or if the location did not change
213
- if (from === undefined || from === to) {
214
- return;
215
- }
216
- hub.startSession({ ignoreDuration: true });
217
- hub.captureSession();
218
- },
219
- type: 'history',
218
+ addInstrumentationHandler('history', function (_a) {
219
+ var from = _a.from, to = _a.to;
220
+ // Don't create an additional session for the initial route or if the location did not change
221
+ if (!(from === undefined || from === to)) {
222
+ startSessionOnHub(getCurrentHub());
223
+ }
220
224
  });
221
225
  }
222
226
  //# sourceMappingURL=sdk.js.map
package/esm/sdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';\nimport { addInstrumentationHandler, getGlobalObject, logger, SyncPromise } from '@sentry/utils';\n\nimport { BrowserOptions } from './backend';\nimport { BrowserClient } from './client';\nimport { ReportDialogOptions, wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';\n\nexport const defaultIntegrations = [\n new CoreIntegrations.InboundFilters(),\n new CoreIntegrations.FunctionToString(),\n new TryCatch(),\n new Breadcrumbs(),\n new GlobalHandlers(),\n new LinkedErrors(),\n new Dedupe(),\n new UserAgent(),\n];\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n if (options.release === undefined) {\n const window = getGlobalObject<Window>();\n // This supports the variable that sentry-webpack-plugin injects\n if (window.SENTRY_RELEASE && window.SENTRY_RELEASE.id) {\n options.release = window.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n initAndBind(BrowserClient, options);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}): void {\n const hub = getCurrentHub();\n const scope = hub.getScope();\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n options.eventId = hub.lastEventId();\n }\n const client = hub.getClient<BrowserClient>();\n if (client) {\n client.showReportDialog(options);\n }\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n return getCurrentHub().lastEventId();\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function flush(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.flush(timeout);\n }\n logger.warn('Cannot flush events. No client defined.');\n return SyncPromise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function close(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.close(timeout);\n }\n logger.warn('Cannot flush events and disable SDK. No client defined.');\n return SyncPromise.resolve(false);\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n return internalWrap(fn)();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n const window = getGlobalObject<Window>();\n const document = window.document;\n\n if (typeof document === 'undefined') {\n logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n const hub = getCurrentHub();\n\n // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n // pinned at the same version in package.json, but there are edge cases where it's possible. See\n // https://github.com/getsentry/sentry-javascript/issues/3207 and\n // https://github.com/getsentry/sentry-javascript/issues/3234 and\n // https://github.com/getsentry/sentry-javascript/issues/3278.\n if (typeof hub.startSession !== 'function' || typeof hub.captureSession !== 'function') {\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n hub.startSession({ ignoreDuration: true });\n hub.captureSession();\n\n // We want to create a session for every navigation as well\n addInstrumentationHandler({\n callback: ({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (from === undefined || from === to) {\n return;\n }\n hub.startSession({ ignoreDuration: true });\n hub.captureSession();\n },\n type: 'history',\n });\n}\n"]}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';\nimport { Hub } from '@sentry/types';\nimport { addInstrumentationHandler, getGlobalObject, isDebugBuild, logger, resolvedSyncPromise } from '@sentry/utils';\n\nimport { BrowserOptions } from './backend';\nimport { BrowserClient } from './client';\nimport { ReportDialogOptions, wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';\n\nexport const defaultIntegrations = [\n new CoreIntegrations.InboundFilters(),\n new CoreIntegrations.FunctionToString(),\n new TryCatch(),\n new Breadcrumbs(),\n new GlobalHandlers(),\n new LinkedErrors(),\n new Dedupe(),\n new UserAgent(),\n];\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n if (options.release === undefined) {\n const window = getGlobalObject<Window>();\n // This supports the variable that sentry-webpack-plugin injects\n if (window.SENTRY_RELEASE && window.SENTRY_RELEASE.id) {\n options.release = window.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n initAndBind(BrowserClient, options);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}): void {\n const hub = getCurrentHub();\n const scope = hub.getScope();\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n options.eventId = hub.lastEventId();\n }\n const client = hub.getClient<BrowserClient>();\n if (client) {\n client.showReportDialog(options);\n }\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n return getCurrentHub().lastEventId();\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function flush(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.flush(timeout);\n }\n if (isDebugBuild()) {\n logger.warn('Cannot flush events. No client defined.');\n }\n return resolvedSyncPromise(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function close(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.close(timeout);\n }\n if (isDebugBuild()) {\n logger.warn('Cannot flush events and disable SDK. No client defined.');\n }\n return resolvedSyncPromise(false);\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n return internalWrap(fn)();\n}\n\nfunction startSessionOnHub(hub: Hub): void {\n hub.startSession({ ignoreDuration: true });\n hub.captureSession();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n const window = getGlobalObject<Window>();\n const document = window.document;\n\n if (typeof document === 'undefined') {\n if (isDebugBuild()) {\n logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n }\n return;\n }\n\n const hub = getCurrentHub();\n\n // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n // pinned at the same version in package.json, but there are edge cases where it's possible. See\n // https://github.com/getsentry/sentry-javascript/issues/3207 and\n // https://github.com/getsentry/sentry-javascript/issues/3234 and\n // https://github.com/getsentry/sentry-javascript/issues/3278.\n if (!hub.captureSession) {\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSessionOnHub(hub);\n\n // We want to create a session for every navigation as well\n addInstrumentationHandler('history', ({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (!(from === undefined || from === to)) {\n startSessionOnHub(getCurrentHub());\n }\n });\n}\n"]}