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