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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* globals it */
|
|
4
4
|
/* globals sinon */
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import Rollbar from '../src/browser/rollbar.js';
|
|
7
7
|
|
|
8
8
|
const DUMMY_TRACE_ID = 'some-trace-id';
|
|
9
9
|
const DUMMY_SPAN_ID = 'some-span-id';
|
|
@@ -13,50 +13,50 @@ const ValidOpenTracingTracerStub = {
|
|
|
13
13
|
return {
|
|
14
14
|
active: () => {
|
|
15
15
|
return {
|
|
16
|
-
setTag: () => {
|
|
16
|
+
setTag: () => {},
|
|
17
17
|
context: () => {
|
|
18
18
|
return {
|
|
19
19
|
toTraceId: () => DUMMY_TRACE_ID,
|
|
20
|
-
toSpanId: () => DUMMY_SPAN_ID
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
20
|
+
toSpanId: () => DUMMY_SPAN_ID,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
const InvalidOpenTracingTracerStub = {
|
|
30
|
-
foo: () => {
|
|
30
|
+
foo: () => {},
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
function TestClientGen() {
|
|
34
|
-
var TestClient = function() {
|
|
34
|
+
var TestClient = function () {
|
|
35
35
|
this.transforms = [];
|
|
36
36
|
this.predicates = [];
|
|
37
37
|
this.notifier = {
|
|
38
|
-
addTransform: function(t) {
|
|
38
|
+
addTransform: function (t) {
|
|
39
39
|
this.transforms.push(t);
|
|
40
40
|
return this.notifier;
|
|
41
|
-
}.bind(this)
|
|
41
|
+
}.bind(this),
|
|
42
42
|
};
|
|
43
43
|
this.queue = {
|
|
44
|
-
addPredicate: function(p) {
|
|
44
|
+
addPredicate: function (p) {
|
|
45
45
|
this.predicates.push(p);
|
|
46
46
|
return this.queue;
|
|
47
|
-
}.bind(this)
|
|
47
|
+
}.bind(this),
|
|
48
48
|
};
|
|
49
49
|
this.logCalls = [];
|
|
50
50
|
var logs = 'log,debug,info,warn,warning,error,critical'.split(',');
|
|
51
|
-
for (var i=0, len=logs.length; i < len; i++) {
|
|
51
|
+
for (var i = 0, len = logs.length; i < len; i++) {
|
|
52
52
|
var fn = logs[i].slice(0);
|
|
53
|
-
this[fn] = function(fn, item) {
|
|
54
|
-
this.logCalls.push({func: fn, item: item})
|
|
55
|
-
}.bind(this, fn)
|
|
53
|
+
this[fn] = function (fn, item) {
|
|
54
|
+
this.logCalls.push({ func: fn, item: item });
|
|
55
|
+
}.bind(this, fn);
|
|
56
56
|
}
|
|
57
57
|
this.options = {};
|
|
58
58
|
this.payloadData = {};
|
|
59
|
-
this.configure = function(o, payloadData) {
|
|
59
|
+
this.configure = function (o, payloadData) {
|
|
60
60
|
this.options = o;
|
|
61
61
|
this.payloadData = payloadData;
|
|
62
62
|
};
|
|
@@ -66,14 +66,14 @@ function TestClientGen() {
|
|
|
66
66
|
return TestClient;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
describe('Rollbar()', function() {
|
|
69
|
+
describe('Rollbar()', function () {
|
|
70
70
|
afterEach(function () {
|
|
71
71
|
window.rollbar.configure({ autoInstrument: false, captureUncaught: false });
|
|
72
72
|
});
|
|
73
73
|
|
|
74
|
-
it('should have all of the expected methods with a real client', function(done) {
|
|
74
|
+
it('should have all of the expected methods with a real client', function (done) {
|
|
75
75
|
var options = {};
|
|
76
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
76
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
77
77
|
|
|
78
78
|
expect(rollbar).to.have.property('log');
|
|
79
79
|
expect(rollbar).to.have.property('debug');
|
|
@@ -86,10 +86,10 @@ describe('Rollbar()', function() {
|
|
|
86
86
|
done();
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
-
it('should have all of the expected methods', function(done) {
|
|
89
|
+
it('should have all of the expected methods', function (done) {
|
|
90
90
|
var client = new (TestClientGen())();
|
|
91
91
|
var options = {};
|
|
92
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
92
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
93
93
|
|
|
94
94
|
expect(rollbar).to.have.property('log');
|
|
95
95
|
expect(rollbar).to.have.property('debug');
|
|
@@ -102,51 +102,57 @@ describe('Rollbar()', function() {
|
|
|
102
102
|
done();
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
-
it
|
|
105
|
+
it('should have some default options', function (done) {
|
|
106
106
|
var client = new (TestClientGen())();
|
|
107
107
|
var options = {};
|
|
108
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
108
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
109
109
|
|
|
110
110
|
expect(rollbar.options.scrubFields).to.contain('password');
|
|
111
111
|
done();
|
|
112
112
|
});
|
|
113
113
|
|
|
114
|
-
it
|
|
114
|
+
it('should merge with the defaults options', function (done) {
|
|
115
115
|
var client = new (TestClientGen())();
|
|
116
116
|
var options = {
|
|
117
|
-
scrubFields: [
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
scrubFields: ['foobar'],
|
|
118
|
+
recorder: {
|
|
119
|
+
enabled: true,
|
|
120
|
+
},
|
|
121
|
+
tracing: {
|
|
122
|
+
endpoint: 'api.rollbar.com/api/1/tracing/',
|
|
123
|
+
},
|
|
120
124
|
};
|
|
121
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
125
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
122
126
|
|
|
123
127
|
expect(rollbar.options.scrubFields).to.contain('foobar');
|
|
124
128
|
expect(rollbar.options.scrubFields).to.contain('password');
|
|
129
|
+
expect(rollbar.options.recorder.enabled).to.eql(true);
|
|
130
|
+
expect(rollbar.options.recorder.triggerOptions.item.levels).to.eql(['error', 'critical']);
|
|
131
|
+
expect(rollbar.options.tracing.endpoint).to.eql('api.rollbar.com/api/1/tracing/');
|
|
132
|
+
expect(rollbar.options.tracing.enabled).to.eql(false);
|
|
125
133
|
done();
|
|
126
134
|
});
|
|
127
135
|
|
|
128
|
-
it
|
|
136
|
+
it('should overwrite default if specified', function (done) {
|
|
129
137
|
var client = new (TestClientGen())();
|
|
130
138
|
var options = {
|
|
131
|
-
scrubFields: [
|
|
132
|
-
'foobar'
|
|
133
|
-
],
|
|
139
|
+
scrubFields: ['foobar'],
|
|
134
140
|
overwriteScrubFields: true,
|
|
135
141
|
};
|
|
136
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
142
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
137
143
|
|
|
138
144
|
expect(rollbar.options.scrubFields).to.contain('foobar');
|
|
139
145
|
expect(rollbar.options.scrubFields).to.not.contain('password');
|
|
140
146
|
done();
|
|
141
147
|
});
|
|
142
148
|
|
|
143
|
-
it
|
|
149
|
+
it('should replace deprecated options', function (done) {
|
|
144
150
|
var client = new (TestClientGen())();
|
|
145
151
|
var options = {
|
|
146
152
|
hostWhiteList: ['foo'],
|
|
147
|
-
hostBlackList: ['bar']
|
|
153
|
+
hostBlackList: ['bar'],
|
|
148
154
|
};
|
|
149
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
155
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
150
156
|
|
|
151
157
|
expect(rollbar.options.hostWhiteList).to.eql(undefined);
|
|
152
158
|
expect(rollbar.options.hostBlackList).to.eql(undefined);
|
|
@@ -155,10 +161,10 @@ describe('Rollbar()', function() {
|
|
|
155
161
|
done();
|
|
156
162
|
});
|
|
157
163
|
|
|
158
|
-
it('should return a uuid when logging', function(done) {
|
|
164
|
+
it('should return a uuid when logging', function (done) {
|
|
159
165
|
var client = new (TestClientGen())();
|
|
160
166
|
var options = {};
|
|
161
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
167
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
162
168
|
|
|
163
169
|
var result = rollbar.log('a messasge', 'another one');
|
|
164
170
|
expect(result.uuid).to.be.ok();
|
|
@@ -166,10 +172,10 @@ describe('Rollbar()', function() {
|
|
|
166
172
|
done();
|
|
167
173
|
});
|
|
168
174
|
|
|
169
|
-
it('should package up the inputs', function(done) {
|
|
175
|
+
it('should package up the inputs', function (done) {
|
|
170
176
|
var client = new (TestClientGen())();
|
|
171
177
|
var options = {};
|
|
172
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
178
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
173
179
|
|
|
174
180
|
var result = rollbar.log('a message', 'another one');
|
|
175
181
|
var loggedItem = client.logCalls[0].item;
|
|
@@ -179,34 +185,36 @@ describe('Rollbar()', function() {
|
|
|
179
185
|
done();
|
|
180
186
|
});
|
|
181
187
|
|
|
182
|
-
it('should call the client with the right method', function(done) {
|
|
188
|
+
it('should call the client with the right method', function (done) {
|
|
183
189
|
var client = new (TestClientGen())();
|
|
184
190
|
var options = {};
|
|
185
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
191
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
186
192
|
|
|
187
193
|
var methods = 'log,debug,info,warn,warning,error,critical'.split(',');
|
|
188
|
-
for (var i=0; i < methods.length; i++) {
|
|
194
|
+
for (var i = 0; i < methods.length; i++) {
|
|
189
195
|
var msg = 'message:' + i;
|
|
190
196
|
rollbar[methods[i]](msg);
|
|
191
197
|
expect(client.logCalls[i].func).to.eql(methods[i]);
|
|
192
|
-
expect(client.logCalls[i].item.message).to.eql(msg)
|
|
198
|
+
expect(client.logCalls[i].item.message).to.eql(msg);
|
|
193
199
|
}
|
|
194
200
|
|
|
195
201
|
done();
|
|
196
202
|
});
|
|
197
203
|
|
|
198
|
-
|
|
204
|
+
// Legacy OpenTracing support
|
|
205
|
+
it('should have a tracer if valid tracer is provided', function (done) {
|
|
199
206
|
var options = { tracer: ValidOpenTracingTracerStub };
|
|
200
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
207
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
201
208
|
|
|
202
209
|
expect(rollbar.client.tracer).to.eql(ValidOpenTracingTracerStub);
|
|
203
210
|
|
|
204
211
|
done();
|
|
205
212
|
});
|
|
206
213
|
|
|
207
|
-
|
|
214
|
+
// Legacy OpenTracing support
|
|
215
|
+
it('should not have a tracer if invalid tracer is provided', function (done) {
|
|
208
216
|
var options = { tracer: InvalidOpenTracingTracerStub };
|
|
209
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
217
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
210
218
|
|
|
211
219
|
expect(rollbar.client.tracer).to.eql(null);
|
|
212
220
|
|
|
@@ -214,68 +222,71 @@ describe('Rollbar()', function() {
|
|
|
214
222
|
});
|
|
215
223
|
});
|
|
216
224
|
|
|
217
|
-
describe('configure', function() {
|
|
225
|
+
describe('configure', function () {
|
|
218
226
|
afterEach(function () {
|
|
219
227
|
window.rollbar.configure({ autoInstrument: false, captureUncaught: false });
|
|
220
228
|
});
|
|
221
229
|
|
|
222
|
-
it('should configure client', function(done) {
|
|
230
|
+
it('should configure client', function (done) {
|
|
223
231
|
var client = new (TestClientGen())();
|
|
224
232
|
var options = {
|
|
225
233
|
payload: {
|
|
226
234
|
a: 42,
|
|
227
|
-
environment: 'testtest'
|
|
228
|
-
}
|
|
235
|
+
environment: 'testtest',
|
|
236
|
+
},
|
|
229
237
|
};
|
|
230
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
238
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
231
239
|
expect(rollbar.options.payload.environment).to.eql('testtest');
|
|
232
240
|
|
|
233
|
-
rollbar.configure({payload: {environment: 'borkbork'}});
|
|
241
|
+
rollbar.configure({ payload: { environment: 'borkbork' } });
|
|
234
242
|
expect(rollbar.options.payload.environment).to.eql('borkbork');
|
|
235
243
|
expect(client.options.payload.environment).to.eql('borkbork');
|
|
236
244
|
done();
|
|
237
245
|
});
|
|
238
|
-
it('should accept a second parameter and use it as the payload value', function(done) {
|
|
246
|
+
it('should accept a second parameter and use it as the payload value', function (done) {
|
|
239
247
|
var client = new (TestClientGen())();
|
|
240
248
|
var options = {
|
|
241
249
|
payload: {
|
|
242
250
|
a: 42,
|
|
243
|
-
environment: 'testtest'
|
|
244
|
-
}
|
|
251
|
+
environment: 'testtest',
|
|
252
|
+
},
|
|
245
253
|
};
|
|
246
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
254
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
247
255
|
expect(rollbar.options.payload.environment).to.eql('testtest');
|
|
248
256
|
|
|
249
|
-
rollbar.configure({somekey: 'borkbork'}, {b: 97});
|
|
257
|
+
rollbar.configure({ somekey: 'borkbork' }, { b: 97 });
|
|
250
258
|
expect(rollbar.options.somekey).to.eql('borkbork');
|
|
251
259
|
expect(rollbar.options.payload.b).to.eql(97);
|
|
252
260
|
expect(client.payloadData.b).to.eql(97);
|
|
253
261
|
done();
|
|
254
262
|
});
|
|
255
|
-
it('should accept a second parameter and override the payload with it', function(done) {
|
|
263
|
+
it('should accept a second parameter and override the payload with it', function (done) {
|
|
256
264
|
var client = new (TestClientGen())();
|
|
257
265
|
var options = {
|
|
258
266
|
payload: {
|
|
259
267
|
a: 42,
|
|
260
|
-
environment: 'testtest'
|
|
261
|
-
}
|
|
268
|
+
environment: 'testtest',
|
|
269
|
+
},
|
|
262
270
|
};
|
|
263
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
271
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
264
272
|
expect(rollbar.options.payload.environment).to.eql('testtest');
|
|
265
273
|
|
|
266
|
-
rollbar.configure({somekey: 'borkbork', payload: {b: 101}}, {b: 97});
|
|
274
|
+
rollbar.configure({ somekey: 'borkbork', payload: { b: 101 } }, { b: 97 });
|
|
267
275
|
expect(rollbar.options.somekey).to.eql('borkbork');
|
|
268
276
|
expect(rollbar.options.payload.b).to.eql(97);
|
|
269
277
|
expect(client.payloadData.b).to.eql(97);
|
|
270
278
|
done();
|
|
271
279
|
});
|
|
272
|
-
it
|
|
280
|
+
it('should replace deprecated options', function (done) {
|
|
273
281
|
var client = new (TestClientGen())();
|
|
274
282
|
var options = {
|
|
275
283
|
hostWhiteList: ['foo'],
|
|
276
|
-
hostBlackList: ['bar']
|
|
284
|
+
hostBlackList: ['bar'],
|
|
277
285
|
};
|
|
278
|
-
var rollbar = window.rollbar = new Rollbar(
|
|
286
|
+
var rollbar = (window.rollbar = new Rollbar(
|
|
287
|
+
{ autoInstrument: false },
|
|
288
|
+
client,
|
|
289
|
+
));
|
|
279
290
|
rollbar.configure(options);
|
|
280
291
|
|
|
281
292
|
expect(rollbar.options.hostWhiteList).to.eql(undefined);
|
|
@@ -284,27 +295,34 @@ describe('configure', function() {
|
|
|
284
295
|
expect(rollbar.options.hostBlockList).to.contain('bar');
|
|
285
296
|
done();
|
|
286
297
|
});
|
|
287
|
-
it('should store configured options', function(done) {
|
|
298
|
+
it('should store configured options', function (done) {
|
|
288
299
|
var client = new (TestClientGen())();
|
|
289
300
|
var options = {
|
|
290
301
|
captureUncaught: true,
|
|
291
302
|
payload: {
|
|
292
303
|
a: 42,
|
|
293
|
-
environment: 'testtest'
|
|
294
|
-
}
|
|
304
|
+
environment: 'testtest',
|
|
305
|
+
},
|
|
295
306
|
};
|
|
296
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
297
|
-
expect(rollbar.options._configuredOptions.payload.environment).to.eql(
|
|
307
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
308
|
+
expect(rollbar.options._configuredOptions.payload.environment).to.eql(
|
|
309
|
+
'testtest',
|
|
310
|
+
);
|
|
298
311
|
expect(rollbar.options._configuredOptions.captureUncaught).to.eql(true);
|
|
299
312
|
|
|
300
|
-
rollbar.configure({
|
|
301
|
-
|
|
313
|
+
rollbar.configure({
|
|
314
|
+
captureUncaught: false,
|
|
315
|
+
payload: { environment: 'borkbork' },
|
|
316
|
+
});
|
|
317
|
+
expect(rollbar.options._configuredOptions.payload.environment).to.eql(
|
|
318
|
+
'borkbork',
|
|
319
|
+
);
|
|
302
320
|
expect(rollbar.options._configuredOptions.captureUncaught).to.eql(false);
|
|
303
321
|
done();
|
|
304
322
|
});
|
|
305
323
|
});
|
|
306
324
|
|
|
307
|
-
describe('options.captureUncaught', function() {
|
|
325
|
+
describe('options.captureUncaught', function () {
|
|
308
326
|
beforeEach(function (done) {
|
|
309
327
|
// Load the HTML page, so errors can be generated.
|
|
310
328
|
document.write(window.__html__['examples/error.html']);
|
|
@@ -319,51 +337,50 @@ describe('options.captureUncaught', function() {
|
|
|
319
337
|
});
|
|
320
338
|
|
|
321
339
|
function stubResponse(server) {
|
|
322
|
-
server.respondWith('POST', 'api/1/item',
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
]
|
|
328
|
-
);
|
|
340
|
+
server.respondWith('POST', 'api/1/item', [
|
|
341
|
+
200,
|
|
342
|
+
{ 'Content-Type': 'application/json' },
|
|
343
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
344
|
+
]);
|
|
329
345
|
}
|
|
330
346
|
|
|
331
|
-
it('should capture when enabled in constructor', function(done) {
|
|
347
|
+
it('should capture when enabled in constructor', function (done) {
|
|
332
348
|
var server = window.server;
|
|
333
349
|
stubResponse(server);
|
|
334
350
|
server.requests.length = 0;
|
|
335
351
|
|
|
336
352
|
var options = {
|
|
337
353
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
338
|
-
captureUncaught: true
|
|
354
|
+
captureUncaught: true,
|
|
339
355
|
};
|
|
340
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
356
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
341
357
|
|
|
342
358
|
var element = document.getElementById('throw-error');
|
|
343
359
|
element.click();
|
|
344
360
|
|
|
345
|
-
setTimeout(function() {
|
|
361
|
+
setTimeout(function () {
|
|
346
362
|
server.respond();
|
|
347
363
|
|
|
348
364
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
349
365
|
|
|
350
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
351
366
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
352
|
-
expect(body.data.notifier.diagnostic.raw_error.message).to.eql(
|
|
367
|
+
expect(body.data.notifier.diagnostic.raw_error.message).to.eql(
|
|
368
|
+
'test error',
|
|
369
|
+
);
|
|
353
370
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(true);
|
|
354
371
|
|
|
355
372
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
356
373
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
357
374
|
// won't affect other tests.
|
|
358
375
|
rollbar.configure({
|
|
359
|
-
captureUncaught: false
|
|
376
|
+
captureUncaught: false,
|
|
360
377
|
});
|
|
361
378
|
|
|
362
379
|
done();
|
|
363
380
|
}, 1);
|
|
364
381
|
});
|
|
365
382
|
|
|
366
|
-
it('should respond to enable/disable in configure', function(done) {
|
|
383
|
+
it('should respond to enable/disable in configure', function (done) {
|
|
367
384
|
var server = window.server;
|
|
368
385
|
var element = document.getElementById('throw-error');
|
|
369
386
|
stubResponse(server);
|
|
@@ -371,41 +388,40 @@ describe('options.captureUncaught', function() {
|
|
|
371
388
|
|
|
372
389
|
var options = {
|
|
373
390
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
374
|
-
captureUncaught: false
|
|
391
|
+
captureUncaught: false,
|
|
375
392
|
};
|
|
376
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
393
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
377
394
|
|
|
378
395
|
element.click();
|
|
379
396
|
|
|
380
|
-
setTimeout(function() {
|
|
397
|
+
setTimeout(function () {
|
|
381
398
|
server.respond();
|
|
382
399
|
expect(server.requests.length).to.eql(0); // Disabled, no event
|
|
383
400
|
server.requests.length = 0;
|
|
384
401
|
|
|
385
402
|
rollbar.configure({
|
|
386
|
-
captureUncaught: true
|
|
403
|
+
captureUncaught: true,
|
|
387
404
|
});
|
|
388
405
|
|
|
389
406
|
element.click();
|
|
390
407
|
|
|
391
|
-
setTimeout(function() {
|
|
408
|
+
setTimeout(function () {
|
|
392
409
|
server.respond();
|
|
393
410
|
|
|
394
411
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
395
412
|
|
|
396
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
397
413
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
398
414
|
expect(body.data.notifier.diagnostic.is_anonymous).to.not.be.ok();
|
|
399
415
|
|
|
400
416
|
server.requests.length = 0;
|
|
401
417
|
|
|
402
418
|
rollbar.configure({
|
|
403
|
-
captureUncaught: false
|
|
419
|
+
captureUncaught: false,
|
|
404
420
|
});
|
|
405
421
|
|
|
406
422
|
element.click();
|
|
407
423
|
|
|
408
|
-
setTimeout(function() {
|
|
424
|
+
setTimeout(function () {
|
|
409
425
|
server.respond();
|
|
410
426
|
expect(server.requests.length).to.eql(0); // Disabled, no event
|
|
411
427
|
|
|
@@ -413,42 +429,40 @@ describe('options.captureUncaught', function() {
|
|
|
413
429
|
}, 1);
|
|
414
430
|
}, 1);
|
|
415
431
|
}, 1);
|
|
416
|
-
|
|
417
432
|
});
|
|
418
433
|
|
|
419
434
|
// Test case expects Chrome, which is the currently configured karma js/browser
|
|
420
435
|
// engine at the time of this comment. However, karma's Chrome and ChromeHeadless
|
|
421
436
|
// don't actually behave like real Chrome so we settle for stubbing some things.
|
|
422
|
-
it('should capture external error data when inspectAnonymousErrors is true', function(done) {
|
|
437
|
+
it('should capture external error data when inspectAnonymousErrors is true', function (done) {
|
|
423
438
|
var server = window.server;
|
|
424
439
|
stubResponse(server);
|
|
425
440
|
server.requests.length = 0;
|
|
426
441
|
|
|
427
442
|
// We're supposedly running on ChromeHeadless, but still need to spoof Chrome. :\
|
|
428
|
-
window.chrome = { runtime: true};
|
|
443
|
+
window.chrome = { runtime: true };
|
|
429
444
|
|
|
430
445
|
var options = {
|
|
431
446
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
432
447
|
captureUncaught: true,
|
|
433
|
-
inspectAnonymousErrors: true
|
|
448
|
+
inspectAnonymousErrors: true,
|
|
434
449
|
};
|
|
435
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
450
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
436
451
|
|
|
437
452
|
// Simulate receiving onerror without an error object.
|
|
438
453
|
rollbar.anonymousErrorsPending += 1;
|
|
439
454
|
|
|
440
455
|
try {
|
|
441
|
-
throw new Error('anon error')
|
|
442
|
-
} catch(e) {
|
|
456
|
+
throw new Error('anon error');
|
|
457
|
+
} catch (e) {
|
|
443
458
|
Error.prepareStackTrace(e);
|
|
444
459
|
}
|
|
445
460
|
|
|
446
|
-
setTimeout(function() {
|
|
461
|
+
setTimeout(function () {
|
|
447
462
|
server.respond();
|
|
448
463
|
|
|
449
464
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
450
465
|
|
|
451
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
452
466
|
expect(body.data.body.trace.exception.message).to.eql('anon error');
|
|
453
467
|
expect(body.data.notifier.diagnostic.is_anonymous).to.eql(true);
|
|
454
468
|
|
|
@@ -456,32 +470,32 @@ describe('options.captureUncaught', function() {
|
|
|
456
470
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
457
471
|
// won't affect other tests.
|
|
458
472
|
rollbar.configure({
|
|
459
|
-
captureUncaught: false
|
|
473
|
+
captureUncaught: false,
|
|
460
474
|
});
|
|
461
475
|
|
|
462
476
|
done();
|
|
463
477
|
}, 1);
|
|
464
478
|
});
|
|
465
479
|
|
|
466
|
-
it('should ignore duplicate errors by default', function(done) {
|
|
480
|
+
it('should ignore duplicate errors by default', function (done) {
|
|
467
481
|
var server = window.server;
|
|
468
482
|
stubResponse(server);
|
|
469
483
|
server.requests.length = 0;
|
|
470
484
|
|
|
471
485
|
var options = {
|
|
472
486
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
473
|
-
captureUncaught: true
|
|
487
|
+
captureUncaught: true,
|
|
474
488
|
};
|
|
475
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
489
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
476
490
|
|
|
477
491
|
var element = document.getElementById('throw-error');
|
|
478
492
|
|
|
479
493
|
// generate same error twice
|
|
480
|
-
for(var i = 0; i < 2; i++) {
|
|
494
|
+
for (var i = 0; i < 2; i++) {
|
|
481
495
|
element.click(); // use for loop to ensure the stack traces have identical line/col info
|
|
482
496
|
}
|
|
483
497
|
|
|
484
|
-
setTimeout(function() {
|
|
498
|
+
setTimeout(function () {
|
|
485
499
|
server.respond();
|
|
486
500
|
|
|
487
501
|
// transmit only once
|
|
@@ -489,21 +503,20 @@ describe('options.captureUncaught', function() {
|
|
|
489
503
|
|
|
490
504
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
491
505
|
|
|
492
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
493
506
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
494
507
|
|
|
495
508
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
496
509
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
497
510
|
// won't affect other tests.
|
|
498
511
|
rollbar.configure({
|
|
499
|
-
captureUncaught: false
|
|
512
|
+
captureUncaught: false,
|
|
500
513
|
});
|
|
501
514
|
|
|
502
515
|
done();
|
|
503
516
|
}, 1);
|
|
504
517
|
});
|
|
505
518
|
|
|
506
|
-
it('should transmit duplicate errors when set in config', function(done) {
|
|
519
|
+
it('should transmit duplicate errors when set in config', function (done) {
|
|
507
520
|
var server = window.server;
|
|
508
521
|
stubResponse(server);
|
|
509
522
|
server.requests.length = 0;
|
|
@@ -511,18 +524,18 @@ describe('options.captureUncaught', function() {
|
|
|
511
524
|
var options = {
|
|
512
525
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
513
526
|
captureUncaught: true,
|
|
514
|
-
ignoreDuplicateErrors: false
|
|
527
|
+
ignoreDuplicateErrors: false,
|
|
515
528
|
};
|
|
516
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
529
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
517
530
|
|
|
518
531
|
var element = document.getElementById('throw-error');
|
|
519
532
|
|
|
520
533
|
// generate same error twice
|
|
521
|
-
for(var i = 0; i < 2; i++) {
|
|
534
|
+
for (var i = 0; i < 2; i++) {
|
|
522
535
|
element.click(); // use for loop to ensure the stack traces have identical line/col info
|
|
523
536
|
}
|
|
524
537
|
|
|
525
|
-
setTimeout(function() {
|
|
538
|
+
setTimeout(function () {
|
|
526
539
|
server.respond();
|
|
527
540
|
|
|
528
541
|
// transmit both errors
|
|
@@ -530,53 +543,53 @@ describe('options.captureUncaught', function() {
|
|
|
530
543
|
|
|
531
544
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
532
545
|
|
|
533
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
534
546
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
535
547
|
|
|
536
548
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
537
549
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
538
550
|
// won't affect other tests.
|
|
539
551
|
rollbar.configure({
|
|
540
|
-
captureUncaught: false
|
|
552
|
+
captureUncaught: false,
|
|
541
553
|
});
|
|
542
554
|
|
|
543
555
|
done();
|
|
544
556
|
}, 1);
|
|
545
557
|
});
|
|
546
|
-
it('should send DOMException as trace_chain', function(done) {
|
|
558
|
+
it('should send DOMException as trace_chain', function (done) {
|
|
547
559
|
var server = window.server;
|
|
548
560
|
stubResponse(server);
|
|
549
561
|
server.requests.length = 0;
|
|
550
562
|
|
|
551
563
|
var options = {
|
|
552
564
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
553
|
-
captureUncaught: true
|
|
565
|
+
captureUncaught: true,
|
|
554
566
|
};
|
|
555
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
567
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
556
568
|
|
|
557
569
|
var element = document.getElementById('throw-dom-exception');
|
|
558
570
|
element.click();
|
|
559
571
|
|
|
560
|
-
setTimeout(function() {
|
|
572
|
+
setTimeout(function () {
|
|
561
573
|
server.respond();
|
|
562
574
|
|
|
563
575
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
564
576
|
|
|
565
|
-
expect(body.
|
|
566
|
-
|
|
577
|
+
expect(body.data.body.trace_chain[0].exception.message).to.eql(
|
|
578
|
+
'test DOMException',
|
|
579
|
+
);
|
|
567
580
|
|
|
568
581
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
569
582
|
// will remain installed. Unset captureUncaught so the onerror handler
|
|
570
583
|
// won't affect other tests.
|
|
571
584
|
rollbar.configure({
|
|
572
|
-
captureUncaught: false
|
|
585
|
+
captureUncaught: false,
|
|
573
586
|
});
|
|
574
587
|
|
|
575
588
|
done();
|
|
576
589
|
}, 1);
|
|
577
590
|
});
|
|
578
591
|
|
|
579
|
-
it('should capture exta frames when stackTraceLimit is set', function(done) {
|
|
592
|
+
it('should capture exta frames when stackTraceLimit is set', function (done) {
|
|
580
593
|
var server = window.server;
|
|
581
594
|
stubResponse(server);
|
|
582
595
|
server.requests.length = 0;
|
|
@@ -585,19 +598,18 @@ describe('options.captureUncaught', function() {
|
|
|
585
598
|
var options = {
|
|
586
599
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
587
600
|
captureUncaught: true,
|
|
588
|
-
stackTraceLimit: 50
|
|
601
|
+
stackTraceLimit: 50,
|
|
589
602
|
};
|
|
590
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
603
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
591
604
|
|
|
592
605
|
var element = document.getElementById('throw-depp-stack-error');
|
|
593
606
|
element.click();
|
|
594
607
|
|
|
595
|
-
setTimeout(function() {
|
|
608
|
+
setTimeout(function () {
|
|
596
609
|
server.respond();
|
|
597
610
|
|
|
598
611
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
599
612
|
|
|
600
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
601
613
|
expect(body.data.body.trace.exception.message).to.eql('deep stack error');
|
|
602
614
|
expect(body.data.body.trace.frames.length).to.be.above(20);
|
|
603
615
|
|
|
@@ -606,14 +618,14 @@ describe('options.captureUncaught', function() {
|
|
|
606
618
|
// won't affect other tests.
|
|
607
619
|
rollbar.configure({
|
|
608
620
|
captureUncaught: false,
|
|
609
|
-
stackTraceLimit: oldLimit // reset to default
|
|
621
|
+
stackTraceLimit: oldLimit, // reset to default
|
|
610
622
|
});
|
|
611
623
|
|
|
612
624
|
done();
|
|
613
625
|
}, 1);
|
|
614
626
|
});
|
|
615
627
|
|
|
616
|
-
it('should add _wrappedSource when wrapGlobalEventHandlers is set', function(done) {
|
|
628
|
+
it('should add _wrappedSource when wrapGlobalEventHandlers is set', function (done) {
|
|
617
629
|
var server = window.server;
|
|
618
630
|
stubResponse(server);
|
|
619
631
|
server.requests.length = 0;
|
|
@@ -621,21 +633,21 @@ describe('options.captureUncaught', function() {
|
|
|
621
633
|
var options = {
|
|
622
634
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
623
635
|
captureUncaught: true,
|
|
624
|
-
wrapGlobalEventHandlers: true
|
|
636
|
+
wrapGlobalEventHandlers: true,
|
|
625
637
|
};
|
|
626
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
638
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
627
639
|
|
|
628
640
|
var element = document.getElementById('throw-event-handler-error');
|
|
629
641
|
element.click();
|
|
630
642
|
|
|
631
|
-
setTimeout(function() {
|
|
632
|
-
|
|
643
|
+
setTimeout(function () {
|
|
633
644
|
server.respond();
|
|
634
645
|
|
|
635
646
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
636
647
|
|
|
637
|
-
expect(body.
|
|
638
|
-
|
|
648
|
+
expect(body.data.body.trace.exception.message).to.eql(
|
|
649
|
+
'event handler error',
|
|
650
|
+
);
|
|
639
651
|
expect(body.data.body.trace.extra).to.have.property('_wrappedSource');
|
|
640
652
|
|
|
641
653
|
// karma doesn't unload the browser between tests, so the onerror handler
|
|
@@ -643,7 +655,7 @@ describe('options.captureUncaught', function() {
|
|
|
643
655
|
// won't affect other tests.
|
|
644
656
|
rollbar.configure({
|
|
645
657
|
captureUncaught: false,
|
|
646
|
-
wrapGlobalEventHandlers: false
|
|
658
|
+
wrapGlobalEventHandlers: false,
|
|
647
659
|
});
|
|
648
660
|
|
|
649
661
|
done();
|
|
@@ -651,7 +663,7 @@ describe('options.captureUncaught', function() {
|
|
|
651
663
|
});
|
|
652
664
|
});
|
|
653
665
|
|
|
654
|
-
describe('options.captureUnhandledRejections', function() {
|
|
666
|
+
describe('options.captureUnhandledRejections', function () {
|
|
655
667
|
beforeEach(function (done) {
|
|
656
668
|
window.server = sinon.createFakeServer();
|
|
657
669
|
done();
|
|
@@ -663,39 +675,36 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
663
675
|
});
|
|
664
676
|
|
|
665
677
|
function stubResponse(server) {
|
|
666
|
-
server.respondWith('POST', 'api/1/item',
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
]
|
|
672
|
-
);
|
|
678
|
+
server.respondWith('POST', 'api/1/item', [
|
|
679
|
+
200,
|
|
680
|
+
{ 'Content-Type': 'application/json' },
|
|
681
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
682
|
+
]);
|
|
673
683
|
}
|
|
674
684
|
|
|
675
|
-
it('should capture when enabled in constructor', function(done) {
|
|
685
|
+
it('should capture when enabled in constructor', function (done) {
|
|
676
686
|
var server = window.server;
|
|
677
687
|
stubResponse(server);
|
|
678
688
|
server.requests.length = 0;
|
|
679
689
|
|
|
680
690
|
var options = {
|
|
681
691
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
682
|
-
captureUnhandledRejections: true
|
|
692
|
+
captureUnhandledRejections: true,
|
|
683
693
|
};
|
|
684
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
694
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
685
695
|
|
|
686
696
|
Promise.reject(new Error('test reject'));
|
|
687
697
|
|
|
688
|
-
setTimeout(function() {
|
|
698
|
+
setTimeout(function () {
|
|
689
699
|
server.respond();
|
|
690
700
|
|
|
691
701
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
692
702
|
|
|
693
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
694
703
|
expect(body.data.body.trace.exception.message).to.eql('test reject');
|
|
695
704
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(true);
|
|
696
705
|
|
|
697
706
|
rollbar.configure({
|
|
698
|
-
captureUnhandledRejections: false
|
|
707
|
+
captureUnhandledRejections: false,
|
|
699
708
|
});
|
|
700
709
|
window.removeEventListener('unhandledrejection', window._rollbarURH);
|
|
701
710
|
|
|
@@ -703,35 +712,34 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
703
712
|
}, 500);
|
|
704
713
|
});
|
|
705
714
|
|
|
706
|
-
it('should respond to enable in configure', function(done) {
|
|
715
|
+
it('should respond to enable in configure', function (done) {
|
|
707
716
|
var server = window.server;
|
|
708
717
|
stubResponse(server);
|
|
709
718
|
server.requests.length = 0;
|
|
710
719
|
|
|
711
720
|
var options = {
|
|
712
721
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
713
|
-
captureUnhandledRejections: false
|
|
722
|
+
captureUnhandledRejections: false,
|
|
714
723
|
};
|
|
715
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
724
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
716
725
|
|
|
717
726
|
rollbar.configure({
|
|
718
|
-
captureUnhandledRejections: true
|
|
727
|
+
captureUnhandledRejections: true,
|
|
719
728
|
});
|
|
720
729
|
|
|
721
730
|
Promise.reject(new Error('test reject'));
|
|
722
731
|
|
|
723
|
-
setTimeout(function() {
|
|
732
|
+
setTimeout(function () {
|
|
724
733
|
server.respond();
|
|
725
734
|
|
|
726
735
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
727
736
|
|
|
728
|
-
expect(body.access_token).to.eql('POST_CLIENT_ITEM_TOKEN');
|
|
729
737
|
expect(body.data.body.trace.exception.message).to.eql('test reject');
|
|
730
738
|
|
|
731
739
|
server.requests.length = 0;
|
|
732
740
|
|
|
733
741
|
rollbar.configure({
|
|
734
|
-
captureUnhandledRejections: false
|
|
742
|
+
captureUnhandledRejections: false,
|
|
735
743
|
});
|
|
736
744
|
window.removeEventListener('unhandledrejection', window._rollbarURH);
|
|
737
745
|
|
|
@@ -739,24 +747,24 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
739
747
|
}, 500);
|
|
740
748
|
});
|
|
741
749
|
|
|
742
|
-
it('should respond to disable in configure', function(done) {
|
|
750
|
+
it('should respond to disable in configure', function (done) {
|
|
743
751
|
var server = window.server;
|
|
744
752
|
stubResponse(server);
|
|
745
753
|
server.requests.length = 0;
|
|
746
754
|
|
|
747
755
|
var options = {
|
|
748
756
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
749
|
-
captureUnhandledRejections: true
|
|
757
|
+
captureUnhandledRejections: true,
|
|
750
758
|
};
|
|
751
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
759
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
752
760
|
|
|
753
761
|
rollbar.configure({
|
|
754
|
-
captureUnhandledRejections: false
|
|
762
|
+
captureUnhandledRejections: false,
|
|
755
763
|
});
|
|
756
764
|
|
|
757
765
|
Promise.reject(new Error('test reject'));
|
|
758
766
|
|
|
759
|
-
setTimeout(function() {
|
|
767
|
+
setTimeout(function () {
|
|
760
768
|
server.respond();
|
|
761
769
|
|
|
762
770
|
expect(server.requests.length).to.eql(0); // Disabled, no event
|
|
@@ -766,10 +774,10 @@ describe('options.captureUnhandledRejections', function() {
|
|
|
766
774
|
|
|
767
775
|
done();
|
|
768
776
|
}, 500);
|
|
769
|
-
})
|
|
777
|
+
});
|
|
770
778
|
});
|
|
771
779
|
|
|
772
|
-
describe('log', function() {
|
|
780
|
+
describe('log', function () {
|
|
773
781
|
beforeEach(function (done) {
|
|
774
782
|
window.server = sinon.createFakeServer();
|
|
775
783
|
done();
|
|
@@ -781,84 +789,88 @@ describe('log', function() {
|
|
|
781
789
|
});
|
|
782
790
|
|
|
783
791
|
function stubResponse(server) {
|
|
784
|
-
server.respondWith('POST', 'api/1/item',
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
]
|
|
790
|
-
);
|
|
792
|
+
server.respondWith('POST', 'api/1/item', [
|
|
793
|
+
200,
|
|
794
|
+
{ 'Content-Type': 'application/json' },
|
|
795
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
796
|
+
]);
|
|
791
797
|
}
|
|
792
798
|
|
|
793
|
-
it('should send message when called with message and extra args', function(done) {
|
|
799
|
+
it('should send message when called with message and extra args', function (done) {
|
|
794
800
|
var server = window.server;
|
|
795
801
|
stubResponse(server);
|
|
796
802
|
server.requests.length = 0;
|
|
797
803
|
|
|
798
804
|
var options = {
|
|
799
|
-
accessToken: 'POST_CLIENT_ITEM_TOKEN'
|
|
805
|
+
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
800
806
|
};
|
|
801
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
807
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
802
808
|
|
|
803
|
-
rollbar.log('test message', {
|
|
809
|
+
rollbar.log('test message', { foo: 'bar' });
|
|
804
810
|
|
|
805
|
-
setTimeout(function() {
|
|
811
|
+
setTimeout(function () {
|
|
806
812
|
server.respond();
|
|
807
813
|
|
|
808
814
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
809
815
|
|
|
810
816
|
expect(body.data.body.message.body).to.eql('test message');
|
|
811
|
-
expect(body.data.body.message.extra).to.eql({
|
|
817
|
+
expect(body.data.body.message.extra).to.eql({ foo: 'bar' });
|
|
812
818
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(undefined);
|
|
813
|
-
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
819
|
+
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
820
|
+
'string',
|
|
821
|
+
'object',
|
|
822
|
+
]);
|
|
814
823
|
|
|
815
824
|
done();
|
|
816
825
|
}, 1);
|
|
817
|
-
})
|
|
826
|
+
});
|
|
818
827
|
|
|
819
|
-
it('should send exception when called with error and extra args', function(done) {
|
|
828
|
+
it('should send exception when called with error and extra args', function (done) {
|
|
820
829
|
var server = window.server;
|
|
821
830
|
stubResponse(server);
|
|
822
831
|
server.requests.length = 0;
|
|
823
832
|
|
|
824
833
|
var options = {
|
|
825
|
-
accessToken: 'POST_CLIENT_ITEM_TOKEN'
|
|
834
|
+
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
826
835
|
};
|
|
827
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
836
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
828
837
|
|
|
829
|
-
rollbar.log(new Error('test error'), {
|
|
838
|
+
rollbar.log(new Error('test error'), { foo: 'bar' });
|
|
830
839
|
|
|
831
|
-
setTimeout(function() {
|
|
840
|
+
setTimeout(function () {
|
|
832
841
|
server.respond();
|
|
833
842
|
|
|
834
843
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
835
844
|
|
|
836
845
|
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
837
|
-
expect(body.data.body.trace.extra).to.eql({
|
|
846
|
+
expect(body.data.body.trace.extra).to.eql({ foo: 'bar' });
|
|
838
847
|
expect(body.data.notifier.diagnostic.is_uncaught).to.eql(undefined);
|
|
839
|
-
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
848
|
+
expect(body.data.notifier.diagnostic.original_arg_types).to.eql([
|
|
849
|
+
'error',
|
|
850
|
+
'object',
|
|
851
|
+
]);
|
|
840
852
|
|
|
841
853
|
done();
|
|
842
854
|
}, 1);
|
|
843
|
-
})
|
|
855
|
+
});
|
|
844
856
|
|
|
845
|
-
it('should add custom data when called with error context', function(done) {
|
|
857
|
+
it('should add custom data when called with error context', function (done) {
|
|
846
858
|
var server = window.server;
|
|
847
859
|
stubResponse(server);
|
|
848
860
|
server.requests.length = 0;
|
|
849
861
|
|
|
850
862
|
var options = {
|
|
851
863
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
852
|
-
addErrorContext: true
|
|
864
|
+
addErrorContext: true,
|
|
853
865
|
};
|
|
854
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
866
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
855
867
|
|
|
856
868
|
var err = new Error('test error');
|
|
857
869
|
err.rollbarContext = { err: 'test' };
|
|
858
870
|
|
|
859
|
-
rollbar.error(err, {
|
|
871
|
+
rollbar.error(err, { foo: 'bar' });
|
|
860
872
|
|
|
861
|
-
setTimeout(function() {
|
|
873
|
+
setTimeout(function () {
|
|
862
874
|
server.respond();
|
|
863
875
|
|
|
864
876
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
@@ -869,103 +881,152 @@ describe('log', function() {
|
|
|
869
881
|
|
|
870
882
|
done();
|
|
871
883
|
}, 1);
|
|
872
|
-
})
|
|
884
|
+
});
|
|
873
885
|
|
|
874
|
-
it('should
|
|
886
|
+
it('should add tracing attributes when called in an active span', function (done) {
|
|
887
|
+
const server = window.server;
|
|
888
|
+
stubResponse(server);
|
|
889
|
+
server.requests.length = 0;
|
|
890
|
+
|
|
891
|
+
const options = {
|
|
892
|
+
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
893
|
+
recorder: {
|
|
894
|
+
enabled: true,
|
|
895
|
+
},
|
|
896
|
+
};
|
|
897
|
+
const rollbar = (window.rollbar = new Rollbar(options));
|
|
898
|
+
|
|
899
|
+
const err = new Error('test error');
|
|
900
|
+
|
|
901
|
+
rollbar.tracing.withSpan('test', {}, () => {
|
|
902
|
+
rollbar.error(err);
|
|
903
|
+
});
|
|
904
|
+
|
|
905
|
+
setTimeout(function () {
|
|
906
|
+
try{
|
|
907
|
+
server.respond();
|
|
908
|
+
|
|
909
|
+
var body = JSON.parse(server.requests[0].requestBody);
|
|
910
|
+
|
|
911
|
+
expect(body.data.body.trace.exception.message).to.eql('test error');
|
|
912
|
+
expect(body.data.attributes).to.be.an('array');
|
|
913
|
+
expect(body.data.attributes.length).to.eql(4);
|
|
914
|
+
expect(body.data.attributes[0].key).to.eql('replay_id');
|
|
915
|
+
expect(body.data.attributes[0].value).to.match(/^[a-f0-9]{16}$/);
|
|
916
|
+
expect(body.data.attributes[1].key).to.eql('session_id');
|
|
917
|
+
expect(body.data.attributes[1].value).to.match(/^[a-f0-9]{32}$/);
|
|
918
|
+
expect(body.data.attributes[2].key).to.eql('span_id');
|
|
919
|
+
expect(body.data.attributes[2].value).to.match(/^[a-f0-9]{16}$/);
|
|
920
|
+
expect(body.data.attributes[3].key).to.eql('trace_id');
|
|
921
|
+
expect(body.data.attributes[3].value).to.match(/^[a-f0-9]{32}$/);
|
|
922
|
+
|
|
923
|
+
done();
|
|
924
|
+
} catch (e) {
|
|
925
|
+
done(e);
|
|
926
|
+
}
|
|
927
|
+
}, 1);
|
|
928
|
+
});
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
it('should send message when called with only null arguments', function (done) {
|
|
875
932
|
var server = window.server;
|
|
876
933
|
stubResponse(server);
|
|
877
934
|
server.requests.length = 0;
|
|
878
935
|
|
|
879
936
|
var options = {
|
|
880
937
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
881
|
-
captureUnhandledRejections: true
|
|
938
|
+
captureUnhandledRejections: true,
|
|
882
939
|
};
|
|
883
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
940
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
884
941
|
|
|
885
942
|
rollbar.log(null);
|
|
886
943
|
|
|
887
|
-
setTimeout(function() {
|
|
944
|
+
setTimeout(function () {
|
|
888
945
|
server.respond();
|
|
889
946
|
|
|
890
947
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
891
948
|
|
|
892
|
-
expect(body.data.body.message.body).to.eql(
|
|
949
|
+
expect(body.data.body.message.body).to.eql(
|
|
950
|
+
'Item sent with null or missing arguments.',
|
|
951
|
+
);
|
|
893
952
|
expect(body.data.notifier.diagnostic.original_arg_types).to.eql(['null']);
|
|
894
953
|
|
|
895
954
|
done();
|
|
896
955
|
}, 1);
|
|
897
|
-
})
|
|
956
|
+
});
|
|
898
957
|
|
|
899
|
-
it('should skipFrames when set', function(done) {
|
|
958
|
+
it('should skipFrames when set', function (done) {
|
|
900
959
|
var server = window.server;
|
|
901
960
|
stubResponse(server);
|
|
902
961
|
server.requests.length = 0;
|
|
903
962
|
|
|
904
963
|
var options = {
|
|
905
964
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
906
|
-
captureUnhandledRejections: true
|
|
965
|
+
captureUnhandledRejections: true,
|
|
907
966
|
};
|
|
908
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
967
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
909
968
|
|
|
910
969
|
var error = new Error('error with stack');
|
|
911
970
|
|
|
912
971
|
rollbar.log(error);
|
|
913
972
|
rollbar.log(error, { skipFrames: 1 });
|
|
914
973
|
|
|
915
|
-
setTimeout(function() {
|
|
974
|
+
setTimeout(function () {
|
|
916
975
|
server.respond();
|
|
917
976
|
|
|
918
|
-
var frames1 = JSON.parse(server.requests[0].requestBody).data.body.trace
|
|
919
|
-
|
|
977
|
+
var frames1 = JSON.parse(server.requests[0].requestBody).data.body.trace
|
|
978
|
+
.frames;
|
|
979
|
+
var frames2 = JSON.parse(server.requests[1].requestBody).data.body.trace
|
|
980
|
+
.frames;
|
|
920
981
|
|
|
921
982
|
expect(frames1.length).to.eql(frames2.length + 1);
|
|
922
|
-
expect(frames1.slice(0
|
|
983
|
+
expect(frames1.slice(0, -1)).to.eql(frames2);
|
|
923
984
|
|
|
924
985
|
done();
|
|
925
986
|
}, 1);
|
|
926
|
-
})
|
|
987
|
+
});
|
|
927
988
|
|
|
928
|
-
it('should call the item callback on error', function(done) {
|
|
989
|
+
it('should call the item callback on error', function (done) {
|
|
929
990
|
var server = window.server;
|
|
930
991
|
stubResponse(server);
|
|
931
992
|
server.requests.length = 0;
|
|
932
993
|
|
|
933
994
|
// Create an invalid tracer, in order to force an error in notifier._log()
|
|
934
995
|
var tracer = {
|
|
935
|
-
scope: function() {
|
|
996
|
+
scope: function () {
|
|
936
997
|
return {
|
|
937
|
-
active: function() {
|
|
998
|
+
active: function () {
|
|
938
999
|
throw new Error('Test error');
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
|
-
}
|
|
1000
|
+
},
|
|
1001
|
+
};
|
|
1002
|
+
},
|
|
942
1003
|
};
|
|
943
1004
|
|
|
944
1005
|
var options = {
|
|
945
1006
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
946
|
-
tracer: tracer
|
|
1007
|
+
tracer: tracer,
|
|
947
1008
|
};
|
|
948
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1009
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
949
1010
|
|
|
950
1011
|
var callbackCalled;
|
|
951
|
-
var callback = function(err) {
|
|
1012
|
+
var callback = function (err) {
|
|
952
1013
|
callbackCalled = err;
|
|
953
1014
|
};
|
|
954
1015
|
|
|
955
1016
|
rollbar.log('test', callback);
|
|
956
1017
|
|
|
957
|
-
setTimeout(function() {
|
|
1018
|
+
setTimeout(function () {
|
|
958
1019
|
server.respond();
|
|
959
1020
|
|
|
960
1021
|
expect(callbackCalled.message).to.eql('Test error');
|
|
961
1022
|
|
|
962
1023
|
done();
|
|
963
1024
|
}, 1);
|
|
964
|
-
})
|
|
1025
|
+
});
|
|
965
1026
|
});
|
|
966
1027
|
|
|
967
1028
|
// Test direct call to onerror, as used in verification of browser js install.
|
|
968
|
-
describe('onerror', function() {
|
|
1029
|
+
describe('onerror', function () {
|
|
969
1030
|
beforeEach(function (done) {
|
|
970
1031
|
window.server = sinon.createFakeServer();
|
|
971
1032
|
done();
|
|
@@ -977,42 +1038,44 @@ describe('onerror', function() {
|
|
|
977
1038
|
});
|
|
978
1039
|
|
|
979
1040
|
function stubResponse(server) {
|
|
980
|
-
server.respondWith('POST', 'api/1/item',
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
]
|
|
986
|
-
);
|
|
1041
|
+
server.respondWith('POST', 'api/1/item', [
|
|
1042
|
+
200,
|
|
1043
|
+
{ 'Content-Type': 'application/json' },
|
|
1044
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
1045
|
+
]);
|
|
987
1046
|
}
|
|
988
1047
|
|
|
989
|
-
it('should send message when calling onerror directly', function(done) {
|
|
1048
|
+
it('should send message when calling onerror directly', function (done) {
|
|
990
1049
|
var server = window.server;
|
|
991
1050
|
stubResponse(server);
|
|
992
1051
|
server.requests.length = 0;
|
|
993
1052
|
|
|
994
1053
|
var options = {
|
|
995
1054
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
996
|
-
captureUncaught: true
|
|
1055
|
+
captureUncaught: true,
|
|
997
1056
|
};
|
|
998
1057
|
window.rollbar = new Rollbar(options);
|
|
999
1058
|
|
|
1000
|
-
window.onerror(
|
|
1059
|
+
window.onerror(
|
|
1060
|
+
'TestRollbarError: testing window.onerror',
|
|
1061
|
+
window.location.href,
|
|
1062
|
+
);
|
|
1001
1063
|
|
|
1002
|
-
setTimeout(function() {
|
|
1064
|
+
setTimeout(function () {
|
|
1003
1065
|
server.respond();
|
|
1004
1066
|
|
|
1005
1067
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
1006
1068
|
|
|
1007
|
-
expect(body.
|
|
1008
|
-
|
|
1069
|
+
expect(body.data.body.trace.exception.message).to.eql(
|
|
1070
|
+
'testing window.onerror',
|
|
1071
|
+
);
|
|
1009
1072
|
|
|
1010
1073
|
done();
|
|
1011
1074
|
}, 1);
|
|
1012
|
-
})
|
|
1075
|
+
});
|
|
1013
1076
|
});
|
|
1014
1077
|
|
|
1015
|
-
describe('callback options', function() {
|
|
1078
|
+
describe('callback options', function () {
|
|
1016
1079
|
beforeEach(function (done) {
|
|
1017
1080
|
window.server = sinon.createFakeServer();
|
|
1018
1081
|
done();
|
|
@@ -1024,31 +1087,29 @@ describe('callback options', function() {
|
|
|
1024
1087
|
});
|
|
1025
1088
|
|
|
1026
1089
|
function stubResponse(server) {
|
|
1027
|
-
server.respondWith('POST', 'api/1/item',
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
]
|
|
1033
|
-
);
|
|
1090
|
+
server.respondWith('POST', 'api/1/item', [
|
|
1091
|
+
200,
|
|
1092
|
+
{ 'Content-Type': 'application/json' },
|
|
1093
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
1094
|
+
]);
|
|
1034
1095
|
}
|
|
1035
1096
|
|
|
1036
|
-
it('should use checkIgnore when set', function(done) {
|
|
1097
|
+
it('should use checkIgnore when set', function (done) {
|
|
1037
1098
|
var server = window.server;
|
|
1038
1099
|
stubResponse(server);
|
|
1039
1100
|
server.requests.length = 0;
|
|
1040
1101
|
|
|
1041
1102
|
var options = {
|
|
1042
1103
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1043
|
-
checkIgnore: function(_isUncaught, _args, _payload) {
|
|
1104
|
+
checkIgnore: function (_isUncaught, _args, _payload) {
|
|
1044
1105
|
return true;
|
|
1045
|
-
}
|
|
1106
|
+
},
|
|
1046
1107
|
};
|
|
1047
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1108
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1048
1109
|
|
|
1049
1110
|
rollbar.log('test'); // generate a payload to ignore
|
|
1050
1111
|
|
|
1051
|
-
setTimeout(function() {
|
|
1112
|
+
setTimeout(function () {
|
|
1052
1113
|
server.respond();
|
|
1053
1114
|
|
|
1054
1115
|
expect(server.requests.length).to.eql(0);
|
|
@@ -1057,25 +1118,25 @@ describe('callback options', function() {
|
|
|
1057
1118
|
}, 1);
|
|
1058
1119
|
});
|
|
1059
1120
|
|
|
1060
|
-
it('should receive valid arguments at checkIgnore', function(done) {
|
|
1121
|
+
it('should receive valid arguments at checkIgnore', function (done) {
|
|
1061
1122
|
var server = window.server;
|
|
1062
1123
|
stubResponse(server);
|
|
1063
1124
|
server.requests.length = 0;
|
|
1064
1125
|
|
|
1065
1126
|
var options = {
|
|
1066
1127
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1067
|
-
checkIgnore: function(_isUncaught, args, payload) {
|
|
1128
|
+
checkIgnore: function (_isUncaught, args, payload) {
|
|
1068
1129
|
if (_isUncaught === false && args[0] instanceof Error && payload.uuid) {
|
|
1069
1130
|
return true;
|
|
1070
1131
|
}
|
|
1071
1132
|
return false;
|
|
1072
|
-
}
|
|
1133
|
+
},
|
|
1073
1134
|
};
|
|
1074
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1135
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1075
1136
|
|
|
1076
1137
|
rollbar.log(new Error('test'));
|
|
1077
1138
|
|
|
1078
|
-
setTimeout(function() {
|
|
1139
|
+
setTimeout(function () {
|
|
1079
1140
|
server.respond();
|
|
1080
1141
|
|
|
1081
1142
|
// Should be ignored if all checks pass.
|
|
@@ -1085,7 +1146,7 @@ describe('callback options', function() {
|
|
|
1085
1146
|
}, 1);
|
|
1086
1147
|
});
|
|
1087
1148
|
|
|
1088
|
-
it('should receive uncaught at checkIgnore', function(done) {
|
|
1149
|
+
it('should receive uncaught at checkIgnore', function (done) {
|
|
1089
1150
|
var server = window.server;
|
|
1090
1151
|
stubResponse(server);
|
|
1091
1152
|
server.requests.length = 0;
|
|
@@ -1093,19 +1154,19 @@ describe('callback options', function() {
|
|
|
1093
1154
|
var options = {
|
|
1094
1155
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1095
1156
|
captureUncaught: true,
|
|
1096
|
-
checkIgnore: function(isUncaught, args, payload) {
|
|
1157
|
+
checkIgnore: function (isUncaught, args, payload) {
|
|
1097
1158
|
if (isUncaught === true) {
|
|
1098
1159
|
return true;
|
|
1099
1160
|
}
|
|
1100
1161
|
return false;
|
|
1101
|
-
}
|
|
1162
|
+
},
|
|
1102
1163
|
};
|
|
1103
1164
|
window.rollbar = new Rollbar(options);
|
|
1104
1165
|
|
|
1105
1166
|
var element = document.getElementById('throw-error');
|
|
1106
1167
|
element.click();
|
|
1107
1168
|
|
|
1108
|
-
setTimeout(function() {
|
|
1169
|
+
setTimeout(function () {
|
|
1109
1170
|
server.respond();
|
|
1110
1171
|
|
|
1111
1172
|
// Should be ignored if checkIgnore receives isUncaught.
|
|
@@ -1113,93 +1174,96 @@ describe('callback options', function() {
|
|
|
1113
1174
|
|
|
1114
1175
|
done();
|
|
1115
1176
|
}, 1);
|
|
1116
|
-
})
|
|
1177
|
+
});
|
|
1117
1178
|
|
|
1118
|
-
it('should send when checkIgnore returns false', function(done) {
|
|
1179
|
+
it('should send when checkIgnore returns false', function (done) {
|
|
1119
1180
|
var server = window.server;
|
|
1120
1181
|
stubResponse(server);
|
|
1121
1182
|
server.requests.length = 0;
|
|
1122
1183
|
|
|
1123
1184
|
var options = {
|
|
1124
1185
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1125
|
-
checkIgnore: function(_isUncaught, _args, _payload) {
|
|
1186
|
+
checkIgnore: function (_isUncaught, _args, _payload) {
|
|
1126
1187
|
return false;
|
|
1127
|
-
}
|
|
1188
|
+
},
|
|
1128
1189
|
};
|
|
1129
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1190
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1130
1191
|
|
|
1131
1192
|
rollbar.log('test'); // generate a payload to inspect
|
|
1132
1193
|
|
|
1133
|
-
setTimeout(function() {
|
|
1194
|
+
setTimeout(function () {
|
|
1134
1195
|
server.respond();
|
|
1135
1196
|
|
|
1136
1197
|
expect(server.requests.length).to.eql(1);
|
|
1137
1198
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
1138
|
-
expect(
|
|
1139
|
-
.
|
|
1199
|
+
expect(
|
|
1200
|
+
body.data.notifier.configured_options.checkIgnore.substr(0, 8),
|
|
1201
|
+
).to.eql('function');
|
|
1140
1202
|
|
|
1141
1203
|
done();
|
|
1142
1204
|
}, 1);
|
|
1143
1205
|
});
|
|
1144
1206
|
|
|
1145
|
-
it('should use onSendCallback when set', function(done) {
|
|
1207
|
+
it('should use onSendCallback when set', function (done) {
|
|
1146
1208
|
var server = window.server;
|
|
1147
1209
|
stubResponse(server);
|
|
1148
1210
|
server.requests.length = 0;
|
|
1149
1211
|
|
|
1150
1212
|
var options = {
|
|
1151
1213
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1152
|
-
onSendCallback: function(_isUncaught, _args, payload) {
|
|
1214
|
+
onSendCallback: function (_isUncaught, _args, payload) {
|
|
1153
1215
|
payload.foo = 'bar';
|
|
1154
|
-
}
|
|
1216
|
+
},
|
|
1155
1217
|
};
|
|
1156
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1218
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1157
1219
|
|
|
1158
1220
|
rollbar.log('test'); // generate a payload to inspect
|
|
1159
1221
|
|
|
1160
|
-
setTimeout(function() {
|
|
1222
|
+
setTimeout(function () {
|
|
1161
1223
|
server.respond();
|
|
1162
1224
|
|
|
1163
1225
|
expect(server.requests.length).to.eql(1);
|
|
1164
1226
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
1165
1227
|
expect(body.data.foo).to.eql('bar');
|
|
1166
|
-
expect(
|
|
1167
|
-
.
|
|
1228
|
+
expect(
|
|
1229
|
+
body.data.notifier.configured_options.onSendCallback.substr(0, 8),
|
|
1230
|
+
).to.eql('function');
|
|
1168
1231
|
|
|
1169
1232
|
done();
|
|
1170
1233
|
}, 1);
|
|
1171
1234
|
});
|
|
1172
1235
|
|
|
1173
|
-
it('should use transform when set', function(done) {
|
|
1236
|
+
it('should use transform when set', function (done) {
|
|
1174
1237
|
var server = window.server;
|
|
1175
1238
|
stubResponse(server);
|
|
1176
1239
|
server.requests.length = 0;
|
|
1177
1240
|
|
|
1178
1241
|
var options = {
|
|
1179
1242
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1180
|
-
transform: function(data, _item) {
|
|
1243
|
+
transform: function (data, _item) {
|
|
1181
1244
|
data.foo = 'baz';
|
|
1182
|
-
}
|
|
1245
|
+
},
|
|
1183
1246
|
};
|
|
1184
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1247
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1185
1248
|
|
|
1186
1249
|
rollbar.log('test'); // generate a payload to inspect
|
|
1187
1250
|
|
|
1188
|
-
setTimeout(function() {
|
|
1251
|
+
setTimeout(function () {
|
|
1189
1252
|
server.respond();
|
|
1190
1253
|
|
|
1191
1254
|
expect(server.requests.length).to.eql(1);
|
|
1192
1255
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
1193
1256
|
expect(body.data.foo).to.eql('baz');
|
|
1194
|
-
expect(
|
|
1195
|
-
.
|
|
1257
|
+
expect(
|
|
1258
|
+
body.data.notifier.configured_options.transform.substr(0, 8),
|
|
1259
|
+
).to.eql('function');
|
|
1196
1260
|
|
|
1197
1261
|
done();
|
|
1198
1262
|
}, 1);
|
|
1199
1263
|
});
|
|
1200
1264
|
});
|
|
1201
1265
|
|
|
1202
|
-
describe('options.autoInstrument', function() {
|
|
1266
|
+
describe('options.autoInstrument', function () {
|
|
1203
1267
|
beforeEach(function (done) {
|
|
1204
1268
|
window.server = sinon.createFakeServer();
|
|
1205
1269
|
done();
|
|
@@ -1211,57 +1275,66 @@ describe('options.autoInstrument', function() {
|
|
|
1211
1275
|
});
|
|
1212
1276
|
|
|
1213
1277
|
function stubResponse(server) {
|
|
1214
|
-
server.respondWith('POST', 'api/1/item',
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
]
|
|
1220
|
-
);
|
|
1278
|
+
server.respondWith('POST', 'api/1/item', [
|
|
1279
|
+
200,
|
|
1280
|
+
{ 'Content-Type': 'application/json' },
|
|
1281
|
+
'{"err": 0, "result":{ "uuid": "d4c7acef55bf4c9ea95e4fe9428a8287"}}',
|
|
1282
|
+
]);
|
|
1221
1283
|
}
|
|
1222
1284
|
|
|
1223
|
-
describe('options.autoInstrument.contentSecurityPolicy', function() {
|
|
1285
|
+
describe('options.autoInstrument.contentSecurityPolicy', function () {
|
|
1224
1286
|
beforeEach(function (done) {
|
|
1225
1287
|
var options = {
|
|
1226
1288
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1227
1289
|
autoInstrument: {
|
|
1228
1290
|
log: false,
|
|
1229
1291
|
contentSecurityPolicy: true,
|
|
1230
|
-
errorOnContentSecurityPolicy: true
|
|
1231
|
-
}
|
|
1292
|
+
errorOnContentSecurityPolicy: true,
|
|
1293
|
+
},
|
|
1232
1294
|
};
|
|
1233
1295
|
window.rollbar = new Rollbar(options);
|
|
1234
1296
|
done();
|
|
1235
1297
|
});
|
|
1236
1298
|
|
|
1237
1299
|
afterEach(function () {
|
|
1238
|
-
window.rollbar.configure({
|
|
1300
|
+
window.rollbar.configure({
|
|
1301
|
+
autoInstrument: false,
|
|
1302
|
+
captureUncaught: false,
|
|
1303
|
+
});
|
|
1239
1304
|
});
|
|
1240
1305
|
|
|
1241
|
-
it('should report content security policy errors', function(done) {
|
|
1306
|
+
it('should report content security policy errors', function (done) {
|
|
1242
1307
|
var queue = rollbar.client.notifier.queue;
|
|
1243
1308
|
var queueStub = sinon.stub(queue, '_makeApiRequest');
|
|
1244
1309
|
|
|
1245
1310
|
// Load the HTML page, so errors can be generated.
|
|
1246
1311
|
document.write(window.__html__['examples/csp-errors.html']);
|
|
1247
1312
|
|
|
1248
|
-
setTimeout(function() {
|
|
1313
|
+
setTimeout(function () {
|
|
1249
1314
|
try {
|
|
1250
1315
|
var item = queueStub.getCall(0).args[0];
|
|
1251
1316
|
var message = item.body.message.body;
|
|
1252
|
-
var telemetry = item.body.telemetry[0]
|
|
1317
|
+
var telemetry = item.body.telemetry[0];
|
|
1253
1318
|
|
|
1254
1319
|
expect(message).to.match(/Security Policy Violation/);
|
|
1255
1320
|
expect(message).to.match(/blockedURI: https:\/\/example.com\/v3\//);
|
|
1256
1321
|
expect(message).to.match(/violatedDirective: script-src/);
|
|
1257
|
-
expect(message).to.match(
|
|
1322
|
+
expect(message).to.match(
|
|
1323
|
+
/originalPolicy: default-src 'self' 'unsafe-inline' 'unsafe-eval';/,
|
|
1324
|
+
);
|
|
1258
1325
|
|
|
1259
1326
|
expect(telemetry.level).to.eql('error');
|
|
1260
1327
|
expect(telemetry.type).to.eql('log');
|
|
1261
1328
|
expect(telemetry.body.message).to.match(/Security Policy Violation/);
|
|
1262
|
-
expect(telemetry.body.message).to.match(
|
|
1263
|
-
|
|
1264
|
-
|
|
1329
|
+
expect(telemetry.body.message).to.match(
|
|
1330
|
+
/blockedURI: https:\/\/example.com\/v3\//,
|
|
1331
|
+
);
|
|
1332
|
+
expect(telemetry.body.message).to.match(
|
|
1333
|
+
/violatedDirective: script-src/,
|
|
1334
|
+
);
|
|
1335
|
+
expect(telemetry.body.message).to.match(
|
|
1336
|
+
/originalPolicy: default-src 'self' 'unsafe-inline' 'unsafe-eval';/,
|
|
1337
|
+
);
|
|
1265
1338
|
|
|
1266
1339
|
done();
|
|
1267
1340
|
} catch (e) {
|
|
@@ -1271,21 +1344,21 @@ describe('options.autoInstrument', function() {
|
|
|
1271
1344
|
});
|
|
1272
1345
|
});
|
|
1273
1346
|
|
|
1274
|
-
it('should add telemetry events when console.log is called', function(done) {
|
|
1347
|
+
it('should add telemetry events when console.log is called', function (done) {
|
|
1275
1348
|
var server = window.server;
|
|
1276
1349
|
stubResponse(server);
|
|
1277
1350
|
server.requests.length = 0;
|
|
1278
1351
|
|
|
1279
1352
|
var options = {
|
|
1280
|
-
accessToken: 'POST_CLIENT_ITEM_TOKEN'
|
|
1353
|
+
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1281
1354
|
};
|
|
1282
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1355
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1283
1356
|
|
|
1284
1357
|
console.log('console test'); // generate a telemetry event
|
|
1285
1358
|
|
|
1286
1359
|
rollbar.log('test'); // generate a payload to inspect
|
|
1287
1360
|
|
|
1288
|
-
setTimeout(function() {
|
|
1361
|
+
setTimeout(function () {
|
|
1289
1362
|
server.respond();
|
|
1290
1363
|
|
|
1291
1364
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
@@ -1305,26 +1378,24 @@ describe('options.autoInstrument', function() {
|
|
|
1305
1378
|
networkResponseHeaders: true,
|
|
1306
1379
|
networkResponseBody: true,
|
|
1307
1380
|
networkRequestBody: true,
|
|
1308
|
-
networkRequestHeaders: true
|
|
1309
|
-
}
|
|
1381
|
+
networkRequestHeaders: true,
|
|
1382
|
+
},
|
|
1310
1383
|
};
|
|
1311
1384
|
return new Rollbar(options);
|
|
1312
1385
|
}
|
|
1313
1386
|
|
|
1314
|
-
it('should add telemetry events for POST xhr calls', function(done) {
|
|
1387
|
+
it('should add telemetry events for POST xhr calls', function (done) {
|
|
1315
1388
|
var server = window.server;
|
|
1316
1389
|
stubResponse(server);
|
|
1317
1390
|
server.requests.length = 0;
|
|
1318
1391
|
|
|
1319
|
-
server.respondWith('POST', 'https://example.com/xhr-test',
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
]
|
|
1325
|
-
);
|
|
1392
|
+
server.respondWith('POST', 'https://example.com/xhr-test', [
|
|
1393
|
+
200,
|
|
1394
|
+
{ 'Content-Type': 'application/json', Password: '123456' },
|
|
1395
|
+
JSON.stringify({ name: 'foo', password: '123456' }),
|
|
1396
|
+
]);
|
|
1326
1397
|
|
|
1327
|
-
var rollbar = window.rollbar = initRollbarForNetworkTelemetry();
|
|
1398
|
+
var rollbar = (window.rollbar = initRollbarForNetworkTelemetry());
|
|
1328
1399
|
|
|
1329
1400
|
// generate a telemetry event
|
|
1330
1401
|
var xhr = new XMLHttpRequest();
|
|
@@ -1332,25 +1403,34 @@ describe('options.autoInstrument', function() {
|
|
|
1332
1403
|
xhr.setRequestHeader('Content-type', 'application/json');
|
|
1333
1404
|
xhr.setRequestHeader('Secret', 'abcdef');
|
|
1334
1405
|
xhr.onreadystatechange = function () {
|
|
1335
|
-
if(xhr.readyState === 4) {
|
|
1406
|
+
if (xhr.readyState === 4) {
|
|
1336
1407
|
try {
|
|
1337
1408
|
rollbar.log('test'); // generate a payload to inspect
|
|
1338
1409
|
|
|
1339
|
-
setTimeout(function() {
|
|
1410
|
+
setTimeout(function () {
|
|
1340
1411
|
server.respond();
|
|
1341
1412
|
|
|
1342
1413
|
expect(server.requests.length).to.eql(2);
|
|
1343
1414
|
var body = JSON.parse(server.requests[1].requestBody);
|
|
1344
1415
|
|
|
1345
1416
|
// Verify request capture and scrubbing
|
|
1346
|
-
expect(body.data.body.telemetry[0].body.request).to.eql(
|
|
1417
|
+
expect(body.data.body.telemetry[0].body.request).to.eql(
|
|
1418
|
+
'{"name":"bar","secret":"********"}',
|
|
1419
|
+
);
|
|
1347
1420
|
|
|
1348
1421
|
// Verify request headers capture and case-insensitive scrubbing
|
|
1349
|
-
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1422
|
+
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1423
|
+
'Content-type': 'application/json',
|
|
1424
|
+
Secret: '********',
|
|
1425
|
+
});
|
|
1350
1426
|
|
|
1351
1427
|
// Verify response capture and scrubbing
|
|
1352
|
-
expect(body.data.body.telemetry[0].body.response.body).to.eql(
|
|
1353
|
-
|
|
1428
|
+
expect(body.data.body.telemetry[0].body.response.body).to.eql(
|
|
1429
|
+
'{"name":"foo","password":"********"}',
|
|
1430
|
+
);
|
|
1431
|
+
expect(
|
|
1432
|
+
body.data.body.telemetry[0].body.response.headers['Password'],
|
|
1433
|
+
).to.eql('********');
|
|
1354
1434
|
|
|
1355
1435
|
done();
|
|
1356
1436
|
}, 1);
|
|
@@ -1359,48 +1439,50 @@ describe('options.autoInstrument', function() {
|
|
|
1359
1439
|
}
|
|
1360
1440
|
}
|
|
1361
1441
|
};
|
|
1362
|
-
xhr.send(JSON.stringify({name: 'bar', secret: 'xhr post' }));
|
|
1442
|
+
xhr.send(JSON.stringify({ name: 'bar', secret: 'xhr post' }));
|
|
1363
1443
|
server.respond();
|
|
1364
1444
|
});
|
|
1365
1445
|
|
|
1366
|
-
it('should add telemetry events for GET xhr calls', function(done) {
|
|
1446
|
+
it('should add telemetry events for GET xhr calls', function (done) {
|
|
1367
1447
|
var server = window.server;
|
|
1368
1448
|
stubResponse(server);
|
|
1369
1449
|
server.requests.length = 0;
|
|
1370
1450
|
|
|
1371
|
-
server.respondWith('GET', 'https://example.com/xhr-test',
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
},
|
|
1377
|
-
JSON.stringify({name: 'foo', password: '123456'})
|
|
1378
|
-
]
|
|
1379
|
-
);
|
|
1451
|
+
server.respondWith('GET', 'https://example.com/xhr-test', [
|
|
1452
|
+
200,
|
|
1453
|
+
{ 'Content-Type': 'application/json', Password: 'abcdef' },
|
|
1454
|
+
JSON.stringify({ name: 'foo', password: '123456' }),
|
|
1455
|
+
]);
|
|
1380
1456
|
|
|
1381
|
-
var rollbar = window.rollbar = initRollbarForNetworkTelemetry();
|
|
1457
|
+
var rollbar = (window.rollbar = initRollbarForNetworkTelemetry());
|
|
1382
1458
|
|
|
1383
1459
|
// generate a telemetry event
|
|
1384
1460
|
var xhr = new XMLHttpRequest();
|
|
1385
1461
|
xhr.open('GET', 'https://example.com/xhr-test', true);
|
|
1386
1462
|
xhr.setRequestHeader('Secret', 'abcdef');
|
|
1387
1463
|
xhr.onreadystatechange = function () {
|
|
1388
|
-
if(xhr.readyState === 4) {
|
|
1464
|
+
if (xhr.readyState === 4) {
|
|
1389
1465
|
try {
|
|
1390
1466
|
rollbar.log('test'); // generate a payload to inspect
|
|
1391
1467
|
|
|
1392
|
-
setTimeout(function() {
|
|
1468
|
+
setTimeout(function () {
|
|
1393
1469
|
server.respond();
|
|
1394
1470
|
|
|
1395
1471
|
expect(server.requests.length).to.eql(2);
|
|
1396
1472
|
var body = JSON.parse(server.requests[1].requestBody);
|
|
1397
1473
|
|
|
1398
1474
|
// Verify request headers capture and case-insensitive scrubbing
|
|
1399
|
-
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1475
|
+
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1476
|
+
Secret: '********',
|
|
1477
|
+
});
|
|
1400
1478
|
|
|
1401
1479
|
// Verify response capture and scrubbing
|
|
1402
|
-
expect(body.data.body.telemetry[0].body.response.body).to.eql(
|
|
1403
|
-
|
|
1480
|
+
expect(body.data.body.telemetry[0].body.response.body).to.eql(
|
|
1481
|
+
'{"name":"foo","password":"********"}',
|
|
1482
|
+
);
|
|
1483
|
+
expect(
|
|
1484
|
+
body.data.body.telemetry[0].body.response.headers['Password'],
|
|
1485
|
+
).to.eql('********');
|
|
1404
1486
|
|
|
1405
1487
|
done();
|
|
1406
1488
|
}, 1);
|
|
@@ -1409,49 +1491,54 @@ describe('options.autoInstrument', function() {
|
|
|
1409
1491
|
}
|
|
1410
1492
|
}
|
|
1411
1493
|
};
|
|
1412
|
-
xhr.send(JSON.stringify({name: 'bar', secret: 'xhr post' }));
|
|
1494
|
+
xhr.send(JSON.stringify({ name: 'bar', secret: 'xhr post' }));
|
|
1413
1495
|
server.respond();
|
|
1414
1496
|
});
|
|
1415
1497
|
|
|
1416
|
-
it('should handle non-string Content-Type', function(done) {
|
|
1498
|
+
it('should handle non-string Content-Type', function (done) {
|
|
1417
1499
|
var server = window.server;
|
|
1418
1500
|
stubResponse(server);
|
|
1419
1501
|
server.requests.length = 0;
|
|
1420
1502
|
|
|
1421
|
-
server.respondWith('GET', 'https://example.com/xhr-test',
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
);
|
|
1503
|
+
server.respondWith('GET', 'https://example.com/xhr-test', [
|
|
1504
|
+
200,
|
|
1505
|
+
{
|
|
1506
|
+
'Content-Type': {}, // unexpected/invalid (non-string) content type
|
|
1507
|
+
Password: 'abcdef',
|
|
1508
|
+
},
|
|
1509
|
+
JSON.stringify({ name: 'foo', password: '123456' }),
|
|
1510
|
+
]);
|
|
1430
1511
|
|
|
1431
|
-
var rollbar = window.rollbar = initRollbarForNetworkTelemetry();
|
|
1512
|
+
var rollbar = (window.rollbar = initRollbarForNetworkTelemetry());
|
|
1432
1513
|
|
|
1433
1514
|
// generate a telemetry event
|
|
1434
1515
|
var xhr = new XMLHttpRequest();
|
|
1435
1516
|
xhr.open('GET', 'https://example.com/xhr-test', true);
|
|
1436
1517
|
xhr.setRequestHeader('Secret', 'abcdef');
|
|
1437
1518
|
xhr.onreadystatechange = function () {
|
|
1438
|
-
if(xhr.readyState === 4) {
|
|
1519
|
+
if (xhr.readyState === 4) {
|
|
1439
1520
|
try {
|
|
1440
1521
|
rollbar.log('test'); // generate a payload to inspect
|
|
1441
1522
|
|
|
1442
|
-
setTimeout(function() {
|
|
1523
|
+
setTimeout(function () {
|
|
1443
1524
|
server.respond();
|
|
1444
1525
|
|
|
1445
1526
|
expect(server.requests.length).to.eql(2);
|
|
1446
1527
|
var body = JSON.parse(server.requests[1].requestBody);
|
|
1447
1528
|
|
|
1448
1529
|
// Verify request headers capture and case-insensitive scrubbing
|
|
1449
|
-
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1530
|
+
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1531
|
+
Secret: '********',
|
|
1532
|
+
});
|
|
1450
1533
|
|
|
1451
1534
|
// Not scrubbed for unrecognized content type
|
|
1452
|
-
expect(body.data.body.telemetry[0].body.response.body).to.eql(
|
|
1535
|
+
expect(body.data.body.telemetry[0].body.response.body).to.eql(
|
|
1536
|
+
'{"name":"foo","password":"123456"}',
|
|
1537
|
+
);
|
|
1453
1538
|
|
|
1454
|
-
expect(
|
|
1539
|
+
expect(
|
|
1540
|
+
body.data.body.telemetry[0].body.response.headers['Password'],
|
|
1541
|
+
).to.eql('********');
|
|
1455
1542
|
|
|
1456
1543
|
done();
|
|
1457
1544
|
}, 1);
|
|
@@ -1460,30 +1547,28 @@ describe('options.autoInstrument', function() {
|
|
|
1460
1547
|
}
|
|
1461
1548
|
}
|
|
1462
1549
|
};
|
|
1463
|
-
xhr.send(JSON.stringify({name: 'bar', secret: 'xhr post' }));
|
|
1550
|
+
xhr.send(JSON.stringify({ name: 'bar', secret: 'xhr post' }));
|
|
1464
1551
|
server.respond();
|
|
1465
1552
|
});
|
|
1466
1553
|
|
|
1467
|
-
it('should send errors for xhr http errors', function(done) {
|
|
1554
|
+
it('should send errors for xhr http errors', function (done) {
|
|
1468
1555
|
var server = window.server;
|
|
1469
1556
|
stubResponse(server);
|
|
1470
1557
|
server.requests.length = 0;
|
|
1471
1558
|
|
|
1472
|
-
server.respondWith('POST', 'xhr-test',
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
]
|
|
1478
|
-
);
|
|
1559
|
+
server.respondWith('POST', 'xhr-test', [
|
|
1560
|
+
404,
|
|
1561
|
+
{ 'Content-Type': 'application/json' },
|
|
1562
|
+
JSON.stringify({ foo: 'bar' }),
|
|
1563
|
+
]);
|
|
1479
1564
|
|
|
1480
1565
|
var options = {
|
|
1481
1566
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1482
1567
|
autoInstrument: {
|
|
1483
1568
|
log: false,
|
|
1484
1569
|
network: true,
|
|
1485
|
-
networkErrorOnHttp4xx: true
|
|
1486
|
-
}
|
|
1570
|
+
networkErrorOnHttp4xx: true,
|
|
1571
|
+
},
|
|
1487
1572
|
};
|
|
1488
1573
|
window.rollbar = new Rollbar(options);
|
|
1489
1574
|
|
|
@@ -1492,16 +1577,18 @@ describe('options.autoInstrument', function() {
|
|
|
1492
1577
|
xhr.open('POST', 'https://example.com/xhr-test', true);
|
|
1493
1578
|
xhr.setRequestHeader('Content-type', 'application/json');
|
|
1494
1579
|
xhr.onreadystatechange = function () {
|
|
1495
|
-
if(xhr.readyState === 4) {
|
|
1580
|
+
if (xhr.readyState === 4) {
|
|
1496
1581
|
try {
|
|
1497
|
-
setTimeout(function() {
|
|
1582
|
+
setTimeout(function () {
|
|
1498
1583
|
try {
|
|
1499
1584
|
server.respond();
|
|
1500
1585
|
|
|
1501
1586
|
expect(server.requests.length).to.eql(2);
|
|
1502
1587
|
var body = JSON.parse(server.requests[1].requestBody);
|
|
1503
1588
|
|
|
1504
|
-
expect(body.data.body.trace.exception.message).to.eql(
|
|
1589
|
+
expect(body.data.body.trace.exception.message).to.eql(
|
|
1590
|
+
'HTTP request failed with Status 404',
|
|
1591
|
+
);
|
|
1505
1592
|
|
|
1506
1593
|
// Just knowing a stack is present is enough for this test.
|
|
1507
1594
|
expect(body.data.body.trace.frames.length).to.be.above(1);
|
|
@@ -1516,24 +1603,29 @@ describe('options.autoInstrument', function() {
|
|
|
1516
1603
|
}
|
|
1517
1604
|
}
|
|
1518
1605
|
};
|
|
1519
|
-
xhr.send(JSON.stringify({name: 'bar', secret: 'xhr post' }));
|
|
1520
|
-
setTimeout(function() {
|
|
1606
|
+
xhr.send(JSON.stringify({ name: 'bar', secret: 'xhr post' }));
|
|
1607
|
+
setTimeout(function () {
|
|
1521
1608
|
server.respond();
|
|
1522
1609
|
}, 1);
|
|
1523
1610
|
});
|
|
1524
1611
|
|
|
1525
|
-
it('should add telemetry events for fetch calls', function(done) {
|
|
1612
|
+
it('should add telemetry events for fetch calls', function (done) {
|
|
1526
1613
|
var server = window.server;
|
|
1527
1614
|
stubResponse(server);
|
|
1528
1615
|
server.requests.length = 0;
|
|
1529
1616
|
|
|
1530
1617
|
window.fetchStub = sinon.stub(window, 'fetch');
|
|
1531
1618
|
|
|
1532
|
-
var responseBody = JSON.stringify({name: 'foo', password: '123456'});
|
|
1533
|
-
window.fetch.returns(
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1619
|
+
var responseBody = JSON.stringify({ name: 'foo', password: '123456' });
|
|
1620
|
+
window.fetch.returns(
|
|
1621
|
+
Promise.resolve(
|
|
1622
|
+
new Response(responseBody, {
|
|
1623
|
+
status: 200,
|
|
1624
|
+
statusText: 'OK',
|
|
1625
|
+
headers: { 'content-type': 'application/json', password: '123456' },
|
|
1626
|
+
}),
|
|
1627
|
+
),
|
|
1628
|
+
);
|
|
1537
1629
|
|
|
1538
1630
|
var options = {
|
|
1539
1631
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
@@ -1543,10 +1635,10 @@ describe('options.autoInstrument', function() {
|
|
|
1543
1635
|
networkResponseHeaders: true,
|
|
1544
1636
|
networkResponseBody: true,
|
|
1545
1637
|
networkRequestBody: true,
|
|
1546
|
-
networkRequestHeaders: true
|
|
1547
|
-
}
|
|
1638
|
+
networkRequestHeaders: true,
|
|
1639
|
+
},
|
|
1548
1640
|
};
|
|
1549
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1641
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1550
1642
|
|
|
1551
1643
|
var fetchHeaders = new Headers();
|
|
1552
1644
|
fetchHeaders.append('Content-Type', 'application/json');
|
|
@@ -1555,74 +1647,90 @@ describe('options.autoInstrument', function() {
|
|
|
1555
1647
|
const fetchInit = {
|
|
1556
1648
|
method: 'POST',
|
|
1557
1649
|
headers: fetchHeaders,
|
|
1558
|
-
body: JSON.stringify({name: 'bar', secret: 'fetch post'})
|
|
1650
|
+
body: JSON.stringify({ name: 'bar', secret: 'fetch post' }),
|
|
1559
1651
|
};
|
|
1560
1652
|
var fetchRequest = new Request('https://example.com/fetch-test');
|
|
1561
|
-
window
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1653
|
+
window
|
|
1654
|
+
.fetch(fetchRequest, fetchInit)
|
|
1655
|
+
.then(function (response) {
|
|
1656
|
+
// Assert that the original stream reader hasn't been read.
|
|
1657
|
+
expect(response.bodyUsed).to.eql(false);
|
|
1658
|
+
return response.text();
|
|
1659
|
+
})
|
|
1660
|
+
.then(function (text) {
|
|
1661
|
+
expect(text).to.eql(responseBody);
|
|
1569
1662
|
|
|
1570
|
-
try {
|
|
1571
|
-
rollbar.log('test'); // generate a payload to inspect
|
|
1572
|
-
} catch (e) {
|
|
1573
|
-
done(e);
|
|
1574
|
-
return;
|
|
1575
|
-
}
|
|
1576
|
-
|
|
1577
|
-
setTimeout(function() {
|
|
1578
1663
|
try {
|
|
1579
|
-
|
|
1664
|
+
rollbar.log('test'); // generate a payload to inspect
|
|
1665
|
+
} catch (e) {
|
|
1666
|
+
done(e);
|
|
1667
|
+
return;
|
|
1668
|
+
}
|
|
1580
1669
|
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1670
|
+
setTimeout(function () {
|
|
1671
|
+
try {
|
|
1672
|
+
server.respond();
|
|
1584
1673
|
|
|
1585
|
-
|
|
1586
|
-
|
|
1674
|
+
expect(window.fetchStub.called).to.be.ok();
|
|
1675
|
+
expect(server.requests.length).to.eql(1);
|
|
1676
|
+
var body = JSON.parse(server.requests[0].requestBody);
|
|
1587
1677
|
|
|
1588
|
-
|
|
1589
|
-
|
|
1678
|
+
// Verify request capture and scrubbing
|
|
1679
|
+
expect(body.data.body.telemetry[0].body.request).to.eql(
|
|
1680
|
+
'{"name":"bar","secret":"********"}',
|
|
1681
|
+
);
|
|
1590
1682
|
|
|
1591
|
-
|
|
1592
|
-
|
|
1683
|
+
// Verify request headers capture and case-insensitive scrubbing
|
|
1684
|
+
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1685
|
+
'content-type': 'application/json',
|
|
1686
|
+
secret: '********',
|
|
1687
|
+
});
|
|
1593
1688
|
|
|
1594
|
-
|
|
1595
|
-
|
|
1689
|
+
// Verify response capture and scrubbing
|
|
1690
|
+
expect(body.data.body.telemetry[0].body.response.body).to.eql(
|
|
1691
|
+
'{"name":"foo","password":"********"}',
|
|
1692
|
+
);
|
|
1596
1693
|
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1694
|
+
// Verify response headers capture and case-insensitive scrubbing
|
|
1695
|
+
expect(body.data.body.telemetry[0].body.response.headers).to.eql({
|
|
1696
|
+
'content-type': 'application/json',
|
|
1697
|
+
password: '********',
|
|
1698
|
+
});
|
|
1699
|
+
|
|
1700
|
+
rollbar.configure({ autoInstrument: false });
|
|
1701
|
+
window.fetch.restore();
|
|
1702
|
+
done();
|
|
1703
|
+
} catch (e) {
|
|
1704
|
+
done(e);
|
|
1705
|
+
return;
|
|
1706
|
+
}
|
|
1707
|
+
}, 1);
|
|
1708
|
+
});
|
|
1606
1709
|
});
|
|
1607
1710
|
|
|
1608
|
-
it('should report error for http 4xx fetch calls, when enabled', function(done) {
|
|
1711
|
+
it('should report error for http 4xx fetch calls, when enabled', function (done) {
|
|
1609
1712
|
var server = window.server;
|
|
1610
1713
|
stubResponse(server);
|
|
1611
1714
|
server.requests.length = 0;
|
|
1612
1715
|
|
|
1613
1716
|
window.fetchStub = sinon.stub(window, 'fetch');
|
|
1614
|
-
window.fetch.returns(
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1717
|
+
window.fetch.returns(
|
|
1718
|
+
Promise.resolve(
|
|
1719
|
+
new Response(JSON.stringify({ foo: 'bar' }), {
|
|
1720
|
+
status: 404,
|
|
1721
|
+
statusText: 'Not Found',
|
|
1722
|
+
headers: { 'content-type': 'application/json' },
|
|
1723
|
+
}),
|
|
1724
|
+
),
|
|
1725
|
+
);
|
|
1618
1726
|
|
|
1619
1727
|
var options = {
|
|
1620
1728
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1621
1729
|
autoInstrument: {
|
|
1622
1730
|
log: false,
|
|
1623
1731
|
network: true,
|
|
1624
|
-
networkErrorOnHttp4xx: true
|
|
1625
|
-
}
|
|
1732
|
+
networkErrorOnHttp4xx: true,
|
|
1733
|
+
},
|
|
1626
1734
|
};
|
|
1627
1735
|
window.rollbar = new Rollbar(options);
|
|
1628
1736
|
|
|
@@ -1632,18 +1740,20 @@ describe('options.autoInstrument', function() {
|
|
|
1632
1740
|
const fetchInit = {
|
|
1633
1741
|
method: 'POST',
|
|
1634
1742
|
headers: fetchHeaders,
|
|
1635
|
-
body: JSON.stringify({foo: 'bar'})
|
|
1743
|
+
body: JSON.stringify({ foo: 'bar' }),
|
|
1636
1744
|
};
|
|
1637
1745
|
var fetchRequest = new Request('https://example.com/xhr-test');
|
|
1638
|
-
window.fetch(fetchRequest, fetchInit).then(function(_response) {
|
|
1639
|
-
setTimeout(function() {
|
|
1746
|
+
window.fetch(fetchRequest, fetchInit).then(function (_response) {
|
|
1747
|
+
setTimeout(function () {
|
|
1640
1748
|
try {
|
|
1641
1749
|
server.respond();
|
|
1642
1750
|
|
|
1643
1751
|
expect(server.requests.length).to.eql(1);
|
|
1644
1752
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
1645
1753
|
|
|
1646
|
-
expect(body.data.body.trace.exception.message).to.eql(
|
|
1754
|
+
expect(body.data.body.trace.exception.message).to.eql(
|
|
1755
|
+
'HTTP request failed with Status 404',
|
|
1756
|
+
);
|
|
1647
1757
|
|
|
1648
1758
|
// Just knowing a stack is present is enough for this test.
|
|
1649
1759
|
expect(body.data.body.trace.frames.length).to.be.above(1);
|
|
@@ -1655,10 +1765,10 @@ describe('options.autoInstrument', function() {
|
|
|
1655
1765
|
done(e);
|
|
1656
1766
|
}
|
|
1657
1767
|
}, 1);
|
|
1658
|
-
})
|
|
1768
|
+
});
|
|
1659
1769
|
});
|
|
1660
1770
|
|
|
1661
|
-
it('should add telemetry headers when fetch Headers object is undefined', function(done) {
|
|
1771
|
+
it('should add telemetry headers when fetch Headers object is undefined', function (done) {
|
|
1662
1772
|
var server = window.server;
|
|
1663
1773
|
stubResponse(server);
|
|
1664
1774
|
server.requests.length = 0;
|
|
@@ -1667,15 +1777,20 @@ describe('options.autoInstrument', function() {
|
|
|
1667
1777
|
|
|
1668
1778
|
var readableStream = new ReadableStream({
|
|
1669
1779
|
start(controller) {
|
|
1670
|
-
controller.enqueue(JSON.stringify({name: 'foo', password: '123456'}));
|
|
1780
|
+
controller.enqueue(JSON.stringify({ name: 'foo', password: '123456' }));
|
|
1671
1781
|
controller.close();
|
|
1672
|
-
}
|
|
1782
|
+
},
|
|
1673
1783
|
});
|
|
1674
1784
|
|
|
1675
|
-
window.fetch.returns(
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1785
|
+
window.fetch.returns(
|
|
1786
|
+
Promise.resolve(
|
|
1787
|
+
new Response(readableStream, {
|
|
1788
|
+
status: 200,
|
|
1789
|
+
statusText: 'OK',
|
|
1790
|
+
headers: { 'content-type': 'application/json', password: '123456' },
|
|
1791
|
+
}),
|
|
1792
|
+
),
|
|
1793
|
+
);
|
|
1679
1794
|
|
|
1680
1795
|
var options = {
|
|
1681
1796
|
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
@@ -1683,10 +1798,10 @@ describe('options.autoInstrument', function() {
|
|
|
1683
1798
|
log: false,
|
|
1684
1799
|
network: true,
|
|
1685
1800
|
networkResponseHeaders: true,
|
|
1686
|
-
networkRequestHeaders: true
|
|
1687
|
-
}
|
|
1801
|
+
networkRequestHeaders: true,
|
|
1802
|
+
},
|
|
1688
1803
|
};
|
|
1689
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1804
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1690
1805
|
|
|
1691
1806
|
// Remove Headers from window object
|
|
1692
1807
|
var originalHeaders = window.Headers;
|
|
@@ -1694,15 +1809,14 @@ describe('options.autoInstrument', function() {
|
|
|
1694
1809
|
|
|
1695
1810
|
const fetchInit = {
|
|
1696
1811
|
method: 'POST',
|
|
1697
|
-
headers: {'Content-Type': 'application/json', Secret: '123456'},
|
|
1698
|
-
body: JSON.stringify({name: 'bar', secret: 'xhr post'})
|
|
1812
|
+
headers: { 'Content-Type': 'application/json', Secret: '123456' },
|
|
1813
|
+
body: JSON.stringify({ name: 'bar', secret: 'xhr post' }),
|
|
1699
1814
|
};
|
|
1700
1815
|
var fetchRequest = new Request('https://example.com/xhr-test');
|
|
1701
|
-
window.fetch(fetchRequest, fetchInit)
|
|
1702
|
-
.then(function(response) {
|
|
1816
|
+
window.fetch(fetchRequest, fetchInit).then(function (response) {
|
|
1703
1817
|
try {
|
|
1704
1818
|
rollbar.log('test'); // generate a payload to inspect
|
|
1705
|
-
setTimeout(function() {
|
|
1819
|
+
setTimeout(function () {
|
|
1706
1820
|
try {
|
|
1707
1821
|
server.respond();
|
|
1708
1822
|
|
|
@@ -1710,10 +1824,16 @@ describe('options.autoInstrument', function() {
|
|
|
1710
1824
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
1711
1825
|
|
|
1712
1826
|
// Verify request headers capture and case-insensitive scrubbing
|
|
1713
|
-
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1827
|
+
expect(body.data.body.telemetry[0].body.request_headers).to.eql({
|
|
1828
|
+
'content-type': 'application/json',
|
|
1829
|
+
secret: '********',
|
|
1830
|
+
});
|
|
1714
1831
|
|
|
1715
1832
|
// Verify response headers capture and case-insensitive scrubbing
|
|
1716
|
-
expect(body.data.body.telemetry[0].body.response.headers).to.eql({
|
|
1833
|
+
expect(body.data.body.telemetry[0].body.response.headers).to.eql({
|
|
1834
|
+
'content-type': 'application/json',
|
|
1835
|
+
password: '********',
|
|
1836
|
+
});
|
|
1717
1837
|
|
|
1718
1838
|
// Assert that the original stream reader hasn't been read.
|
|
1719
1839
|
expect(response.bodyUsed).to.eql(false);
|
|
@@ -1729,88 +1849,101 @@ describe('options.autoInstrument', function() {
|
|
|
1729
1849
|
} catch (e) {
|
|
1730
1850
|
done(e);
|
|
1731
1851
|
}
|
|
1732
|
-
})
|
|
1852
|
+
});
|
|
1733
1853
|
});
|
|
1734
1854
|
|
|
1735
|
-
it('should add a diagnostic message when wrapConsole fails', function(done) {
|
|
1855
|
+
it('should add a diagnostic message when wrapConsole fails', function (done) {
|
|
1736
1856
|
var server = window.server;
|
|
1737
1857
|
stubResponse(server);
|
|
1738
1858
|
server.requests.length = 0;
|
|
1739
1859
|
|
|
1740
1860
|
var oldConsole = window.console;
|
|
1741
|
-
var newConsole = {}
|
|
1742
|
-
Object.defineProperty(
|
|
1861
|
+
var newConsole = {};
|
|
1862
|
+
Object.defineProperty(newConsole, 'log', {
|
|
1743
1863
|
get: function () {
|
|
1744
|
-
return function(message) {
|
|
1745
|
-
|
|
1864
|
+
return function (message) {
|
|
1865
|
+
oldConsole.log(message);
|
|
1866
|
+
return message;
|
|
1867
|
+
};
|
|
1868
|
+
},
|
|
1746
1869
|
});
|
|
1747
1870
|
window.console = newConsole;
|
|
1748
1871
|
|
|
1749
1872
|
var options = {
|
|
1750
|
-
accessToken: 'POST_CLIENT_ITEM_TOKEN'
|
|
1873
|
+
accessToken: 'POST_CLIENT_ITEM_TOKEN',
|
|
1751
1874
|
};
|
|
1752
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1875
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1753
1876
|
|
|
1754
1877
|
rollbar.log('test'); // generate a payload to inspect
|
|
1755
1878
|
|
|
1756
|
-
setTimeout(function() {
|
|
1879
|
+
setTimeout(function () {
|
|
1757
1880
|
server.respond();
|
|
1758
1881
|
|
|
1759
1882
|
var body = JSON.parse(server.requests[0].requestBody);
|
|
1760
1883
|
|
|
1761
1884
|
window.console = oldConsole;
|
|
1762
1885
|
|
|
1763
|
-
expect(
|
|
1764
|
-
|
|
1886
|
+
expect(
|
|
1887
|
+
rollbar.client.notifier.diagnostic.instrumentConsole,
|
|
1888
|
+
).to.have.property('error');
|
|
1889
|
+
expect(body.data.notifier.diagnostic.instrumentConsole).to.have.property(
|
|
1890
|
+
'error',
|
|
1891
|
+
);
|
|
1765
1892
|
|
|
1766
1893
|
done();
|
|
1767
1894
|
}, 1);
|
|
1768
1895
|
});
|
|
1769
1896
|
});
|
|
1770
1897
|
|
|
1771
|
-
describe('captureEvent', function() {
|
|
1898
|
+
describe('captureEvent', function () {
|
|
1772
1899
|
afterEach(function () {
|
|
1773
1900
|
window.rollbar.configure({ autoInstrument: false, captureUncaught: false });
|
|
1774
1901
|
});
|
|
1775
1902
|
|
|
1776
|
-
it('should handle missing/default type and level', function(done) {
|
|
1903
|
+
it('should handle missing/default type and level', function (done) {
|
|
1777
1904
|
var options = {};
|
|
1778
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1905
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1779
1906
|
|
|
1780
|
-
var event = rollbar.captureEvent({foo: 'bar'});
|
|
1907
|
+
var event = rollbar.captureEvent({ foo: 'bar' });
|
|
1781
1908
|
expect(event.type).to.eql('manual');
|
|
1782
1909
|
expect(event.level).to.eql('info');
|
|
1783
1910
|
expect(event.body.foo).to.eql('bar');
|
|
1784
1911
|
|
|
1785
1912
|
done();
|
|
1786
1913
|
});
|
|
1787
|
-
it('should handle specified type and level', function(done) {
|
|
1914
|
+
it('should handle specified type and level', function (done) {
|
|
1788
1915
|
var options = {};
|
|
1789
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1916
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1790
1917
|
|
|
1791
|
-
var event = rollbar.captureEvent('log', {foo: 'bar'}, 'debug');
|
|
1918
|
+
var event = rollbar.captureEvent('log', { foo: 'bar' }, 'debug');
|
|
1792
1919
|
expect(event.type).to.eql('log');
|
|
1793
1920
|
expect(event.level).to.eql('debug');
|
|
1794
1921
|
expect(event.body.foo).to.eql('bar');
|
|
1795
1922
|
|
|
1796
1923
|
done();
|
|
1797
1924
|
});
|
|
1798
|
-
it('should handle extra args', function(done) {
|
|
1925
|
+
it('should handle extra args', function (done) {
|
|
1799
1926
|
var options = {};
|
|
1800
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1801
|
-
|
|
1802
|
-
var event = rollbar.captureEvent(
|
|
1927
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1928
|
+
|
|
1929
|
+
var event = rollbar.captureEvent(
|
|
1930
|
+
'meaningless',
|
|
1931
|
+
'info',
|
|
1932
|
+
{ foo: 'bar' },
|
|
1933
|
+
23,
|
|
1934
|
+
'debug',
|
|
1935
|
+
);
|
|
1803
1936
|
expect(event.type).to.eql('manual');
|
|
1804
1937
|
expect(event.level).to.eql('info');
|
|
1805
1938
|
expect(event.body.foo).to.eql('bar');
|
|
1806
1939
|
|
|
1807
1940
|
done();
|
|
1808
1941
|
});
|
|
1809
|
-
it('should handle level that matches a type string', function(done) {
|
|
1942
|
+
it('should handle level that matches a type string', function (done) {
|
|
1810
1943
|
var options = {};
|
|
1811
|
-
var rollbar = window.rollbar = new Rollbar(options);
|
|
1944
|
+
var rollbar = (window.rollbar = new Rollbar(options));
|
|
1812
1945
|
|
|
1813
|
-
var event = rollbar.captureEvent('log', {foo: 'bar'}, 'error');
|
|
1946
|
+
var event = rollbar.captureEvent('log', { foo: 'bar' }, 'error');
|
|
1814
1947
|
// ensure level 'error' doesn't overwrite type 'log'
|
|
1815
1948
|
expect(event.type).to.eql('log');
|
|
1816
1949
|
expect(event.level).to.eql('error');
|
|
@@ -1820,15 +1953,15 @@ describe('captureEvent', function() {
|
|
|
1820
1953
|
});
|
|
1821
1954
|
});
|
|
1822
1955
|
|
|
1823
|
-
describe('createItem', function() {
|
|
1956
|
+
describe('createItem', function () {
|
|
1824
1957
|
afterEach(function () {
|
|
1825
1958
|
window.rollbar.configure({ autoInstrument: false, captureUncaught: false });
|
|
1826
1959
|
});
|
|
1827
1960
|
|
|
1828
|
-
it('should handle multiple strings', function(done) {
|
|
1961
|
+
it('should handle multiple strings', function (done) {
|
|
1829
1962
|
var client = new (TestClientGen())();
|
|
1830
1963
|
var options = {};
|
|
1831
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
1964
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1832
1965
|
|
|
1833
1966
|
var args = ['first', 'second'];
|
|
1834
1967
|
var item = rollbar._createItem(args);
|
|
@@ -1837,10 +1970,10 @@ describe('createItem', function() {
|
|
|
1837
1970
|
|
|
1838
1971
|
done();
|
|
1839
1972
|
});
|
|
1840
|
-
it('should handle errors', function(done) {
|
|
1973
|
+
it('should handle errors', function (done) {
|
|
1841
1974
|
var client = new (TestClientGen())();
|
|
1842
1975
|
var options = {};
|
|
1843
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
1976
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1844
1977
|
|
|
1845
1978
|
var args = [new Error('Whoa'), 'first', 'second'];
|
|
1846
1979
|
var item = rollbar._createItem(args);
|
|
@@ -1850,13 +1983,13 @@ describe('createItem', function() {
|
|
|
1850
1983
|
|
|
1851
1984
|
done();
|
|
1852
1985
|
});
|
|
1853
|
-
it('should handle a callback', function(done) {
|
|
1986
|
+
it('should handle a callback', function (done) {
|
|
1854
1987
|
var client = new (TestClientGen())();
|
|
1855
1988
|
var options = {};
|
|
1856
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
1989
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1857
1990
|
|
|
1858
1991
|
var myCallbackCalled = false;
|
|
1859
|
-
var myCallback = function() {
|
|
1992
|
+
var myCallback = function () {
|
|
1860
1993
|
myCallbackCalled = true;
|
|
1861
1994
|
};
|
|
1862
1995
|
var args = [new Error('Whoa'), 'first', myCallback, 'second'];
|
|
@@ -1870,10 +2003,10 @@ describe('createItem', function() {
|
|
|
1870
2003
|
|
|
1871
2004
|
done();
|
|
1872
2005
|
});
|
|
1873
|
-
it('should handle arrays', function(done) {
|
|
2006
|
+
it('should handle arrays', function (done) {
|
|
1874
2007
|
var client = new (TestClientGen())();
|
|
1875
2008
|
var options = {};
|
|
1876
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2009
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1877
2010
|
|
|
1878
2011
|
var args = [new Error('Whoa'), 'first', [1, 2, 3], 'second'];
|
|
1879
2012
|
var item = rollbar._createItem(args);
|
|
@@ -1884,12 +2017,12 @@ describe('createItem', function() {
|
|
|
1884
2017
|
|
|
1885
2018
|
done();
|
|
1886
2019
|
});
|
|
1887
|
-
it('should handle objects', function(done) {
|
|
2020
|
+
it('should handle objects', function (done) {
|
|
1888
2021
|
var client = new (TestClientGen())();
|
|
1889
2022
|
var options = {};
|
|
1890
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2023
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1891
2024
|
|
|
1892
|
-
var args = [new Error('Whoa'), 'first', {a: 1, b: 2}, 'second'];
|
|
2025
|
+
var args = [new Error('Whoa'), 'first', { a: 1, b: 2 }, 'second'];
|
|
1893
2026
|
var item = rollbar._createItem(args);
|
|
1894
2027
|
expect(item.err).to.eql(args[0]);
|
|
1895
2028
|
expect(item.message).to.eql('first');
|
|
@@ -1899,12 +2032,15 @@ describe('createItem', function() {
|
|
|
1899
2032
|
|
|
1900
2033
|
done();
|
|
1901
2034
|
});
|
|
1902
|
-
it('should handle custom arguments', function(done) {
|
|
2035
|
+
it('should handle custom arguments', function (done) {
|
|
1903
2036
|
var client = new (TestClientGen())();
|
|
1904
2037
|
var options = {};
|
|
1905
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2038
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1906
2039
|
|
|
1907
|
-
var args = [
|
|
2040
|
+
var args = [
|
|
2041
|
+
new Error('Whoa'),
|
|
2042
|
+
{ level: 'info', skipFrames: 1, foo: 'bar' },
|
|
2043
|
+
];
|
|
1908
2044
|
var item = rollbar._createItem(args);
|
|
1909
2045
|
expect(item.err).to.eql(args[0]);
|
|
1910
2046
|
expect(item.level).to.eql('info');
|
|
@@ -1915,24 +2051,24 @@ describe('createItem', function() {
|
|
|
1915
2051
|
|
|
1916
2052
|
done();
|
|
1917
2053
|
});
|
|
1918
|
-
it('should have a timestamp', function(done) {
|
|
2054
|
+
it('should have a timestamp', function (done) {
|
|
1919
2055
|
var client = new (TestClientGen())();
|
|
1920
2056
|
var options = {};
|
|
1921
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2057
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1922
2058
|
|
|
1923
|
-
var args = [new Error('Whoa'), 'first', {a: 1, b: 2}, 'second'];
|
|
2059
|
+
var args = [new Error('Whoa'), 'first', { a: 1, b: 2 }, 'second'];
|
|
1924
2060
|
var item = rollbar._createItem(args);
|
|
1925
|
-
var now =
|
|
2061
|
+
var now = new Date().getTime();
|
|
1926
2062
|
expect(item.timestamp).to.be.within(now - 1000, now + 1000);
|
|
1927
2063
|
|
|
1928
2064
|
done();
|
|
1929
2065
|
});
|
|
1930
|
-
it('should have an uuid', function(done) {
|
|
2066
|
+
it('should have an uuid', function (done) {
|
|
1931
2067
|
var client = new (TestClientGen())();
|
|
1932
2068
|
var options = {};
|
|
1933
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2069
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1934
2070
|
|
|
1935
|
-
var args = [new Error('Whoa'), 'first', {a: 1, b: 2}, 'second'];
|
|
2071
|
+
var args = [new Error('Whoa'), 'first', { a: 1, b: 2 }, 'second'];
|
|
1936
2072
|
var item = rollbar._createItem(args);
|
|
1937
2073
|
expect(item.uuid).to.be.ok();
|
|
1938
2074
|
|
|
@@ -1943,38 +2079,42 @@ describe('createItem', function() {
|
|
|
1943
2079
|
|
|
1944
2080
|
done();
|
|
1945
2081
|
});
|
|
1946
|
-
it('should handle dates', function(done) {
|
|
2082
|
+
it('should handle dates', function (done) {
|
|
1947
2083
|
var client = new (TestClientGen())();
|
|
1948
2084
|
var options = {};
|
|
1949
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2085
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1950
2086
|
|
|
1951
|
-
var y2k = new Date(2000, 0, 1)
|
|
1952
|
-
var args = [new Error('Whoa'), 'first', y2k, {a: 1, b: 2}, 'second'];
|
|
2087
|
+
var y2k = new Date(2000, 0, 1);
|
|
2088
|
+
var args = [new Error('Whoa'), 'first', y2k, { a: 1, b: 2 }, 'second'];
|
|
1953
2089
|
var item = rollbar._createItem(args);
|
|
1954
2090
|
expect(item.custom.extraArgs).to.eql([y2k, 'second']);
|
|
1955
2091
|
|
|
1956
2092
|
done();
|
|
1957
2093
|
});
|
|
1958
|
-
it('should handle numbers', function(done) {
|
|
2094
|
+
it('should handle numbers', function (done) {
|
|
1959
2095
|
var client = new (TestClientGen())();
|
|
1960
2096
|
var options = {};
|
|
1961
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2097
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1962
2098
|
|
|
1963
|
-
var args = [new Error('Whoa'), 'first', 42, {a: 1, b: 2}, 'second'];
|
|
2099
|
+
var args = [new Error('Whoa'), 'first', 42, { a: 1, b: 2 }, 'second'];
|
|
1964
2100
|
var item = rollbar._createItem(args);
|
|
1965
2101
|
expect(item.custom.extraArgs).to.eql([42, 'second']);
|
|
1966
2102
|
|
|
1967
2103
|
done();
|
|
1968
2104
|
});
|
|
1969
|
-
it('should handle domexceptions', function(done) {
|
|
2105
|
+
it('should handle domexceptions', function (done) {
|
|
1970
2106
|
var client = new (TestClientGen())();
|
|
1971
2107
|
var options = {};
|
|
1972
|
-
var rollbar = window.rollbar = new Rollbar(options, client);
|
|
2108
|
+
var rollbar = (window.rollbar = new Rollbar(options, client));
|
|
1973
2109
|
|
|
1974
2110
|
if (document && document.querySelectorAll) {
|
|
1975
2111
|
var e;
|
|
1976
|
-
try {
|
|
1977
|
-
|
|
2112
|
+
try {
|
|
2113
|
+
document.querySelectorAll('div:foo');
|
|
2114
|
+
} catch (ee) {
|
|
2115
|
+
e = ee;
|
|
2116
|
+
}
|
|
2117
|
+
var args = [e, 'first', 42, { a: 1, b: 2 }, 'second'];
|
|
1978
2118
|
var item = rollbar._createItem(args);
|
|
1979
2119
|
expect(item.err).to.be.ok();
|
|
1980
2120
|
}
|
|
@@ -1983,8 +2123,8 @@ describe('createItem', function() {
|
|
|
1983
2123
|
});
|
|
1984
2124
|
});
|
|
1985
2125
|
|
|
1986
|
-
describe('singleton', function() {
|
|
1987
|
-
it('should pass through the underlying client after init', function(done) {
|
|
2126
|
+
describe('singleton', function () {
|
|
2127
|
+
it('should pass through the underlying client after init', function (done) {
|
|
1988
2128
|
var client = new (TestClientGen())();
|
|
1989
2129
|
var options = {};
|
|
1990
2130
|
var rollbar = Rollbar.init(options, client);
|