rollbar 2.26.3 → 3.0.0-alpha.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.
- package/.cursor/rules/guidelines.mdc +154 -0
- package/.github/workflows/ci.yml +32 -12
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/CLAUDE.md +201 -0
- package/Gruntfile.js +101 -48
- package/Makefile +3 -3
- package/README.md +2 -4
- package/SECURITY.md +5 -0
- package/babel.config.json +9 -0
- package/bower.json +1 -3
- package/codex.md +148 -0
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +18748 -5375
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +2 -1
- package/dist/rollbar.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +19368 -6000
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +3 -1
- package/dist/rollbar.named-amd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +18749 -5380
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +3 -1
- package/dist/rollbar.noconflict.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +19367 -6000
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +3 -1
- package/dist/rollbar.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.umd.min.js.map +1 -1
- package/docs/extension-exceptions.md +35 -30
- package/docs/migration_v0_to_v1.md +41 -38
- package/eslint.config.mjs +33 -0
- package/get_versions.js +33 -0
- package/index.d.ts +270 -231
- package/karma.conf.js +18 -27
- package/package.json +21 -21
- package/prettier.config.js +7 -0
- package/src/api.js +78 -14
- package/src/apiUtility.js +14 -11
- package/src/browser/core.js +138 -72
- package/src/browser/defaults/scrubFields.js +3 -3
- package/src/browser/detection.js +7 -8
- package/src/browser/domUtility.js +18 -8
- package/src/browser/globalSetup.js +12 -6
- package/src/browser/logger.js +1 -1
- package/src/browser/plugins/jquery.js +35 -35
- package/src/browser/predicates.js +1 -1
- package/src/browser/replay/defaults.js +71 -0
- package/src/browser/replay/recorder.js +193 -0
- package/src/browser/replay/replayMap.js +195 -0
- package/src/browser/rollbar.js +12 -8
- package/src/browser/rollbarWrapper.js +8 -5
- package/src/browser/shim.js +43 -19
- package/src/browser/snippet_callback.js +6 -4
- package/src/browser/telemetry.js +573 -361
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +26 -14
- package/src/browser/transport/xhr.js +41 -14
- package/src/browser/transport.js +93 -33
- package/src/browser/url.js +16 -8
- package/src/browser/wrapGlobals.js +27 -8
- package/src/defaults.js +3 -3
- package/src/errorParser.js +14 -11
- package/src/merge.js +32 -23
- package/src/notifier.js +16 -13
- package/src/predicates.js +43 -23
- package/src/queue.js +133 -40
- package/src/rateLimiter.js +59 -18
- package/src/react-native/logger.js +1 -1
- package/src/react-native/rollbar.js +59 -55
- package/src/react-native/transforms.js +13 -9
- package/src/react-native/transport.js +44 -34
- package/src/rollbar.js +72 -21
- package/src/scrub.js +0 -1
- package/src/server/locals.js +69 -39
- package/src/server/logger.js +4 -4
- package/src/server/parser.js +72 -47
- package/src/server/rollbar.js +135 -56
- package/src/server/sourceMap/stackTrace.js +33 -18
- package/src/server/telemetry/urlHelpers.js +9 -11
- package/src/server/telemetry.js +68 -45
- package/src/server/transforms.js +37 -21
- package/src/server/transport.js +62 -32
- package/src/telemetry.js +162 -33
- package/src/tracing/context.js +24 -0
- package/src/tracing/contextManager.js +37 -0
- package/src/tracing/defaults.js +7 -0
- package/src/tracing/exporter.js +188 -0
- package/src/tracing/hrtime.js +98 -0
- package/src/tracing/id.js +24 -0
- package/src/tracing/session.js +55 -0
- package/src/tracing/span.js +92 -0
- package/src/tracing/spanProcessor.js +15 -0
- package/src/tracing/tracer.js +46 -0
- package/src/tracing/tracing.js +89 -0
- package/src/transforms.js +33 -21
- package/src/truncation.js +8 -5
- package/src/utility/headers.js +43 -43
- package/src/utility/replace.js +9 -0
- package/src/utility/traverse.js +1 -1
- package/src/utility.js +123 -52
- package/test/api.test.js +88 -41
- package/test/apiUtility.test.js +48 -50
- package/test/browser.core.test.js +142 -141
- package/test/browser.domUtility.test.js +53 -36
- package/test/browser.predicates.test.js +14 -14
- package/test/browser.replay.recorder.test.js +416 -0
- package/test/browser.rollbar.test.js +655 -515
- package/test/browser.telemetry.test.js +46 -39
- package/test/browser.transforms.test.js +164 -139
- package/test/browser.transport.test.js +59 -50
- package/test/browser.url.test.js +13 -12
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/fixtures/replay/index.js +20 -0
- package/test/fixtures/replay/payloads.fixtures.js +229 -0
- package/test/fixtures/replay/rrwebEvents.fixtures.js +251 -0
- package/test/fixtures/replay/rrwebSyntheticEvents.fixtures.js +328 -0
- package/test/notifier.test.js +91 -79
- package/test/predicates.test.js +261 -215
- package/test/queue.test.js +231 -215
- package/test/rateLimiter.test.js +51 -43
- package/test/react-native.rollbar.test.js +150 -116
- package/test/react-native.transforms.test.js +23 -25
- package/test/react-native.transport.test.js +26 -14
- package/test/replay/index.js +2 -0
- package/test/replay/integration/api.spans.test.js +136 -0
- package/test/replay/integration/e2e.test.js +228 -0
- package/test/replay/integration/index.js +9 -0
- package/test/replay/integration/queue.replayMap.test.js +332 -0
- package/test/replay/integration/replayMap.test.js +163 -0
- package/test/replay/integration/sessionRecording.test.js +390 -0
- package/test/replay/unit/api.postSpans.test.js +150 -0
- package/test/replay/unit/index.js +7 -0
- package/test/replay/unit/queue.replayMap.test.js +225 -0
- package/test/replay/unit/replayMap.test.js +348 -0
- package/test/replay/util/index.js +5 -0
- package/test/replay/util/mockRecordFn.js +80 -0
- package/test/server.lambda.mocha.test.mjs +172 -0
- package/test/server.locals.constructor.mocha.test.mjs +80 -0
- package/test/server.locals.error-handling.mocha.test.mjs +387 -0
- package/test/server.locals.merge.mocha.test.mjs +267 -0
- package/test/server.locals.test-utils.mjs +114 -0
- package/test/server.parser.mocha.test.mjs +87 -0
- package/test/server.predicates.mocha.test.mjs +63 -0
- package/test/server.rollbar.constructor.mocha.test.mjs +199 -0
- package/test/server.rollbar.handlers.mocha.test.mjs +253 -0
- package/test/server.rollbar.logging.mocha.test.mjs +326 -0
- package/test/server.rollbar.misc.mocha.test.mjs +44 -0
- package/test/server.rollbar.test-utils.mjs +57 -0
- package/test/server.telemetry.mocha.test.mjs +377 -0
- package/test/server.transforms.data.mocha.test.mjs +163 -0
- package/test/server.transforms.error.mocha.test.mjs +199 -0
- package/test/server.transforms.request.mocha.test.mjs +208 -0
- package/test/server.transforms.scrub.mocha.test.mjs +140 -0
- package/test/server.transforms.sourcemaps.mocha.test.mjs +122 -0
- package/test/server.transforms.test-utils.mjs +62 -0
- package/test/server.transport.mocha.test.mjs +269 -0
- package/test/telemetry.test.js +178 -38
- package/test/tracing/contextManager.test.js +28 -0
- package/test/tracing/exporter.toPayload.test.js +400 -0
- package/test/tracing/id.test.js +24 -0
- package/test/tracing/span.test.js +183 -0
- package/test/tracing/spanProcessor.test.js +73 -0
- package/test/tracing/tracing.test.js +105 -0
- package/test/transforms.test.js +70 -68
- package/test/truncation.test.js +57 -55
- package/test/utility.test.js +310 -228
- package/webpack.config.js +36 -70
- package/.eslintignore +0 -7
- package/.gitmodules +0 -3
- package/test/server.lambda.test.js +0 -177
- package/test/server.locals.test.js +0 -841
- package/test/server.parser.test.js +0 -72
- package/test/server.predicates.test.js +0 -89
- package/test/server.rollbar.test.js +0 -676
- package/test/server.telemetry.test.js +0 -318
- package/test/server.transforms.test.js +0 -1099
- package/test/server.transport.test.js +0 -201
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
/* globals sinon */
|
|
5
5
|
|
|
6
6
|
// Use minimal browser package, with no optional components added.
|
|
7
|
-
|
|
7
|
+
import Rollbar from '../src/browser/core.js';
|
|
8
8
|
|
|
9
|
-
describe('options.captureUncaught', function() {
|
|
9
|
+
describe('options.captureUncaught', function () {
|
|
10
10
|
beforeEach(function (done) {
|
|
11
11
|
// Load the HTML page, so errors can be generated.
|
|
12
12
|
document.write(window.__html__['examples/error.html']);
|
|
@@ -21,51 +21,50 @@ describe('options.captureUncaught', function() {
|
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
function stubResponse(server) {
|
|
24
|
-
server.respondWith('POST', 'api/1/item',
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
]
|
|
30
|
-
);
|
|
24
|
+
server.respondWith('POST', 'api/1/item', [
|
|
25
|
+
200,
|
|
26
|
+
{ 'Content-Type': 'application/json' },
|
|
27
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
28
|
+
]);
|
|
31
29
|
}
|
|
32
30
|
|
|
33
|
-
it('should capture when enabled in constructor', function(done) {
|
|
31
|
+
it('should capture when enabled in constructor', function (done) {
|
|
34
32
|
var server = window.server;
|
|
35
33
|
stubResponse(server);
|
|
36
34
|
server.requests.length = 0;
|
|
37
35
|
|
|
38
36
|
var options = {
|
|
39
37
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
40
|
-
captureUncaught: true
|
|
38
|
+
captureUncaught: true,
|
|
41
39
|
};
|
|
42
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
40
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
43
41
|
|
|
44
42
|
var element = document.getElementById('throw-error');
|
|
45
43
|
element.click();
|
|
46
44
|
|
|
47
|
-
setTimeout(function() {
|
|
45
|
+
setTimeout(function () {
|
|
48
46
|
server.respond();
|
|
49
47
|
|
|
50
48
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
51
49
|
|
|
52
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
53
50
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
54
|
-
expect(body.data.notifier.diagnostic.raw_error.message).to.eql(
|
|
51
|
+
expect(body.data.notifier.diagnostic.raw_error.message).to.eql(
|
|
52
|
+
'test error',
|
|
53
|
+
);
|
|
55
54
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(true);
|
|
56
55
|
|
|
57
56
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
58
57
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
59
58
|
// won't affect other tests.
|
|
60
59
|
rollbar.configure({
|
|
61
|
-
captureUncaught: false
|
|
60
|
+
captureUncaught: false,
|
|
62
61
|
});
|
|
63
62
|
|
|
64
63
|
done();
|
|
65
64
|
}, 1);
|
|
66
65
|
});
|
|
67
66
|
|
|
68
|
-
it('should respond to enable/disable in configure', function(done) {
|
|
67
|
+
it('should respond to enable/disable in configure', function (done) {
|
|
69
68
|
var server = window.server;
|
|
70
69
|
var element = document.getElementById('throw-error');
|
|
71
70
|
stubResponse(server);
|
|
@@ -73,41 +72,40 @@ describe('options.captureUncaught', function() {
|
|
|
73
72
|
|
|
74
73
|
var options = {
|
|
75
74
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
76
|
-
captureUncaught: false
|
|
75
|
+
captureUncaught: false,
|
|
77
76
|
};
|
|
78
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
77
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
79
78
|
|
|
80
79
|
element.click();
|
|
81
80
|
|
|
82
|
-
setTimeout(function() {
|
|
81
|
+
setTimeout(function () {
|
|
83
82
|
server.respond();
|
|
84
83
|
expect(server.requests.length).to.eql(0); // Disabled, no event
|
|
85
84
|
server.requests.length = 0;
|
|
86
85
|
|
|
87
86
|
rollbar.configure({
|
|
88
|
-
captureUncaught: true
|
|
87
|
+
captureUncaught: true,
|
|
89
88
|
});
|
|
90
89
|
|
|
91
90
|
element.click();
|
|
92
91
|
|
|
93
|
-
setTimeout(function() {
|
|
92
|
+
setTimeout(function () {
|
|
94
93
|
server.respond();
|
|
95
94
|
|
|
96
95
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
97
96
|
|
|
98
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
99
97
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
100
98
|
expect(body.data.notifier.diagnostic.is_anonymous).to.not.be.ok();
|
|
101
99
|
|
|
102
100
|
server.requests.length = 0;
|
|
103
101
|
|
|
104
102
|
rollbar.configure({
|
|
105
|
-
captureUncaught: false
|
|
103
|
+
captureUncaught: false,
|
|
106
104
|
});
|
|
107
105
|
|
|
108
106
|
element.click();
|
|
109
107
|
|
|
110
|
-
setTimeout(function() {
|
|
108
|
+
setTimeout(function () {
|
|
111
109
|
server.respond();
|
|
112
110
|
expect(server.requests.length).to.eql(0); // Disabled, no event
|
|
113
111
|
|
|
@@ -120,36 +118,35 @@ describe('options.captureUncaught', function() {
|
|
|
120
118
|
// Test case expects Chrome, which is the currently configured karma js/browser
|
|
121
119
|
// engine at the time of this comment. However, karma's Chrome and ChromeHeadless
|
|
122
120
|
// don't actually behave like real Chrome so we settle for stubbing some things.
|
|
123
|
-
it('should capture external error data when inspectAnonymousErrors is true', function(done) {
|
|
121
|
+
it('should capture external error data when inspectAnonymousErrors is true', function (done) {
|
|
124
122
|
var server = window.server;
|
|
125
123
|
stubResponse(server);
|
|
126
124
|
server.requests.length = 0;
|
|
127
125
|
|
|
128
126
|
// We're supposedly running on ChromeHeadless, but still need to spoof Chrome. :\
|
|
129
|
-
window.chrome = { runtime: true};
|
|
127
|
+
window.chrome = { runtime: true };
|
|
130
128
|
|
|
131
129
|
var options = {
|
|
132
130
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
133
131
|
captureUncaught: true,
|
|
134
|
-
inspectAnonymousErrors: true
|
|
132
|
+
inspectAnonymousErrors: true,
|
|
135
133
|
};
|
|
136
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
134
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
137
135
|
|
|
138
136
|
// Simulate receiving onerror without an error object.
|
|
139
137
|
rollbar.anonymousErrorsPending += 1;
|
|
140
138
|
|
|
141
139
|
try {
|
|
142
|
-
throw new Error('anon error')
|
|
143
|
-
} catch(e) {
|
|
140
|
+
throw new Error('anon error');
|
|
141
|
+
} catch (e) {
|
|
144
142
|
Error.prepareStackTrace(e);
|
|
145
143
|
}
|
|
146
144
|
|
|
147
|
-
setTimeout(function() {
|
|
145
|
+
setTimeout(function () {
|
|
148
146
|
server.respond();
|
|
149
147
|
|
|
150
148
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
151
149
|
|
|
152
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
153
150
|
expect(body.data.body.trace.exception.message).to.eql('anon error');
|
|
154
151
|
expect(body.data.notifier.diagnostic.is_anonymous).to.eql(true);
|
|
155
152
|
|
|
@@ -157,32 +154,32 @@ describe('options.captureUncaught', function() {
|
|
|
157
154
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
158
155
|
// won't affect other tests.
|
|
159
156
|
rollbar.configure({
|
|
160
|
-
captureUncaught: false
|
|
157
|
+
captureUncaught: false,
|
|
161
158
|
});
|
|
162
159
|
|
|
163
160
|
done();
|
|
164
161
|
}, 1);
|
|
165
162
|
});
|
|
166
163
|
|
|
167
|
-
it('should ignore duplicate errors by default', function(done) {
|
|
164
|
+
it('should ignore duplicate errors by default', function (done) {
|
|
168
165
|
var server = window.server;
|
|
169
166
|
stubResponse(server);
|
|
170
167
|
server.requests.length = 0;
|
|
171
168
|
|
|
172
169
|
var options = {
|
|
173
170
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
174
|
-
captureUncaught: true
|
|
171
|
+
captureUncaught: true,
|
|
175
172
|
};
|
|
176
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
173
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
177
174
|
|
|
178
175
|
var element = document.getElementById('throw-error');
|
|
179
176
|
|
|
180
177
|
// generate same error twice
|
|
181
|
-
for(var i = 0; i < 2; i++) {
|
|
178
|
+
for (var i = 0; i < 2; i++) {
|
|
182
179
|
element.click(); // use for loop to ensure the stack traces have identical line/col info
|
|
183
180
|
}
|
|
184
181
|
|
|
185
|
-
setTimeout(function() {
|
|
182
|
+
setTimeout(function () {
|
|
186
183
|
server.respond();
|
|
187
184
|
|
|
188
185
|
// transmit only once
|
|
@@ -190,21 +187,20 @@ describe('options.captureUncaught', function() {
|
|
|
190
187
|
|
|
191
188
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
192
189
|
|
|
193
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
194
190
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
195
191
|
|
|
196
192
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
197
193
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
198
194
|
// won't affect other tests.
|
|
199
195
|
rollbar.configure({
|
|
200
|
-
captureUncaught: false
|
|
196
|
+
captureUncaught: false,
|
|
201
197
|
});
|
|
202
198
|
|
|
203
199
|
done();
|
|
204
200
|
}, 1);
|
|
205
201
|
});
|
|
206
202
|
|
|
207
|
-
it('should transmit duplicate errors when set in config', function(done) {
|
|
203
|
+
it('should transmit duplicate errors when set in config', function (done) {
|
|
208
204
|
var server = window.server;
|
|
209
205
|
stubResponse(server);
|
|
210
206
|
server.requests.length = 0;
|
|
@@ -212,18 +208,18 @@ describe('options.captureUncaught', function() {
|
|
|
212
208
|
var options = {
|
|
213
209
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
214
210
|
captureUncaught: true,
|
|
215
|
-
ignoreDuplicateErrors: false
|
|
211
|
+
ignoreDuplicateErrors: false,
|
|
216
212
|
};
|
|
217
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
213
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
218
214
|
|
|
219
215
|
var element = document.getElementById('throw-error');
|
|
220
216
|
|
|
221
217
|
// generate same error twice
|
|
222
|
-
for(var i = 0; i < 2; i++) {
|
|
218
|
+
for (var i = 0; i < 2; i++) {
|
|
223
219
|
element.click(); // use for loop to ensure the stack traces have identical line/col info
|
|
224
220
|
}
|
|
225
221
|
|
|
226
|
-
setTimeout(function() {
|
|
222
|
+
setTimeout(function () {
|
|
227
223
|
server.respond();
|
|
228
224
|
|
|
229
225
|
// transmit both errors
|
|
@@ -231,53 +227,53 @@ describe('options.captureUncaught', function() {
|
|
|
231
227
|
|
|
232
228
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
233
229
|
|
|
234
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
235
230
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
236
231
|
|
|
237
232
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
238
233
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
239
234
|
// won't affect other tests.
|
|
240
235
|
rollbar.configure({
|
|
241
|
-
captureUncaught: false
|
|
236
|
+
captureUncaught: false,
|
|
242
237
|
});
|
|
243
238
|
|
|
244
239
|
done();
|
|
245
240
|
}, 1);
|
|
246
241
|
});
|
|
247
|
-
it('should send DOMException as trace_chain', function(done) {
|
|
242
|
+
it('should send DOMException as trace_chain', function (done) {
|
|
248
243
|
var server = window.server;
|
|
249
244
|
stubResponse(server);
|
|
250
245
|
server.requests.length = 0;
|
|
251
246
|
|
|
252
247
|
var options = {
|
|
253
248
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
254
|
-
captureUncaught: true
|
|
249
|
+
captureUncaught: true,
|
|
255
250
|
};
|
|
256
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
251
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
257
252
|
|
|
258
253
|
var element = document.getElementById('throw-dom-exception');
|
|
259
254
|
element.click();
|
|
260
255
|
|
|
261
|
-
setTimeout(function() {
|
|
256
|
+
setTimeout(function () {
|
|
262
257
|
server.respond();
|
|
263
258
|
|
|
264
259
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
265
260
|
|
|
266
|
-
expect(body.
|
|
267
|
-
|
|
261
|
+
expect(body.data.body.trace_chain[0].exception.message).to.eql(
|
|
262
|
+
'test DOMException',
|
|
263
|
+
);
|
|
268
264
|
|
|
269
265
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
270
266
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
271
267
|
// won't affect other tests.
|
|
272
268
|
rollbar.configure({
|
|
273
|
-
captureUncaught: false
|
|
269
|
+
captureUncaught: false,
|
|
274
270
|
});
|
|
275
271
|
|
|
276
272
|
done();
|
|
277
273
|
}, 1);
|
|
278
274
|
});
|
|
279
275
|
|
|
280
|
-
it('should capture exta frames when stackTraceLimit is set', function(done) {
|
|
276
|
+
it('should capture exta frames when stackTraceLimit is set', function (done) {
|
|
281
277
|
var server = window.server;
|
|
282
278
|
stubResponse(server);
|
|
283
279
|
server.requests.length = 0;
|
|
@@ -286,19 +282,18 @@ describe('options.captureUncaught', function() {
|
|
|
286
282
|
var options = {
|
|
287
283
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
288
284
|
captureUncaught: true,
|
|
289
|
-
stackTraceLimit: 50
|
|
285
|
+
stackTraceLimit: 50,
|
|
290
286
|
};
|
|
291
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
287
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
292
288
|
|
|
293
289
|
var element = document.getElementById('throw-depp-stack-error');
|
|
294
290
|
element.click();
|
|
295
291
|
|
|
296
|
-
setTimeout(function() {
|
|
292
|
+
setTimeout(function () {
|
|
297
293
|
server.respond();
|
|
298
294
|
|
|
299
295
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
300
296
|
|
|
301
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
302
297
|
expect(body.data.body.trace.exception.message).to.eql('deep stack error');
|
|
303
298
|
expect(body.data.body.trace.frames.length).to.be.above(20);
|
|
304
299
|
|
|
@@ -307,7 +302,7 @@ describe('options.captureUncaught', function() {
|
|
|
307
302
|
// won't affect other tests.
|
|
308
303
|
rollbar.configure({
|
|
309
304
|
captureUncaught: false,
|
|
310
|
-
stackTraceLimit: oldLimit // reset to default
|
|
305
|
+
stackTraceLimit: oldLimit, // reset to default
|
|
311
306
|
});
|
|
312
307
|
|
|
313
308
|
done();
|
|
@@ -315,7 +310,7 @@ describe('options.captureUncaught', function() {
|
|
|
315
310
|
});
|
|
316
311
|
});
|
|
317
312
|
|
|
318
|
-
describe('options.captureUnhandledRejections', function() {
|
|
313
|
+
describe('options.captureUnhandledRejections', function () {
|
|
319
314
|
beforeEach(function (done) {
|
|
320
315
|
window.server = sinon.createFakeServer();
|
|
321
316
|
done();
|
|
@@ -327,39 +322,36 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
327
322
|
});
|
|
328
323
|
|
|
329
324
|
function stubResponse(server) {
|
|
330
|
-
server.respondWith('POST', 'api/1/item',
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
]
|
|
336
|
-
);
|
|
325
|
+
server.respondWith('POST', 'api/1/item', [
|
|
326
|
+
200,
|
|
327
|
+
{ 'Content-Type': 'application/json' },
|
|
328
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
329
|
+
]);
|
|
337
330
|
}
|
|
338
331
|
|
|
339
|
-
it('should capture when enabled in constructor', function(done) {
|
|
332
|
+
it('should capture when enabled in constructor', function (done) {
|
|
340
333
|
var server = window.server;
|
|
341
334
|
stubResponse(server);
|
|
342
335
|
server.requests.length = 0;
|
|
343
336
|
|
|
344
337
|
var options = {
|
|
345
338
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
346
|
-
captureUnhandledRejections: true
|
|
339
|
+
captureUnhandledRejections: true,
|
|
347
340
|
};
|
|
348
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
341
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
349
342
|
|
|
350
343
|
Promise.reject(new Error('test reject'));
|
|
351
344
|
|
|
352
|
-
setTimeout(function() {
|
|
345
|
+
setTimeout(function () {
|
|
353
346
|
server.respond();
|
|
354
347
|
|
|
355
348
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
356
349
|
|
|
357
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
358
350
|
expect(body.data.body.trace.exception.message).to.eql('test reject');
|
|
359
351
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(true);
|
|
360
352
|
|
|
361
353
|
rollbar.configure({
|
|
362
|
-
captureUnhandledRejections: false
|
|
354
|
+
captureUnhandledRejections: false,
|
|
363
355
|
});
|
|
364
356
|
window.removeEventListener('unhandledrejection', window._rollbarURH);
|
|
365
357
|
|
|
@@ -367,35 +359,34 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
367
359
|
}, 500);
|
|
368
360
|
});
|
|
369
361
|
|
|
370
|
-
it('should respond to enable in configure', function(done) {
|
|
362
|
+
it('should respond to enable in configure', function (done) {
|
|
371
363
|
var server = window.server;
|
|
372
364
|
stubResponse(server);
|
|
373
365
|
server.requests.length = 0;
|
|
374
366
|
|
|
375
367
|
var options = {
|
|
376
368
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
377
|
-
captureUnhandledRejections: false
|
|
369
|
+
captureUnhandledRejections: false,
|
|
378
370
|
};
|
|
379
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
371
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
380
372
|
|
|
381
373
|
rollbar.configure({
|
|
382
|
-
captureUnhandledRejections: true
|
|
374
|
+
captureUnhandledRejections: true,
|
|
383
375
|
});
|
|
384
376
|
|
|
385
377
|
Promise.reject(new Error('test reject'));
|
|
386
378
|
|
|
387
|
-
setTimeout(function() {
|
|
379
|
+
setTimeout(function () {
|
|
388
380
|
server.respond();
|
|
389
381
|
|
|
390
382
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
391
383
|
|
|
392
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
393
384
|
expect(body.data.body.trace.exception.message).to.eql('test reject');
|
|
394
385
|
|
|
395
386
|
server.requests.length = 0;
|
|
396
387
|
|
|
397
388
|
rollbar.configure({
|
|
398
|
-
captureUnhandledRejections: false
|
|
389
|
+
captureUnhandledRejections: false,
|
|
399
390
|
});
|
|
400
391
|
window.removeEventListener('unhandledrejection', window._rollbarURH);
|
|
401
392
|
|
|
@@ -403,24 +394,24 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
403
394
|
}, 500);
|
|
404
395
|
});
|
|
405
396
|
|
|
406
|
-
it('should respond to disable in configure', function(done) {
|
|
397
|
+
it('should respond to disable in configure', function (done) {
|
|
407
398
|
var server = window.server;
|
|
408
399
|
stubResponse(server);
|
|
409
400
|
server.requests.length = 0;
|
|
410
401
|
|
|
411
402
|
var options = {
|
|
412
403
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
413
|
-
captureUnhandledRejections: true
|
|
404
|
+
captureUnhandledRejections: true,
|
|
414
405
|
};
|
|
415
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
406
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
416
407
|
|
|
417
408
|
rollbar.configure({
|
|
418
|
-
captureUnhandledRejections: false
|
|
409
|
+
captureUnhandledRejections: false,
|
|
419
410
|
});
|
|
420
411
|
|
|
421
412
|
Promise.reject(new Error('test reject'));
|
|
422
413
|
|
|
423
|
-
setTimeout(function() {
|
|
414
|
+
setTimeout(function () {
|
|
424
415
|
server.respond();
|
|
425
416
|
|
|
426
417
|
expect(server.requests.length).to.eql(0); // Disabled, no event
|
|
@@ -430,10 +421,10 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
430
421
|
|
|
431
422
|
done();
|
|
432
423
|
}, 500);
|
|
433
|
-
})
|
|
424
|
+
});
|
|
434
425
|
});
|
|
435
426
|
|
|
436
|
-
describe('log', function() {
|
|
427
|
+
describe('log', function () {
|
|
437
428
|
beforeEach(function (done) {
|
|
438
429
|
window.server = sinon.createFakeServer();
|
|
439
430
|
done();
|
|
@@ -445,84 +436,88 @@ describe('log', function() {
|
|
|
445
436
|
});
|
|
446
437
|
|
|
447
438
|
function stubResponse(server) {
|
|
448
|
-
server.respondWith('POST', 'api/1/item',
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
]
|
|
454
|
-
);
|
|
439
|
+
server.respondWith('POST', 'api/1/item', [
|
|
440
|
+
200,
|
|
441
|
+
{ 'Content-Type': 'application/json' },
|
|
442
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
443
|
+
]);
|
|
455
444
|
}
|
|
456
445
|
|
|
457
|
-
it('should send message when called with message and extra args', function(done) {
|
|
446
|
+
it('should send message when called with message and extra args', function (done) {
|
|
458
447
|
var server = window.server;
|
|
459
448
|
stubResponse(server);
|
|
460
449
|
server.requests.length = 0;
|
|
461
450
|
|
|
462
451
|
var options = {
|
|
463
|
-
accessToken: 'POST_CLIENT_ITEM_TOKEN'
|
|
452
|
+
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
464
453
|
};
|
|
465
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
454
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
466
455
|
|
|
467
|
-
rollbar.log('test message', {
|
|
456
|
+
rollbar.log('test message', { foo: 'bar' });
|
|
468
457
|
|
|
469
|
-
setTimeout(function() {
|
|
458
|
+
setTimeout(function () {
|
|
470
459
|
server.respond();
|
|
471
460
|
|
|
472
461
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
473
462
|
|
|
474
463
|
expect(body.data.body.message.body).to.eql('test message');
|
|
475
|
-
expect(body.data.body.message.extra).to.eql({
|
|
464
|
+
expect(body.data.body.message.extra).to.eql({ foo: 'bar' });
|
|
476
465
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(undefined);
|
|
477
|
-
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
466
|
+
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
467
|
+
'string',
|
|
468
|
+
'object',
|
|
469
|
+
]);
|
|
478
470
|
|
|
479
471
|
done();
|
|
480
472
|
}, 1);
|
|
481
|
-
})
|
|
473
|
+
});
|
|
482
474
|
|
|
483
|
-
it('should send exception when called with error and extra args', function(done) {
|
|
475
|
+
it('should send exception when called with error and extra args', function (done) {
|
|
484
476
|
var server = window.server;
|
|
485
477
|
stubResponse(server);
|
|
486
478
|
server.requests.length = 0;
|
|
487
479
|
|
|
488
480
|
var options = {
|
|
489
|
-
accessToken: 'POST_CLIENT_ITEM_TOKEN'
|
|
481
|
+
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
490
482
|
};
|
|
491
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
483
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
492
484
|
|
|
493
|
-
rollbar.log(new Error('test error'), {
|
|
485
|
+
rollbar.log(new Error('test error'), { foo: 'bar' });
|
|
494
486
|
|
|
495
|
-
setTimeout(function() {
|
|
487
|
+
setTimeout(function () {
|
|
496
488
|
server.respond();
|
|
497
489
|
|
|
498
490
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
499
491
|
|
|
500
492
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
501
|
-
expect(body.data.body.trace.extra).to.eql({
|
|
493
|
+
expect(body.data.body.trace.extra).to.eql({ foo: 'bar' });
|
|
502
494
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(undefined);
|
|
503
|
-
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
495
|
+
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
496
|
+
'error',
|
|
497
|
+
'object',
|
|
498
|
+
]);
|
|
504
499
|
|
|
505
500
|
done();
|
|
506
501
|
}, 1);
|
|
507
|
-
})
|
|
502
|
+
});
|
|
508
503
|
|
|
509
|
-
it('should add custom data when called with error context', function(done) {
|
|
504
|
+
it('should add custom data when called with error context', function (done) {
|
|
510
505
|
var server = window.server;
|
|
511
506
|
stubResponse(server);
|
|
512
507
|
server.requests.length = 0;
|
|
513
508
|
|
|
514
509
|
var options = {
|
|
515
510
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
516
|
-
addErrorContext: true
|
|
511
|
+
addErrorContext: true,
|
|
517
512
|
};
|
|
518
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
513
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
519
514
|
|
|
520
515
|
var err = new Error('test error');
|
|
521
516
|
err.rollbarContext = { err: 'test' };
|
|
522
517
|
|
|
523
|
-
rollbar.error(err, {
|
|
518
|
+
rollbar.error(err, { foo: 'bar' });
|
|
524
519
|
|
|
525
|
-
setTimeout(function() {
|
|
520
|
+
setTimeout(function () {
|
|
526
521
|
server.respond();
|
|
527
522
|
|
|
528
523
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
@@ -533,21 +528,21 @@ describe('log', function() {
|
|
|
533
528
|
|
|
534
529
|
done();
|
|
535
530
|
}, 1);
|
|
536
|
-
})
|
|
531
|
+
});
|
|
537
532
|
|
|
538
|
-
it('should remove circular references in custom data', function(done) {
|
|
533
|
+
it('should remove circular references in custom data', function (done) {
|
|
539
534
|
var server = window.server;
|
|
540
535
|
stubResponse(server);
|
|
541
536
|
server.requests.length = 0;
|
|
542
537
|
|
|
543
538
|
var options = {
|
|
544
539
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
545
|
-
addErrorContext: true
|
|
540
|
+
addErrorContext: true,
|
|
546
541
|
};
|
|
547
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
542
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
548
543
|
|
|
549
544
|
var err = new Error('test error');
|
|
550
|
-
var contextData = { extra: 'baz' }
|
|
545
|
+
var contextData = { extra: 'baz' };
|
|
551
546
|
contextData.data = contextData;
|
|
552
547
|
var context = { err: 'test', contextData: contextData };
|
|
553
548
|
err.rollbarContext = context;
|
|
@@ -561,7 +556,7 @@ describe('log', function() {
|
|
|
561
556
|
custom.self = custom;
|
|
562
557
|
rollbar.error(err, custom);
|
|
563
558
|
|
|
564
|
-
setTimeout(function() {
|
|
559
|
+
setTimeout(function () {
|
|
565
560
|
server.respond();
|
|
566
561
|
|
|
567
562
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
@@ -575,71 +570,77 @@ describe('log', function() {
|
|
|
575
570
|
expect(body.data.custom.notCircular2).to.eql(notCircular);
|
|
576
571
|
|
|
577
572
|
expect(body.data.custom.self).to.eql(
|
|
578
|
-
'Removed circular reference: object'
|
|
573
|
+
'Removed circular reference: object',
|
|
579
574
|
);
|
|
580
575
|
expect(body.data.custom.array).to.eql([
|
|
581
|
-
'one',
|
|
576
|
+
'one',
|
|
577
|
+
'two',
|
|
578
|
+
'Removed circular reference: array',
|
|
582
579
|
]);
|
|
583
580
|
expect(body.data.custom.contextData).to.eql({
|
|
584
581
|
extra: 'baz',
|
|
585
|
-
data: 'Removed circular reference: object'
|
|
582
|
+
data: 'Removed circular reference: object',
|
|
586
583
|
});
|
|
587
584
|
|
|
588
585
|
done();
|
|
589
586
|
}, 1);
|
|
590
|
-
})
|
|
587
|
+
});
|
|
591
588
|
|
|
592
|
-
it('should send message when called with only null arguments', function(done) {
|
|
589
|
+
it('should send message when called with only null arguments', function (done) {
|
|
593
590
|
var server = window.server;
|
|
594
591
|
stubResponse(server);
|
|
595
592
|
server.requests.length = 0;
|
|
596
593
|
|
|
597
594
|
var options = {
|
|
598
595
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
599
|
-
captureUnhandledRejections: true
|
|
596
|
+
captureUnhandledRejections: true,
|
|
600
597
|
};
|
|
601
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
598
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
602
599
|
|
|
603
600
|
rollbar.log(null);
|
|
604
601
|
|
|
605
|
-
setTimeout(function() {
|
|
602
|
+
setTimeout(function () {
|
|
606
603
|
server.respond();
|
|
607
604
|
|
|
608
605
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
609
606
|
|
|
610
|
-
expect(body.data.body.message.body).to.eql(
|
|
607
|
+
expect(body.data.body.message.body).to.eql(
|
|
608
|
+
'Item sent with null or missing arguments.',
|
|
609
|
+
);
|
|
611
610
|
expect(body.data.notifier.diagnostic.original_arg_types).to.eql(['null']);
|
|
612
611
|
|
|
613
612
|
done();
|
|
614
613
|
}, 1);
|
|
615
|
-
})
|
|
614
|
+
});
|
|
616
615
|
|
|
617
|
-
it('should skipFrames when set', function(done) {
|
|
616
|
+
it('should skipFrames when set', function (done) {
|
|
618
617
|
var server = window.server;
|
|
619
618
|
stubResponse(server);
|
|
620
619
|
server.requests.length = 0;
|
|
621
620
|
|
|
622
621
|
var options = {
|
|
623
622
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
624
|
-
captureUnhandledRejections: true
|
|
623
|
+
captureUnhandledRejections: true,
|
|
625
624
|
};
|
|
626
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
625
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
627
626
|
|
|
628
627
|
var error = new Error('error with stack');
|
|
629
628
|
|
|
630
629
|
rollbar.log(error);
|
|
631
630
|
rollbar.log(error, { skipFrames: 1 });
|
|
632
631
|
|
|
633
|
-
setTimeout(function() {
|
|
632
|
+
setTimeout(function () {
|
|
634
633
|
server.respond();
|
|
635
634
|
|
|
636
|
-
var frames1 = JSON.parse(server.requests[0].requestBody).data.body.trace
|
|
637
|
-
|
|
635
|
+
var frames1 = JSON.parse(server.requests[0].requestBody).data.body.trace
|
|
636
|
+
.frames;
|
|
637
|
+
var frames2 = JSON.parse(server.requests[1].requestBody).data.body.trace
|
|
638
|
+
.frames;
|
|
638
639
|
|
|
639
640
|
expect(frames1.length).to.eql(frames2.length + 1);
|
|
640
|
-
expect(frames1.slice(0
|
|
641
|
+
expect(frames1.slice(0, -1)).to.eql(frames2);
|
|
641
642
|
|
|
642
643
|
done();
|
|
643
644
|
}, 1);
|
|
644
|
-
})
|
|
645
|
+
});
|
|
645
646
|
});
|