@sentry/browser 7.0.0-alpha.0 → 7.0.0-beta.1

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 (242) hide show
  1. package/README.md +2 -3
  2. package/cjs/client.js +130 -68
  3. package/cjs/client.js.map +1 -1
  4. package/cjs/eventbuilder.js +227 -168
  5. package/cjs/eventbuilder.js.map +1 -1
  6. package/cjs/exports.js +55 -42
  7. package/cjs/exports.js.map +1 -1
  8. package/cjs/flags.js +7 -3
  9. package/cjs/flags.js.map +1 -1
  10. package/cjs/helpers.js +123 -130
  11. package/cjs/helpers.js.map +1 -1
  12. package/cjs/index.js +78 -13
  13. package/cjs/index.js.map +1 -1
  14. package/cjs/integrations/breadcrumbs.js +223 -193
  15. package/cjs/integrations/breadcrumbs.js.map +1 -1
  16. package/cjs/integrations/dedupe.js +183 -143
  17. package/cjs/integrations/dedupe.js.map +1 -1
  18. package/cjs/integrations/globalhandlers.js +212 -171
  19. package/cjs/integrations/globalhandlers.js.map +1 -1
  20. package/cjs/integrations/httpcontext.js +51 -0
  21. package/cjs/integrations/httpcontext.js.map +1 -0
  22. package/cjs/integrations/index.js +18 -14
  23. package/cjs/integrations/index.js.map +1 -1
  24. package/cjs/integrations/linkederrors.js +79 -48
  25. package/cjs/integrations/linkederrors.js.map +1 -1
  26. package/cjs/integrations/trycatch.js +245 -216
  27. package/cjs/integrations/trycatch.js.map +1 -1
  28. package/cjs/sdk.js +168 -108
  29. package/cjs/sdk.js.map +1 -1
  30. package/cjs/stack-parsers.js +134 -83
  31. package/cjs/stack-parsers.js.map +1 -1
  32. package/cjs/transports/fetch.js +34 -80
  33. package/cjs/transports/fetch.js.map +1 -1
  34. package/cjs/transports/index.js +10 -12
  35. package/cjs/transports/index.js.map +1 -1
  36. package/cjs/transports/utils.js +57 -52
  37. package/cjs/transports/utils.js.map +1 -1
  38. package/cjs/transports/xhr.js +53 -63
  39. package/cjs/transports/xhr.js.map +1 -1
  40. package/esm/client.js +128 -67
  41. package/esm/client.js.map +1 -1
  42. package/esm/eventbuilder.js +218 -159
  43. package/esm/eventbuilder.js.map +1 -1
  44. package/esm/exports.js +12 -7
  45. package/esm/exports.js.map +1 -1
  46. package/esm/flags.js +5 -2
  47. package/esm/flags.js.map +1 -1
  48. package/esm/helpers.js +121 -127
  49. package/esm/helpers.js.map +1 -1
  50. package/esm/index.js +28 -10
  51. package/esm/index.js.map +1 -1
  52. package/esm/integrations/breadcrumbs.js +219 -191
  53. package/esm/integrations/breadcrumbs.js.map +1 -1
  54. package/esm/integrations/dedupe.js +180 -141
  55. package/esm/integrations/dedupe.js.map +1 -1
  56. package/esm/integrations/globalhandlers.js +209 -169
  57. package/esm/integrations/globalhandlers.js.map +1 -1
  58. package/esm/integrations/httpcontext.js +49 -0
  59. package/esm/integrations/httpcontext.js.map +1 -0
  60. package/esm/integrations/index.js +7 -7
  61. package/esm/integrations/index.js.map +1 -1
  62. package/esm/integrations/linkederrors.js +75 -45
  63. package/esm/integrations/linkederrors.js.map +1 -1
  64. package/esm/integrations/trycatch.js +242 -214
  65. package/esm/integrations/trycatch.js.map +1 -1
  66. package/esm/sdk.js +164 -105
  67. package/esm/sdk.js.map +1 -1
  68. package/esm/stack-parsers.js +126 -82
  69. package/esm/stack-parsers.js.map +1 -1
  70. package/esm/transports/fetch.js +32 -79
  71. package/esm/transports/fetch.js.map +1 -1
  72. package/esm/transports/index.js +3 -6
  73. package/esm/transports/index.js.map +1 -1
  74. package/esm/transports/utils.js +56 -51
  75. package/esm/transports/utils.js.map +1 -1
  76. package/esm/transports/xhr.js +51 -62
  77. package/esm/transports/xhr.js.map +1 -1
  78. package/package.json +4 -5
  79. package/types/client.d.ts +42 -11
  80. package/types/client.d.ts.map +1 -1
  81. package/types/eventbuilder.d.ts +10 -12
  82. package/types/eventbuilder.d.ts.map +1 -1
  83. package/types/exports.d.ts +7 -6
  84. package/types/exports.d.ts.map +1 -1
  85. package/types/helpers.d.ts +0 -5
  86. package/types/helpers.d.ts.map +1 -1
  87. package/types/index.d.ts +2 -3
  88. package/types/index.d.ts.map +1 -1
  89. package/types/integrations/breadcrumbs.d.ts +6 -7
  90. package/types/integrations/breadcrumbs.d.ts.map +1 -1
  91. package/types/integrations/dedupe.d.ts.map +1 -1
  92. package/types/integrations/globalhandlers.d.ts.map +1 -1
  93. package/types/integrations/{useragent.d.ts → httpcontext.d.ts} +3 -3
  94. package/types/integrations/httpcontext.d.ts.map +1 -0
  95. package/types/integrations/index.d.ts +1 -1
  96. package/types/integrations/index.d.ts.map +1 -1
  97. package/types/integrations/linkederrors.d.ts +3 -3
  98. package/types/integrations/linkederrors.d.ts.map +1 -1
  99. package/types/sdk.d.ts +5 -5
  100. package/types/sdk.d.ts.map +1 -1
  101. package/types/stack-parsers.d.ts +8 -6
  102. package/types/stack-parsers.d.ts.map +1 -1
  103. package/types/transports/fetch.d.ts +6 -15
  104. package/types/transports/fetch.d.ts.map +1 -1
  105. package/types/transports/index.d.ts +2 -5
  106. package/types/transports/index.d.ts.map +1 -1
  107. package/types/transports/types.d.ts +10 -0
  108. package/types/transports/types.d.ts.map +1 -0
  109. package/types/transports/utils.d.ts.map +1 -1
  110. package/types/transports/xhr.d.ts +6 -10
  111. package/types/transports/xhr.d.ts.map +1 -1
  112. package/cjs/backend.d.ts +0 -39
  113. package/cjs/backend.d.ts.map +0 -1
  114. package/cjs/backend.js +0 -58
  115. package/cjs/backend.js.map +0 -1
  116. package/cjs/client.d.ts +0 -33
  117. package/cjs/client.d.ts.map +0 -1
  118. package/cjs/eventbuilder.d.ts +0 -39
  119. package/cjs/eventbuilder.d.ts.map +0 -1
  120. package/cjs/exports.d.ts +0 -9
  121. package/cjs/exports.d.ts.map +0 -1
  122. package/cjs/flags.d.ts +0 -3
  123. package/cjs/flags.d.ts.map +0 -1
  124. package/cjs/helpers.d.ts +0 -52
  125. package/cjs/helpers.d.ts.map +0 -1
  126. package/cjs/index.d.ts +0 -16
  127. package/cjs/index.d.ts.map +0 -1
  128. package/cjs/integrations/breadcrumbs.d.ts +0 -47
  129. package/cjs/integrations/breadcrumbs.d.ts.map +0 -1
  130. package/cjs/integrations/dedupe.d.ts +0 -21
  131. package/cjs/integrations/dedupe.d.ts.map +0 -1
  132. package/cjs/integrations/globalhandlers.d.ts +0 -30
  133. package/cjs/integrations/globalhandlers.d.ts.map +0 -1
  134. package/cjs/integrations/index.d.ts +0 -7
  135. package/cjs/integrations/index.d.ts.map +0 -1
  136. package/cjs/integrations/linkederrors.d.ts +0 -42
  137. package/cjs/integrations/linkederrors.d.ts.map +0 -1
  138. package/cjs/integrations/trycatch.d.ts +0 -33
  139. package/cjs/integrations/trycatch.d.ts.map +0 -1
  140. package/cjs/integrations/useragent.d.ts +0 -17
  141. package/cjs/integrations/useragent.d.ts.map +0 -1
  142. package/cjs/integrations/useragent.js +0 -42
  143. package/cjs/integrations/useragent.js.map +0 -1
  144. package/cjs/sdk.d.ts +0 -112
  145. package/cjs/sdk.d.ts.map +0 -1
  146. package/cjs/stack-parsers.d.ts +0 -7
  147. package/cjs/stack-parsers.d.ts.map +0 -1
  148. package/cjs/transports/base.d.ts +0 -65
  149. package/cjs/transports/base.d.ts.map +0 -1
  150. package/cjs/transports/base.js +0 -141
  151. package/cjs/transports/base.js.map +0 -1
  152. package/cjs/transports/fetch.d.ts +0 -17
  153. package/cjs/transports/fetch.d.ts.map +0 -1
  154. package/cjs/transports/index.d.ts +0 -6
  155. package/cjs/transports/index.d.ts.map +0 -1
  156. package/cjs/transports/new-fetch.d.ts +0 -10
  157. package/cjs/transports/new-fetch.d.ts.map +0 -1
  158. package/cjs/transports/new-fetch.js +0 -27
  159. package/cjs/transports/new-fetch.js.map +0 -1
  160. package/cjs/transports/new-xhr.d.ts +0 -11
  161. package/cjs/transports/new-xhr.d.ts.map +0 -1
  162. package/cjs/transports/new-xhr.js +0 -46
  163. package/cjs/transports/new-xhr.js.map +0 -1
  164. package/cjs/transports/utils.d.ts +0 -48
  165. package/cjs/transports/utils.d.ts.map +0 -1
  166. package/cjs/transports/xhr.d.ts +0 -11
  167. package/cjs/transports/xhr.d.ts.map +0 -1
  168. package/cjs/version.d.ts +0 -2
  169. package/cjs/version.d.ts.map +0 -1
  170. package/cjs/version.js +0 -4
  171. package/cjs/version.js.map +0 -1
  172. package/esm/backend.d.ts +0 -39
  173. package/esm/backend.d.ts.map +0 -1
  174. package/esm/backend.js +0 -57
  175. package/esm/backend.js.map +0 -1
  176. package/esm/client.d.ts +0 -33
  177. package/esm/client.d.ts.map +0 -1
  178. package/esm/eventbuilder.d.ts +0 -39
  179. package/esm/eventbuilder.d.ts.map +0 -1
  180. package/esm/exports.d.ts +0 -9
  181. package/esm/exports.d.ts.map +0 -1
  182. package/esm/flags.d.ts +0 -3
  183. package/esm/flags.d.ts.map +0 -1
  184. package/esm/helpers.d.ts +0 -52
  185. package/esm/helpers.d.ts.map +0 -1
  186. package/esm/index.d.ts +0 -16
  187. package/esm/index.d.ts.map +0 -1
  188. package/esm/integrations/breadcrumbs.d.ts +0 -47
  189. package/esm/integrations/breadcrumbs.d.ts.map +0 -1
  190. package/esm/integrations/dedupe.d.ts +0 -21
  191. package/esm/integrations/dedupe.d.ts.map +0 -1
  192. package/esm/integrations/globalhandlers.d.ts +0 -30
  193. package/esm/integrations/globalhandlers.d.ts.map +0 -1
  194. package/esm/integrations/index.d.ts +0 -7
  195. package/esm/integrations/index.d.ts.map +0 -1
  196. package/esm/integrations/linkederrors.d.ts +0 -42
  197. package/esm/integrations/linkederrors.d.ts.map +0 -1
  198. package/esm/integrations/trycatch.d.ts +0 -33
  199. package/esm/integrations/trycatch.d.ts.map +0 -1
  200. package/esm/integrations/useragent.d.ts +0 -17
  201. package/esm/integrations/useragent.d.ts.map +0 -1
  202. package/esm/integrations/useragent.js +0 -41
  203. package/esm/integrations/useragent.js.map +0 -1
  204. package/esm/sdk.d.ts +0 -112
  205. package/esm/sdk.d.ts.map +0 -1
  206. package/esm/stack-parsers.d.ts +0 -7
  207. package/esm/stack-parsers.d.ts.map +0 -1
  208. package/esm/transports/base.d.ts +0 -65
  209. package/esm/transports/base.d.ts.map +0 -1
  210. package/esm/transports/base.js +0 -140
  211. package/esm/transports/base.js.map +0 -1
  212. package/esm/transports/fetch.d.ts +0 -17
  213. package/esm/transports/fetch.d.ts.map +0 -1
  214. package/esm/transports/index.d.ts +0 -6
  215. package/esm/transports/index.d.ts.map +0 -1
  216. package/esm/transports/new-fetch.d.ts +0 -10
  217. package/esm/transports/new-fetch.d.ts.map +0 -1
  218. package/esm/transports/new-fetch.js +0 -25
  219. package/esm/transports/new-fetch.js.map +0 -1
  220. package/esm/transports/new-xhr.d.ts +0 -11
  221. package/esm/transports/new-xhr.d.ts.map +0 -1
  222. package/esm/transports/new-xhr.js +0 -44
  223. package/esm/transports/new-xhr.js.map +0 -1
  224. package/esm/transports/utils.d.ts +0 -48
  225. package/esm/transports/utils.d.ts.map +0 -1
  226. package/esm/transports/xhr.d.ts +0 -11
  227. package/esm/transports/xhr.d.ts.map +0 -1
  228. package/esm/version.d.ts +0 -2
  229. package/esm/version.d.ts.map +0 -1
  230. package/esm/version.js +0 -3
  231. package/esm/version.js.map +0 -1
  232. package/types/backend.d.ts +0 -39
  233. package/types/backend.d.ts.map +0 -1
  234. package/types/integrations/useragent.d.ts.map +0 -1
  235. package/types/transports/base.d.ts +0 -65
  236. package/types/transports/base.d.ts.map +0 -1
  237. package/types/transports/new-fetch.d.ts +0 -10
  238. package/types/transports/new-fetch.d.ts.map +0 -1
  239. package/types/transports/new-xhr.d.ts +0 -11
  240. package/types/transports/new-xhr.d.ts.map +0 -1
  241. package/types/version.d.ts +0 -2
  242. package/types/version.d.ts.map +0 -1
@@ -1,227 +1,255 @@
1
- import { __assign } from "tslib";
2
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
- /* eslint-disable max-lines */
4
1
  import { getCurrentHub } from '@sentry/core';
5
- import { Severity } from '@sentry/types';
6
- import { addInstrumentationHandler, getEventDescription, getGlobalObject, htmlTreeAsString, parseUrl, safeJoin, severityFromString, } from '@sentry/utils';
2
+ import { addInstrumentationHandler, htmlTreeAsString, severityLevelFromString, safeJoin, getGlobalObject, parseUrl } from '@sentry/utils';
3
+
4
+ /** JSDoc */
5
+
6
+ var BREADCRUMB_INTEGRATION_ID = 'Breadcrumbs';
7
+
7
8
  /**
8
9
  * Default Breadcrumbs instrumentations
9
10
  * TODO: Deprecated - with v6, this will be renamed to `Instrument`
10
11
  */
11
- var Breadcrumbs = /** @class */ (function () {
12
- /**
13
- * @inheritDoc
14
- */
15
- function Breadcrumbs(options) {
16
- /**
17
- * @inheritDoc
18
- */
19
- this.name = Breadcrumbs.id;
20
- this._options = __assign({ console: true, dom: true, fetch: true, history: true, sentry: true, xhr: true }, options);
21
- }
22
- /**
23
- * Create a breadcrumb of `sentry` from the events themselves
24
- */
25
- Breadcrumbs.prototype.addSentryBreadcrumb = function (event) {
26
- if (!this._options.sentry) {
27
- return;
28
- }
29
- getCurrentHub().addBreadcrumb({
30
- category: "sentry." + (event.type === 'transaction' ? 'transaction' : 'event'),
31
- event_id: event.event_id,
32
- level: event.level,
33
- message: getEventDescription(event),
34
- }, {
35
- event: event,
36
- });
37
- };
38
- /**
39
- * Instrument browser built-ins w/ breadcrumb capturing
40
- * - Console API
41
- * - DOM API (click/typing)
42
- * - XMLHttpRequest API
43
- * - Fetch API
44
- * - History API
45
- */
46
- Breadcrumbs.prototype.setupOnce = function () {
47
- if (this._options.console) {
48
- addInstrumentationHandler('console', _consoleBreadcrumb);
49
- }
50
- if (this._options.dom) {
51
- addInstrumentationHandler('dom', _domBreadcrumb(this._options.dom));
52
- }
53
- if (this._options.xhr) {
54
- addInstrumentationHandler('xhr', _xhrBreadcrumb);
55
- }
56
- if (this._options.fetch) {
57
- addInstrumentationHandler('fetch', _fetchBreadcrumb);
58
- }
59
- if (this._options.history) {
60
- addInstrumentationHandler('history', _historyBreadcrumb);
61
- }
12
+ class Breadcrumbs {
13
+ /**
14
+ * @inheritDoc
15
+ */
16
+ static __initStatic() {this.id = BREADCRUMB_INTEGRATION_ID;}
17
+
18
+ /**
19
+ * @inheritDoc
20
+ */
21
+ __init() {this.name = Breadcrumbs.id;}
22
+
23
+ /**
24
+ * Options of the breadcrumbs integration.
25
+ */
26
+ // This field is public, because we use it in the browser client to check if the `sentry` option is enabled.
27
+
28
+
29
+ /**
30
+ * @inheritDoc
31
+ */
32
+ constructor(options) {;Breadcrumbs.prototype.__init.call(this);
33
+ this.options = {
34
+ console: true,
35
+ dom: true,
36
+ fetch: true,
37
+ history: true,
38
+ sentry: true,
39
+ xhr: true,
40
+ ...options,
62
41
  };
63
- /**
64
- * @inheritDoc
65
- */
66
- Breadcrumbs.id = 'Breadcrumbs';
67
- return Breadcrumbs;
68
- }());
69
- export { Breadcrumbs };
42
+ }
43
+
44
+ /**
45
+ * Instrument browser built-ins w/ breadcrumb capturing
46
+ * - Console API
47
+ * - DOM API (click/typing)
48
+ * - XMLHttpRequest API
49
+ * - Fetch API
50
+ * - History API
51
+ */
52
+ setupOnce() {
53
+ if (this.options.console) {
54
+ addInstrumentationHandler('console', _consoleBreadcrumb);
55
+ }
56
+ if (this.options.dom) {
57
+ addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));
58
+ }
59
+ if (this.options.xhr) {
60
+ addInstrumentationHandler('xhr', _xhrBreadcrumb);
61
+ }
62
+ if (this.options.fetch) {
63
+ addInstrumentationHandler('fetch', _fetchBreadcrumb);
64
+ }
65
+ if (this.options.history) {
66
+ addInstrumentationHandler('history', _historyBreadcrumb);
67
+ }
68
+ }
69
+ } Breadcrumbs.__initStatic();
70
+
70
71
  /**
71
72
  * A HOC that creaes a function that creates breadcrumbs from DOM API calls.
72
73
  * This is a HOC so that we get access to dom options in the closure.
73
74
  */
74
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
75
  function _domBreadcrumb(dom) {
76
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
76
  function _innerDomBreadcrumb(handlerData) {
78
- var target;
79
- var keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;
80
- if (typeof keyAttrs === 'string') {
81
- keyAttrs = [keyAttrs];
82
- }
83
- // Accessing event.target can throw (see getsentry/raven-js#838, #768)
84
- try {
85
- target = handlerData.event.target
86
- ? htmlTreeAsString(handlerData.event.target, keyAttrs)
87
- : htmlTreeAsString(handlerData.event, keyAttrs);
88
- }
89
- catch (e) {
90
- target = '<unknown>';
91
- }
92
- if (target.length === 0) {
93
- return;
94
- }
95
- getCurrentHub().addBreadcrumb({
96
- category: "ui." + handlerData.name,
97
- message: target,
98
- }, {
99
- event: handlerData.event,
100
- name: handlerData.name,
101
- global: handlerData.global,
102
- });
77
+ let target;
78
+ let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;
79
+
80
+ if (typeof keyAttrs === 'string') {
81
+ keyAttrs = [keyAttrs];
103
82
  }
104
- return _innerDomBreadcrumb;
83
+
84
+ // Accessing event.target can throw (see getsentry/raven-js#838, #768)
85
+ try {
86
+ target = handlerData.event.target
87
+ ? htmlTreeAsString(handlerData.event.target , keyAttrs)
88
+ : htmlTreeAsString(handlerData.event , keyAttrs);
89
+ } catch (e) {
90
+ target = '<unknown>';
91
+ }
92
+
93
+ if (target.length === 0) {
94
+ return;
95
+ }
96
+
97
+ getCurrentHub().addBreadcrumb(
98
+ {
99
+ category: `ui.${handlerData.name}`,
100
+ message: target,
101
+ },
102
+ {
103
+ event: handlerData.event,
104
+ name: handlerData.name,
105
+ global: handlerData.global,
106
+ },
107
+ );
108
+ }
109
+
110
+ return _innerDomBreadcrumb;
105
111
  }
112
+
106
113
  /**
107
114
  * Creates breadcrumbs from console API calls
108
115
  */
109
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
116
  function _consoleBreadcrumb(handlerData) {
111
- var breadcrumb = {
112
- category: 'console',
113
- data: {
114
- arguments: handlerData.args,
115
- logger: 'console',
116
- },
117
- level: severityFromString(handlerData.level),
118
- message: safeJoin(handlerData.args, ' '),
119
- };
120
- if (handlerData.level === 'assert') {
121
- if (handlerData.args[0] === false) {
122
- breadcrumb.message = "Assertion failed: " + (safeJoin(handlerData.args.slice(1), ' ') || 'console.assert');
123
- breadcrumb.data.arguments = handlerData.args.slice(1);
124
- }
125
- else {
126
- // Don't capture a breadcrumb for passed assertions
127
- return;
128
- }
117
+ var breadcrumb = {
118
+ category: 'console',
119
+ data: {
120
+ arguments: handlerData.args,
121
+ logger: 'console',
122
+ },
123
+ level: severityLevelFromString(handlerData.level),
124
+ message: safeJoin(handlerData.args, ' '),
125
+ };
126
+
127
+ if (handlerData.level === 'assert') {
128
+ if (handlerData.args[0] === false) {
129
+ breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;
130
+ breadcrumb.data.arguments = handlerData.args.slice(1);
131
+ } else {
132
+ // Don't capture a breadcrumb for passed assertions
133
+ return;
129
134
  }
130
- getCurrentHub().addBreadcrumb(breadcrumb, {
131
- input: handlerData.args,
132
- level: handlerData.level,
133
- });
135
+ }
136
+
137
+ getCurrentHub().addBreadcrumb(breadcrumb, {
138
+ input: handlerData.args,
139
+ level: handlerData.level,
140
+ });
134
141
  }
142
+
135
143
  /**
136
144
  * Creates breadcrumbs from XHR API calls
137
145
  */
138
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
146
  function _xhrBreadcrumb(handlerData) {
140
- if (handlerData.endTimestamp) {
141
- // We only capture complete, non-sentry requests
142
- if (handlerData.xhr.__sentry_own_request__) {
143
- return;
144
- }
145
- var _a = handlerData.xhr.__sentry_xhr__ || {}, method = _a.method, url = _a.url, status_code = _a.status_code, body = _a.body;
146
- getCurrentHub().addBreadcrumb({
147
- category: 'xhr',
148
- data: {
149
- method: method,
150
- url: url,
151
- status_code: status_code,
152
- },
153
- type: 'http',
154
- }, {
155
- xhr: handlerData.xhr,
156
- input: body,
157
- });
158
- return;
147
+ if (handlerData.endTimestamp) {
148
+ // We only capture complete, non-sentry requests
149
+ if (handlerData.xhr.__sentry_own_request__) {
150
+ return;
159
151
  }
152
+
153
+ const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};
154
+
155
+ getCurrentHub().addBreadcrumb(
156
+ {
157
+ category: 'xhr',
158
+ data: {
159
+ method,
160
+ url,
161
+ status_code,
162
+ },
163
+ type: 'http',
164
+ },
165
+ {
166
+ xhr: handlerData.xhr,
167
+ input: body,
168
+ },
169
+ );
170
+
171
+ return;
172
+ }
160
173
  }
174
+
161
175
  /**
162
176
  * Creates breadcrumbs from fetch API calls
163
177
  */
164
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
165
178
  function _fetchBreadcrumb(handlerData) {
166
- // We only capture complete fetch requests
167
- if (!handlerData.endTimestamp) {
168
- return;
169
- }
170
- if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {
171
- // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)
172
- return;
173
- }
174
- if (handlerData.error) {
175
- getCurrentHub().addBreadcrumb({
176
- category: 'fetch',
177
- data: handlerData.fetchData,
178
- level: Severity.Error,
179
- type: 'http',
180
- }, {
181
- data: handlerData.error,
182
- input: handlerData.args,
183
- });
184
- }
185
- else {
186
- getCurrentHub().addBreadcrumb({
187
- category: 'fetch',
188
- data: __assign(__assign({}, handlerData.fetchData), { status_code: handlerData.response.status }),
189
- type: 'http',
190
- }, {
191
- input: handlerData.args,
192
- response: handlerData.response,
193
- });
194
- }
179
+ // We only capture complete fetch requests
180
+ if (!handlerData.endTimestamp) {
181
+ return;
182
+ }
183
+
184
+ if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {
185
+ // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)
186
+ return;
187
+ }
188
+
189
+ if (handlerData.error) {
190
+ getCurrentHub().addBreadcrumb(
191
+ {
192
+ category: 'fetch',
193
+ data: handlerData.fetchData,
194
+ level: 'error',
195
+ type: 'http',
196
+ },
197
+ {
198
+ data: handlerData.error,
199
+ input: handlerData.args,
200
+ },
201
+ );
202
+ } else {
203
+ getCurrentHub().addBreadcrumb(
204
+ {
205
+ category: 'fetch',
206
+ data: {
207
+ ...handlerData.fetchData,
208
+ status_code: handlerData.response.status,
209
+ },
210
+ type: 'http',
211
+ },
212
+ {
213
+ input: handlerData.args,
214
+ response: handlerData.response,
215
+ },
216
+ );
217
+ }
195
218
  }
219
+
196
220
  /**
197
221
  * Creates breadcrumbs from history API calls
198
222
  */
199
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
200
223
  function _historyBreadcrumb(handlerData) {
201
- var global = getGlobalObject();
202
- var from = handlerData.from;
203
- var to = handlerData.to;
204
- var parsedLoc = parseUrl(global.location.href);
205
- var parsedFrom = parseUrl(from);
206
- var parsedTo = parseUrl(to);
207
- // Initial pushState doesn't provide `from` information
208
- if (!parsedFrom.path) {
209
- parsedFrom = parsedLoc;
210
- }
211
- // Use only the path component of the URL if the URL matches the current
212
- // document (almost all the time when using pushState)
213
- if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {
214
- to = parsedTo.relative;
215
- }
216
- if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {
217
- from = parsedFrom.relative;
218
- }
219
- getCurrentHub().addBreadcrumb({
220
- category: 'navigation',
221
- data: {
222
- from: from,
223
- to: to,
224
- },
225
- });
224
+ var global = getGlobalObject();
225
+ let from = handlerData.from;
226
+ let to = handlerData.to;
227
+ var parsedLoc = parseUrl(global.location.href);
228
+ let parsedFrom = parseUrl(from);
229
+ var parsedTo = parseUrl(to);
230
+
231
+ // Initial pushState doesn't provide `from` information
232
+ if (!parsedFrom.path) {
233
+ parsedFrom = parsedLoc;
234
+ }
235
+
236
+ // Use only the path component of the URL if the URL matches the current
237
+ // document (almost all the time when using pushState)
238
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {
239
+ to = parsedTo.relative;
240
+ }
241
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {
242
+ from = parsedFrom.relative;
243
+ }
244
+
245
+ getCurrentHub().addBreadcrumb({
246
+ category: 'navigation',
247
+ data: {
248
+ from,
249
+ to,
250
+ },
251
+ });
226
252
  }
227
- //# sourceMappingURL=breadcrumbs.js.map
253
+
254
+ export { BREADCRUMB_INTEGRATION_ID, Breadcrumbs };
255
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -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 severityFromString,\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('console', _consoleBreadcrumb);\n }\n if (this._options.dom) {\n addInstrumentationHandler('dom', _domBreadcrumb(this._options.dom));\n }\n if (this._options.xhr) {\n addInstrumentationHandler('xhr', _xhrBreadcrumb);\n }\n if (this._options.fetch) {\n addInstrumentationHandler('fetch', _fetchBreadcrumb);\n }\n if (this._options.history) {\n addInstrumentationHandler('history', _historyBreadcrumb);\n }\n }\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _domBreadcrumb(dom: BreadcrumbsOptions['dom']): (handlerData: { [key: string]: any }) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _innerDomBreadcrumb(handlerData: { [key: string]: any }): void {\n let target;\n let keyAttrs = typeof dom === 'object' ? 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 return _innerDomBreadcrumb;\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _consoleBreadcrumb(handlerData: { [key: string]: any }): void {\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityFromString(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 XHR API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _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\nfunction _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\nfunction _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"]}
1
+ {"version":3,"file":"breadcrumbs.js","sources":["../../../../src/integrations/breadcrumbs.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport { Integration } from '@sentry/types';\nimport {\n addInstrumentationHandler,\n getGlobalObject,\n htmlTreeAsString,\n parseUrl,\n safeJoin,\n severityLevelFromString,\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\nexport const BREADCRUMB_INTEGRATION_ID = 'Breadcrumbs';\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 = BREADCRUMB_INTEGRATION_ID;\n\n /**\n * @inheritDoc\n */\n public name: string = Breadcrumbs.id;\n\n /**\n * Options of the breadcrumbs integration.\n */\n // This field is public, because we use it in the browser client to check if the `sentry` option is enabled.\n public readonly options: Readonly<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 * 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('console', _consoleBreadcrumb);\n }\n if (this.options.dom) {\n addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));\n }\n if (this.options.xhr) {\n addInstrumentationHandler('xhr', _xhrBreadcrumb);\n }\n if (this.options.fetch) {\n addInstrumentationHandler('fetch', _fetchBreadcrumb);\n }\n if (this.options.history) {\n addInstrumentationHandler('history', _historyBreadcrumb);\n }\n }\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _domBreadcrumb(dom: BreadcrumbsOptions['dom']): (handlerData: { [key: string]: any }) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _innerDomBreadcrumb(handlerData: { [key: string]: any }): void {\n let target;\n let keyAttrs = typeof dom === 'object' ? 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 return _innerDomBreadcrumb;\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _consoleBreadcrumb(handlerData: { [key: string]: any }): void {\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(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 XHR API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _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\nfunction _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: '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\nfunction _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"],"names":[],"mappings":";;;AAaA;;;AAWA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;"}