posthog-js 1.297.1 → 1.297.4
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/dist/all-external-dependencies.js.map +1 -1
- package/dist/array.full.es5.js +1 -1
- package/dist/array.full.es5.js.map +1 -1
- package/dist/array.full.js +1 -1
- package/dist/array.full.js.map +1 -1
- package/dist/array.full.no-external.js +1 -1
- package/dist/array.full.no-external.js.map +1 -1
- package/dist/array.js +1 -1
- package/dist/array.js.map +1 -1
- package/dist/array.no-external.js +1 -1
- package/dist/array.no-external.js.map +1 -1
- package/dist/customizations.full.js +1 -1
- package/dist/exception-autocapture.js.map +1 -1
- package/dist/lazy-recorder.js +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/module.full.js +1 -1
- package/dist/module.full.js.map +1 -1
- package/dist/module.full.no-external.js +1 -1
- package/dist/module.full.no-external.js.map +1 -1
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/dist/module.no-external.js +1 -1
- package/dist/module.no-external.js.map +1 -1
- package/dist/posthog-recorder.js +1 -1
- package/dist/src/extensions/exception-autocapture/chunk-ids.d.ts +4 -0
- package/dist/src/extensions/exception-autocapture/error-conversion.d.ts +62 -0
- package/dist/src/extensions/exception-autocapture/stack-trace.d.ts +31 -0
- package/dist/src/extensions/exception-autocapture/type-checking.d.ts +10 -0
- package/dist/src/extensions/replay/config.d.ts +9 -0
- package/dist/src/extensions/replay/mutation-throttler.d.ts +18 -0
- package/dist/src/extensions/replay/sessionrecording-utils.d.ts +19 -0
- package/dist/src/extensions/replay/sessionrecording-wrapper.d.ts +75 -0
- package/dist/src/extensions/replay/sessionrecording.d.ts +163 -0
- package/dist/src/extensions/replay/triggerMatching.d.ts +99 -0
- package/lib/package.json +1 -1
- package/lib/src/extensions/exception-autocapture/chunk-ids.d.ts +4 -0
- package/lib/src/extensions/exception-autocapture/chunk-ids.js +44 -0
- package/lib/src/extensions/exception-autocapture/chunk-ids.js.map +1 -0
- package/lib/src/extensions/exception-autocapture/error-conversion.d.ts +62 -0
- package/lib/src/extensions/exception-autocapture/error-conversion.js +324 -0
- package/lib/src/extensions/exception-autocapture/error-conversion.js.map +1 -0
- package/lib/src/extensions/exception-autocapture/stack-trace.d.ts +31 -0
- package/lib/src/extensions/exception-autocapture/stack-trace.js +283 -0
- package/lib/src/extensions/exception-autocapture/stack-trace.js.map +1 -0
- package/lib/src/extensions/exception-autocapture/type-checking.d.ts +10 -0
- package/lib/src/extensions/exception-autocapture/type-checking.js +59 -0
- package/lib/src/extensions/exception-autocapture/type-checking.js.map +1 -0
- package/lib/src/extensions/replay/config.d.ts +9 -0
- package/lib/src/extensions/replay/config.js +248 -0
- package/lib/src/extensions/replay/config.js.map +1 -0
- package/lib/src/extensions/replay/mutation-throttler.d.ts +18 -0
- package/lib/src/extensions/replay/mutation-throttler.js +96 -0
- package/lib/src/extensions/replay/mutation-throttler.js.map +1 -0
- package/lib/src/extensions/replay/sessionrecording-utils.d.ts +19 -0
- package/lib/src/extensions/replay/sessionrecording-utils.js +157 -0
- package/lib/src/extensions/replay/sessionrecording-utils.js.map +1 -0
- package/lib/src/extensions/replay/sessionrecording-wrapper.d.ts +75 -0
- package/lib/src/extensions/replay/sessionrecording-wrapper.js +285 -0
- package/lib/src/extensions/replay/sessionrecording-wrapper.js.map +1 -0
- package/lib/src/extensions/replay/sessionrecording.d.ts +163 -0
- package/lib/src/extensions/replay/sessionrecording.js +1208 -0
- package/lib/src/extensions/replay/sessionrecording.js.map +1 -0
- package/lib/src/extensions/replay/triggerMatching.d.ts +99 -0
- package/lib/src/extensions/replay/triggerMatching.js +390 -0
- package/lib/src/extensions/replay/triggerMatching.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry
|
|
3
|
+
// Licensed under the MIT License
|
|
4
|
+
var __assign = (this && this.__assign) || function () {
|
|
5
|
+
__assign = Object.assign || function(t) {
|
|
6
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
7
|
+
s = arguments[i];
|
|
8
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
9
|
+
t[p] = s[p];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
return __assign.apply(this, arguments);
|
|
14
|
+
};
|
|
15
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
16
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
17
|
+
if (!m) return o;
|
|
18
|
+
var i = m.call(o), r, ar = [], e;
|
|
19
|
+
try {
|
|
20
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
21
|
+
}
|
|
22
|
+
catch (error) { e = { error: error }; }
|
|
23
|
+
finally {
|
|
24
|
+
try {
|
|
25
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
26
|
+
}
|
|
27
|
+
finally { if (e) throw e.error; }
|
|
28
|
+
}
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
32
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
33
|
+
if (ar || !(i in from)) {
|
|
34
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
35
|
+
ar[i] = from[i];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.parseStackFrames = parseStackFrames;
|
|
42
|
+
exports.applyChunkIds = applyChunkIds;
|
|
43
|
+
exports.extractMessage = extractMessage;
|
|
44
|
+
exports.errorToProperties = errorToProperties;
|
|
45
|
+
exports.unhandledRejectionToProperties = unhandledRejectionToProperties;
|
|
46
|
+
var type_checking_1 = require("./type-checking");
|
|
47
|
+
var stack_trace_1 = require("./stack-trace");
|
|
48
|
+
var core_1 = require("@posthog/core");
|
|
49
|
+
var types_1 = require("../../types");
|
|
50
|
+
var chunk_ids_1 = require("./chunk-ids");
|
|
51
|
+
/**
|
|
52
|
+
* based on the very wonderful MIT licensed Sentry SDK
|
|
53
|
+
*/
|
|
54
|
+
var ERROR_TYPES_PATTERN = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;
|
|
55
|
+
function parseStackFrames(ex, framesToPop) {
|
|
56
|
+
if (framesToPop === void 0) { framesToPop = 0; }
|
|
57
|
+
// Access and store the stacktrace property before doing ANYTHING
|
|
58
|
+
// else to it because Opera is not very good at providing it
|
|
59
|
+
// reliably in other circumstances.
|
|
60
|
+
var stacktrace = ex.stacktrace || ex.stack || '';
|
|
61
|
+
var skipLines = getSkipFirstStackStringLines(ex);
|
|
62
|
+
try {
|
|
63
|
+
var parser = stack_trace_1.defaultStackParser;
|
|
64
|
+
var frames_1 = applyChunkIds(parser(stacktrace, skipLines), parser);
|
|
65
|
+
// frames are reversed so we remove the from the back of the array
|
|
66
|
+
return frames_1.slice(0, frames_1.length - framesToPop);
|
|
67
|
+
}
|
|
68
|
+
catch (_a) {
|
|
69
|
+
// no-empty
|
|
70
|
+
}
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
function applyChunkIds(frames, parser) {
|
|
74
|
+
var filenameDebugIdMap = (0, chunk_ids_1.getFilenameToChunkIdMap)(parser);
|
|
75
|
+
frames.forEach(function (frame) {
|
|
76
|
+
if (frame.filename) {
|
|
77
|
+
frame.chunk_id = filenameDebugIdMap[frame.filename];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return frames;
|
|
81
|
+
}
|
|
82
|
+
var reactMinifiedRegexp = /Minified React error #\d+;/i;
|
|
83
|
+
/**
|
|
84
|
+
* Certain known React errors contain links that would be falsely
|
|
85
|
+
* parsed as frames. This function check for these errors and
|
|
86
|
+
* returns number of the stack string lines to skip.
|
|
87
|
+
*/
|
|
88
|
+
function getSkipFirstStackStringLines(ex) {
|
|
89
|
+
if (ex && reactMinifiedRegexp.test(ex.message)) {
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
function exceptionFromError(error, metadata) {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
var frames = parseStackFrames(error);
|
|
97
|
+
var handled = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.handled) !== null && _a !== void 0 ? _a : true;
|
|
98
|
+
var synthetic = (_b = metadata === null || metadata === void 0 ? void 0 : metadata.synthetic) !== null && _b !== void 0 ? _b : false;
|
|
99
|
+
var exceptionType = (metadata === null || metadata === void 0 ? void 0 : metadata.overrideExceptionType) ? metadata.overrideExceptionType : error.name;
|
|
100
|
+
var exceptionMessage = extractMessage(error);
|
|
101
|
+
return {
|
|
102
|
+
type: exceptionType,
|
|
103
|
+
value: exceptionMessage,
|
|
104
|
+
stacktrace: {
|
|
105
|
+
frames: frames,
|
|
106
|
+
type: 'raw',
|
|
107
|
+
},
|
|
108
|
+
mechanism: {
|
|
109
|
+
handled: handled,
|
|
110
|
+
synthetic: synthetic,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function exceptionListFromError(error, metadata) {
|
|
115
|
+
var exception = exceptionFromError(error, metadata);
|
|
116
|
+
if (error.cause && (0, type_checking_1.isError)(error.cause) && error.cause !== error) {
|
|
117
|
+
// Cause could be an object or a string
|
|
118
|
+
// For now we only support error causes
|
|
119
|
+
// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause
|
|
120
|
+
return __spreadArray([
|
|
121
|
+
exception
|
|
122
|
+
], __read(exceptionListFromError(error.cause, {
|
|
123
|
+
handled: metadata === null || metadata === void 0 ? void 0 : metadata.handled,
|
|
124
|
+
synthetic: metadata === null || metadata === void 0 ? void 0 : metadata.synthetic,
|
|
125
|
+
})), false);
|
|
126
|
+
}
|
|
127
|
+
return [exception];
|
|
128
|
+
}
|
|
129
|
+
function errorPropertiesFromError(error, metadata) {
|
|
130
|
+
return {
|
|
131
|
+
$exception_list: exceptionListFromError(error, metadata),
|
|
132
|
+
$exception_level: 'error',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* There are cases where stacktrace.message is an Event object
|
|
137
|
+
* https://github.com/getsentry/sentry-javascript/issues/1949
|
|
138
|
+
* In this specific case we try to extract stacktrace.message.error.message
|
|
139
|
+
*/
|
|
140
|
+
function extractMessage(err) {
|
|
141
|
+
var message = err.message;
|
|
142
|
+
if (message.error && typeof message.error.message === 'string') {
|
|
143
|
+
return String(message.error.message);
|
|
144
|
+
}
|
|
145
|
+
return String(message);
|
|
146
|
+
}
|
|
147
|
+
function errorPropertiesFromString(candidate, metadata) {
|
|
148
|
+
var _a, _b, _c;
|
|
149
|
+
// Defaults for metadata are based on what the error candidate is.
|
|
150
|
+
var handled = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.handled) !== null && _a !== void 0 ? _a : true;
|
|
151
|
+
var synthetic = (_b = metadata === null || metadata === void 0 ? void 0 : metadata.synthetic) !== null && _b !== void 0 ? _b : true;
|
|
152
|
+
var exceptionType = (metadata === null || metadata === void 0 ? void 0 : metadata.overrideExceptionType)
|
|
153
|
+
? metadata.overrideExceptionType
|
|
154
|
+
: ((_c = metadata === null || metadata === void 0 ? void 0 : metadata.defaultExceptionType) !== null && _c !== void 0 ? _c : 'Error');
|
|
155
|
+
var exceptionMessage = candidate ? candidate : metadata === null || metadata === void 0 ? void 0 : metadata.defaultExceptionMessage;
|
|
156
|
+
var exception = {
|
|
157
|
+
type: exceptionType,
|
|
158
|
+
value: exceptionMessage,
|
|
159
|
+
mechanism: {
|
|
160
|
+
handled: handled,
|
|
161
|
+
synthetic: synthetic,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
if (metadata === null || metadata === void 0 ? void 0 : metadata.syntheticException) {
|
|
165
|
+
// Kludge: strip the last frame from a synthetically created error
|
|
166
|
+
// so that it does not appear in a users stack trace
|
|
167
|
+
var frames_2 = parseStackFrames(metadata.syntheticException, 1);
|
|
168
|
+
if (frames_2.length) {
|
|
169
|
+
exception.stacktrace = { frames: frames_2, type: 'raw' };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
$exception_list: [exception],
|
|
174
|
+
$exception_level: 'error',
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Given any captured exception, extract its keys and create a sorted
|
|
179
|
+
* and truncated list that will be used inside the event message.
|
|
180
|
+
* eg. `Non-error exception captured with keys: foo, bar, baz`
|
|
181
|
+
*/
|
|
182
|
+
function extractExceptionKeysForMessage(exception, maxLength) {
|
|
183
|
+
if (maxLength === void 0) { maxLength = 40; }
|
|
184
|
+
var keys = Object.keys(exception);
|
|
185
|
+
keys.sort();
|
|
186
|
+
if (!keys.length) {
|
|
187
|
+
return '[object has no keys]';
|
|
188
|
+
}
|
|
189
|
+
for (var i = keys.length; i > 0; i--) {
|
|
190
|
+
var serialized = keys.slice(0, i).join(', ');
|
|
191
|
+
if (serialized.length > maxLength) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (i === keys.length) {
|
|
195
|
+
return serialized;
|
|
196
|
+
}
|
|
197
|
+
return serialized.length <= maxLength ? serialized : "".concat(serialized.slice(0, maxLength), "...");
|
|
198
|
+
}
|
|
199
|
+
return '';
|
|
200
|
+
}
|
|
201
|
+
function isSeverityLevel(x) {
|
|
202
|
+
return (0, core_1.isString)(x) && !(0, core_1.isEmptyString)(x) && types_1.severityLevels.indexOf(x) >= 0;
|
|
203
|
+
}
|
|
204
|
+
function errorPropertiesFromObject(candidate, metadata) {
|
|
205
|
+
var _a, _b;
|
|
206
|
+
// Defaults for metadata are based on what the error candidate is.
|
|
207
|
+
var handled = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.handled) !== null && _a !== void 0 ? _a : true;
|
|
208
|
+
var synthetic = (_b = metadata === null || metadata === void 0 ? void 0 : metadata.synthetic) !== null && _b !== void 0 ? _b : true;
|
|
209
|
+
var exceptionType = (metadata === null || metadata === void 0 ? void 0 : metadata.overrideExceptionType)
|
|
210
|
+
? metadata.overrideExceptionType
|
|
211
|
+
: (0, type_checking_1.isEvent)(candidate)
|
|
212
|
+
? candidate.constructor.name
|
|
213
|
+
: 'Error';
|
|
214
|
+
var exceptionMessage = "Non-Error 'exception' captured with keys: ".concat(extractExceptionKeysForMessage(candidate));
|
|
215
|
+
var exception = {
|
|
216
|
+
type: exceptionType,
|
|
217
|
+
value: exceptionMessage,
|
|
218
|
+
mechanism: {
|
|
219
|
+
handled: handled,
|
|
220
|
+
synthetic: synthetic,
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
if (metadata === null || metadata === void 0 ? void 0 : metadata.syntheticException) {
|
|
224
|
+
// Kludge: strip the last frame from a synthetically created error
|
|
225
|
+
// so that it does not appear in a users stack trace
|
|
226
|
+
var frames_3 = parseStackFrames(metadata === null || metadata === void 0 ? void 0 : metadata.syntheticException, 1);
|
|
227
|
+
if (frames_3.length) {
|
|
228
|
+
exception.stacktrace = { frames: frames_3, type: 'raw' };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
$exception_list: [exception],
|
|
233
|
+
$exception_level: isSeverityLevel(candidate.level) ? candidate.level : 'error',
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function errorToProperties(_a, metadata) {
|
|
237
|
+
var error = _a.error, event = _a.event;
|
|
238
|
+
var errorProperties = { $exception_list: [] };
|
|
239
|
+
var candidate = error || event;
|
|
240
|
+
if ((0, type_checking_1.isDOMError)(candidate) || (0, type_checking_1.isDOMException)(candidate)) {
|
|
241
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/DOMError
|
|
242
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/DOMException
|
|
243
|
+
var domException = candidate;
|
|
244
|
+
if ((0, type_checking_1.isErrorWithStack)(candidate)) {
|
|
245
|
+
errorProperties = errorPropertiesFromError(candidate, metadata);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
var name_1 = domException.name || ((0, type_checking_1.isDOMError)(domException) ? 'DOMError' : 'DOMException');
|
|
249
|
+
var message = domException.message ? "".concat(name_1, ": ").concat(domException.message) : name_1;
|
|
250
|
+
var exceptionType = (0, type_checking_1.isDOMError)(domException) ? 'DOMError' : 'DOMException';
|
|
251
|
+
errorProperties = errorPropertiesFromString(message, __assign(__assign({}, metadata), { overrideExceptionType: exceptionType, defaultExceptionMessage: message }));
|
|
252
|
+
}
|
|
253
|
+
if ('code' in domException) {
|
|
254
|
+
errorProperties['$exception_DOMException_code'] = "".concat(domException.code);
|
|
255
|
+
}
|
|
256
|
+
return errorProperties;
|
|
257
|
+
}
|
|
258
|
+
else if ((0, type_checking_1.isErrorEvent)(candidate) && candidate.error) {
|
|
259
|
+
return errorPropertiesFromError(candidate.error, metadata);
|
|
260
|
+
}
|
|
261
|
+
else if ((0, type_checking_1.isError)(candidate)) {
|
|
262
|
+
return errorPropertiesFromError(candidate, metadata);
|
|
263
|
+
}
|
|
264
|
+
else if ((0, type_checking_1.isPlainObject)(candidate) || (0, type_checking_1.isEvent)(candidate)) {
|
|
265
|
+
// group these by using the keys available on the object
|
|
266
|
+
var objectException = candidate;
|
|
267
|
+
return errorPropertiesFromObject(objectException, metadata);
|
|
268
|
+
}
|
|
269
|
+
else if ((0, core_1.isUndefined)(error) && (0, core_1.isString)(event)) {
|
|
270
|
+
var name_2 = 'Error';
|
|
271
|
+
var message = event;
|
|
272
|
+
var groups = event.match(ERROR_TYPES_PATTERN);
|
|
273
|
+
if (groups) {
|
|
274
|
+
name_2 = groups[1];
|
|
275
|
+
message = groups[2];
|
|
276
|
+
}
|
|
277
|
+
return errorPropertiesFromString(message, __assign(__assign({}, metadata), { overrideExceptionType: name_2, defaultExceptionMessage: message }));
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
return errorPropertiesFromString(candidate, metadata);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
function unhandledRejectionToProperties(_a) {
|
|
284
|
+
var _b = __read(_a, 1), ev = _b[0];
|
|
285
|
+
var error = getUnhandledRejectionError(ev);
|
|
286
|
+
if ((0, type_checking_1.isPrimitive)(error)) {
|
|
287
|
+
return errorPropertiesFromString("Non-Error promise rejection captured with value: ".concat(String(error)), {
|
|
288
|
+
handled: false,
|
|
289
|
+
synthetic: false,
|
|
290
|
+
overrideExceptionType: 'UnhandledRejection',
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
return errorToProperties({ event: error }, {
|
|
294
|
+
handled: false,
|
|
295
|
+
overrideExceptionType: 'UnhandledRejection',
|
|
296
|
+
defaultExceptionMessage: String(error),
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
function getUnhandledRejectionError(error) {
|
|
300
|
+
if ((0, type_checking_1.isPrimitive)(error)) {
|
|
301
|
+
return error;
|
|
302
|
+
}
|
|
303
|
+
// dig the object of the rejection out of known event types
|
|
304
|
+
try {
|
|
305
|
+
// PromiseRejectionEvents store the object of the rejection under 'reason'
|
|
306
|
+
// see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent
|
|
307
|
+
if ('reason' in error) {
|
|
308
|
+
return error.reason;
|
|
309
|
+
}
|
|
310
|
+
// something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents
|
|
311
|
+
// to CustomEvents, moving the `promise` and `reason` attributes of the PRE into
|
|
312
|
+
// the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec
|
|
313
|
+
// see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and
|
|
314
|
+
// https://github.com/getsentry/sentry-javascript/issues/2380
|
|
315
|
+
if ('detail' in error && 'reason' in error.detail) {
|
|
316
|
+
return error.detail.reason;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch (_a) {
|
|
320
|
+
// no-empty
|
|
321
|
+
}
|
|
322
|
+
return error;
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=error-conversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-conversion.js","sourceRoot":"","sources":["../../../../src/extensions/exception-autocapture/error-conversion.ts"],"names":[],"mappings":"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","sourcesContent":["// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport {\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isErrorWithStack,\n isEvent,\n isPlainObject,\n isPrimitive,\n} from './type-checking'\nimport { defaultStackParser, StackFrame, StackParser } from './stack-trace'\n\nimport { isEmptyString, isString, isUndefined } from '@posthog/core'\nimport { SeverityLevel, severityLevels } from '../../types'\nimport { getFilenameToChunkIdMap } from './chunk-ids'\n\ntype ErrorConversionArgs = {\n event: string | Event\n error?: Error\n}\n\ntype ErrorMetadata = {\n handled?: boolean\n synthetic?: boolean\n syntheticException?: Error\n overrideExceptionType?: string\n defaultExceptionType?: string\n defaultExceptionMessage?: string\n}\nexport interface ErrorProperties {\n $exception_list: Exception[]\n $exception_level?: SeverityLevel\n $exception_DOMException_code?: string\n $exception_personURL?: string\n}\n\nexport interface Exception {\n type?: string\n value?: string\n mechanism?: {\n /**\n * In theory, whether or not the exception has been handled by the user. In practice, whether or not we see it before\n * it hits the global error/rejection handlers, whether through explicit handling by the user or auto instrumentation.\n */\n handled?: boolean\n type?: string\n source?: string\n /**\n * True when `captureException` is called with anything other than an instance of `Error` (or, in the case of browser,\n * an instance of `ErrorEvent`, `DOMError`, or `DOMException`). causing us to create a synthetic error in an attempt\n * to recreate the stacktrace.\n */\n synthetic?: boolean\n }\n module?: string\n thread_id?: number\n stacktrace?: {\n frames?: StackFrame[]\n type: 'raw'\n }\n}\n\n/**\n * based on the very wonderful MIT licensed Sentry SDK\n */\n\nconst ERROR_TYPES_PATTERN =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i\n\nexport function parseStackFrames(ex: Error & { stacktrace?: string }, framesToPop: number = 0): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || ''\n\n const skipLines = getSkipFirstStackStringLines(ex)\n\n try {\n const parser = defaultStackParser\n const frames = applyChunkIds(parser(stacktrace, skipLines), parser)\n // frames are reversed so we remove the from the back of the array\n return frames.slice(0, frames.length - framesToPop)\n } catch {\n // no-empty\n }\n\n return []\n}\n\nexport function applyChunkIds(frames: StackFrame[], parser: StackParser): StackFrame[] {\n const filenameDebugIdMap = getFilenameToChunkIdMap(parser)\n\n frames.forEach((frame) => {\n if (frame.filename) {\n frame.chunk_id = filenameDebugIdMap[frame.filename]\n }\n })\n\n return frames\n}\n\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex: Error): number {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1\n }\n\n return 0\n}\n\nfunction exceptionFromError(error: Error, metadata?: ErrorMetadata): Exception {\n const frames = parseStackFrames(error)\n\n const handled = metadata?.handled ?? true\n const synthetic = metadata?.synthetic ?? false\n\n const exceptionType = metadata?.overrideExceptionType ? metadata.overrideExceptionType : error.name\n const exceptionMessage = extractMessage(error)\n return {\n type: exceptionType,\n value: exceptionMessage,\n stacktrace: {\n frames,\n type: 'raw',\n },\n mechanism: {\n handled,\n synthetic,\n },\n }\n}\n\nfunction exceptionListFromError(error: Error, metadata?: ErrorMetadata): ErrorProperties['$exception_list'] {\n const exception = exceptionFromError(error, metadata)\n if (error.cause && isError(error.cause) && error.cause !== error) {\n // Cause could be an object or a string\n // For now we only support error causes\n // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\n return [\n exception,\n ...exceptionListFromError(error.cause, {\n handled: metadata?.handled,\n synthetic: metadata?.synthetic,\n }),\n ]\n }\n return [exception]\n}\n\nfunction errorPropertiesFromError(error: Error, metadata?: ErrorMetadata): ErrorProperties {\n return {\n $exception_list: exceptionListFromError(error, metadata),\n $exception_level: 'error',\n }\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nexport function extractMessage(err: Error & { message: { error?: Error } }): string {\n const message = err.message\n\n if (message.error && typeof message.error.message === 'string') {\n return String(message.error.message)\n }\n\n return String(message)\n}\n\nfunction errorPropertiesFromString(candidate: string, metadata?: ErrorMetadata): ErrorProperties {\n // Defaults for metadata are based on what the error candidate is.\n const handled = metadata?.handled ?? true\n const synthetic = metadata?.synthetic ?? true\n\n const exceptionType = metadata?.overrideExceptionType\n ? metadata.overrideExceptionType\n : (metadata?.defaultExceptionType ?? 'Error')\n const exceptionMessage = candidate ? candidate : metadata?.defaultExceptionMessage\n\n const exception: Exception = {\n type: exceptionType,\n value: exceptionMessage,\n mechanism: {\n handled,\n synthetic,\n },\n }\n\n if (metadata?.syntheticException) {\n // Kludge: strip the last frame from a synthetically created error\n // so that it does not appear in a users stack trace\n const frames = parseStackFrames(metadata.syntheticException, 1)\n if (frames.length) {\n exception.stacktrace = { frames, type: 'raw' }\n }\n }\n\n return {\n $exception_list: [exception],\n $exception_level: 'error',\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength = 40): string {\n const keys = Object.keys(exception)\n keys.sort()\n\n if (!keys.length) {\n return '[object has no keys]'\n }\n\n for (let i = keys.length; i > 0; i--) {\n const serialized = keys.slice(0, i).join(', ')\n if (serialized.length > maxLength) {\n continue\n }\n if (i === keys.length) {\n return serialized\n }\n return serialized.length <= maxLength ? serialized : `${serialized.slice(0, maxLength)}...`\n }\n\n return ''\n}\n\nfunction isSeverityLevel(x: unknown): x is SeverityLevel {\n return isString(x) && !isEmptyString(x) && severityLevels.indexOf(x as SeverityLevel) >= 0\n}\n\nfunction errorPropertiesFromObject(candidate: Record<string, unknown>, metadata?: ErrorMetadata): ErrorProperties {\n // Defaults for metadata are based on what the error candidate is.\n const handled = metadata?.handled ?? true\n const synthetic = metadata?.synthetic ?? true\n\n const exceptionType = metadata?.overrideExceptionType\n ? metadata.overrideExceptionType\n : isEvent(candidate)\n ? candidate.constructor.name\n : 'Error'\n const exceptionMessage = `Non-Error 'exception' captured with keys: ${extractExceptionKeysForMessage(candidate)}`\n\n const exception: Exception = {\n type: exceptionType,\n value: exceptionMessage,\n mechanism: {\n handled,\n synthetic,\n },\n }\n\n if (metadata?.syntheticException) {\n // Kludge: strip the last frame from a synthetically created error\n // so that it does not appear in a users stack trace\n const frames = parseStackFrames(metadata?.syntheticException, 1)\n if (frames.length) {\n exception.stacktrace = { frames, type: 'raw' }\n }\n }\n\n return {\n $exception_list: [exception],\n $exception_level: isSeverityLevel(candidate.level) ? candidate.level : 'error',\n }\n}\n\nexport function errorToProperties({ error, event }: ErrorConversionArgs, metadata?: ErrorMetadata): ErrorProperties {\n let errorProperties: ErrorProperties = { $exception_list: [] }\n\n const candidate = error || event\n\n if (isDOMError(candidate) || isDOMException(candidate)) {\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n\n const domException = candidate as unknown as DOMException\n\n if (isErrorWithStack(candidate)) {\n errorProperties = errorPropertiesFromError(candidate, metadata)\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException')\n const message = domException.message ? `${name}: ${domException.message}` : name\n const exceptionType = isDOMError(domException) ? 'DOMError' : 'DOMException'\n errorProperties = errorPropertiesFromString(message, {\n ...metadata,\n overrideExceptionType: exceptionType,\n defaultExceptionMessage: message,\n })\n }\n if ('code' in domException) {\n errorProperties['$exception_DOMException_code'] = `${domException.code}`\n }\n return errorProperties\n } else if (isErrorEvent(candidate as ErrorEvent) && (candidate as ErrorEvent).error) {\n return errorPropertiesFromError((candidate as ErrorEvent).error as Error, metadata)\n } else if (isError(candidate)) {\n return errorPropertiesFromError(candidate, metadata)\n } else if (isPlainObject(candidate) || isEvent(candidate)) {\n // group these by using the keys available on the object\n const objectException = candidate as Record<string, unknown>\n return errorPropertiesFromObject(objectException, metadata)\n } else if (isUndefined(error) && isString(event)) {\n let name = 'Error'\n let message = event\n const groups = event.match(ERROR_TYPES_PATTERN)\n if (groups) {\n name = groups[1]\n message = groups[2]\n }\n\n return errorPropertiesFromString(message, {\n ...metadata,\n overrideExceptionType: name,\n defaultExceptionMessage: message,\n })\n } else {\n return errorPropertiesFromString(candidate as string, metadata)\n }\n}\n\nexport function unhandledRejectionToProperties([ev]: [ev: PromiseRejectionEvent]): ErrorProperties {\n const error = getUnhandledRejectionError(ev)\n\n if (isPrimitive(error)) {\n return errorPropertiesFromString(`Non-Error promise rejection captured with value: ${String(error)}`, {\n handled: false,\n synthetic: false,\n overrideExceptionType: 'UnhandledRejection',\n })\n }\n\n return errorToProperties(\n { event: error as string | Event },\n {\n handled: false,\n overrideExceptionType: 'UnhandledRejection',\n defaultExceptionMessage: String(error),\n }\n )\n}\n\nfunction getUnhandledRejectionError(error: unknown): unknown {\n if (isPrimitive(error)) {\n return error\n }\n\n // dig the object of the rejection out of known event types\n try {\n type ErrorWithReason = { reason: unknown }\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in (error as ErrorWithReason)) {\n return (error as ErrorWithReason).reason\n }\n\n type CustomEventWithDetail = { detail: { reason: unknown } }\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n if ('detail' in (error as CustomEventWithDetail) && 'reason' in (error as CustomEventWithDetail).detail) {\n return (error as CustomEventWithDetail).detail.reason\n }\n } catch {\n // no-empty\n }\n\n return error\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type StackParser = (stack: string, skipFirstLines?: number) => StackFrame[];
|
|
2
|
+
export type StackLineParserFn = (line: string) => StackFrame | undefined;
|
|
3
|
+
export type StackLineParser = [number, StackLineParserFn];
|
|
4
|
+
export interface StackFrame {
|
|
5
|
+
platform: string;
|
|
6
|
+
filename?: string;
|
|
7
|
+
function?: string;
|
|
8
|
+
module?: string;
|
|
9
|
+
lineno?: number;
|
|
10
|
+
colno?: number;
|
|
11
|
+
abs_path?: string;
|
|
12
|
+
context_line?: string;
|
|
13
|
+
pre_context?: string[];
|
|
14
|
+
post_context?: string[];
|
|
15
|
+
in_app?: boolean;
|
|
16
|
+
instruction_addr?: string;
|
|
17
|
+
addr_mode?: string;
|
|
18
|
+
vars?: {
|
|
19
|
+
[key: string]: any;
|
|
20
|
+
};
|
|
21
|
+
chunk_id?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const chromeStackLineParser: StackLineParser;
|
|
24
|
+
export declare const geckoStackLineParser: StackLineParser;
|
|
25
|
+
export declare const winjsStackLineParser: StackLineParser;
|
|
26
|
+
export declare const opera10StackLineParser: StackLineParser;
|
|
27
|
+
export declare const opera11StackLineParser: StackLineParser;
|
|
28
|
+
export declare const defaultStackLineParsers: StackLineParser[];
|
|
29
|
+
export declare const defaultStackParser: StackParser;
|
|
30
|
+
export declare function reverseAndStripFrames(stack: ReadonlyArray<StackFrame>): StackFrame[];
|
|
31
|
+
export declare function createStackParser(...parsers: StackLineParser[]): StackParser;
|