rollbar 2.26.4 → 3.0.0-alpha.2
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/.claude/settings.local.json +3 -0
- package/.cursor/rules/guidelines.mdc +154 -0
- package/.github/workflows/ci.yml +4 -6
- package/CLAUDE.local.md +297 -0
- package/CLAUDE.md +201 -0
- package/CLAUDE.testrunner.md +470 -0
- package/Gruntfile.js +59 -16
- package/Makefile +3 -3
- package/SECURITY.md +5 -0
- package/babel.config.json +9 -0
- package/codex.md +148 -0
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +19332 -6596
- 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 +19332 -6596
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +2 -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 +19319 -6581
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +2 -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 +19333 -6597
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +2 -1
- package/dist/rollbar.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.umd.min.js.map +1 -1
- package/eslint.config.mjs +33 -0
- package/karma.conf.js +5 -14
- package/package.json +19 -20
- package/src/api.js +57 -4
- package/src/apiUtility.js +2 -3
- package/src/browser/core.js +37 -9
- package/src/browser/replay/defaults.js +70 -0
- package/src/browser/replay/recorder.js +194 -0
- package/src/browser/replay/replayMap.js +195 -0
- package/src/browser/rollbar.js +11 -7
- package/src/browser/telemetry.js +3 -3
- package/src/browser/transport/fetch.js +17 -4
- package/src/browser/transport/xhr.js +17 -1
- package/src/browser/transport.js +11 -8
- package/src/defaults.js +1 -1
- package/src/queue.js +65 -4
- package/src/react-native/rollbar.js +1 -1
- package/src/rollbar.js +52 -10
- package/src/server/rollbar.js +3 -2
- package/src/telemetry.js +76 -11
- 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/utility.js +34 -0
- package/test/api.test.js +57 -12
- package/test/apiUtility.test.js +5 -6
- package/test/browser.core.test.js +1 -10
- package/test/browser.domUtility.test.js +1 -1
- package/test/browser.predicates.test.js +1 -1
- package/test/browser.replay.recorder.test.js +430 -0
- package/test/browser.rollbar.test.js +58 -12
- package/test/browser.telemetry.test.js +1 -1
- package/test/browser.transforms.test.js +20 -13
- package/test/browser.transport.test.js +5 -4
- package/test/browser.url.test.js +1 -1
- 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 +1 -1
- package/test/predicates.test.js +1 -1
- package/test/queue.test.js +1 -1
- package/test/rateLimiter.test.js +1 -1
- package/test/react-native.rollbar.test.js +1 -1
- package/test/react-native.transforms.test.js +2 -2
- package/test/react-native.transport.test.js +3 -3
- 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 +132 -1
- 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 +2 -2
- package/test/truncation.test.js +2 -2
- package/test/utility.test.js +44 -6
- package/webpack.config.js +6 -44
- package/.eslintignore +0 -7
- package/test/server.lambda.test.js +0 -194
- package/test/server.locals.test.js +0 -1068
- package/test/server.parser.test.js +0 -78
- package/test/server.predicates.test.js +0 -91
- package/test/server.rollbar.test.js +0 -728
- package/test/server.telemetry.test.js +0 -443
- package/test/server.transforms.test.js +0 -1193
- package/test/server.transport.test.js +0 -269
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var assert = require('assert');
|
|
4
|
-
var vows = require('vows');
|
|
5
|
-
var sinon = require('sinon');
|
|
6
|
-
var nock = require('nock');
|
|
7
|
-
var http = require('http');
|
|
8
|
-
var https = require('https');
|
|
9
|
-
|
|
10
|
-
process.env.NODE_ENV = process.env.NODE_ENV || 'test-node-env';
|
|
11
|
-
var Rollbar = require('../src/server/rollbar');
|
|
12
|
-
var { mergeOptions } = require('../src/server/telemetry/urlHelpers');
|
|
13
|
-
const { URL } = require('url');
|
|
14
|
-
|
|
15
|
-
function wait(ms) {
|
|
16
|
-
return new Promise((resolve) => {
|
|
17
|
-
setTimeout(resolve, ms);
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async function uncaught() {
|
|
22
|
-
setTimeout(function () {
|
|
23
|
-
throw new Error('rollbar error');
|
|
24
|
-
}, 1);
|
|
25
|
-
await wait(300);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async function message(rollbar) {
|
|
29
|
-
setTimeout(function () {
|
|
30
|
-
rollbar.info('rollbar info message');
|
|
31
|
-
}, 1);
|
|
32
|
-
await wait(300);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function request(transport, url, options, body) {
|
|
36
|
-
return new Promise((resolve, reject) => {
|
|
37
|
-
var req = url
|
|
38
|
-
? transport.request(url, options)
|
|
39
|
-
: transport.request(options);
|
|
40
|
-
|
|
41
|
-
req.on('response', (res) => {
|
|
42
|
-
resolve(res);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
req.on('error', (err) => {
|
|
46
|
-
reject(err);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
if (body) {
|
|
50
|
-
req.write(body);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
req.end();
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function requestWithCallback(transport, options, body) {
|
|
58
|
-
return new Promise((resolve, reject) => {
|
|
59
|
-
var req = transport.request(options, function (res) {
|
|
60
|
-
resolve(res);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
req.on('error', (err) => {
|
|
64
|
-
reject(err);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
if (body) {
|
|
68
|
-
req.write(body);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
req.end();
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function stubPostWithResponse(url, status, headers, body) {
|
|
76
|
-
return nock(url).post('/api/users').reply(status, body, headers);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function stubGetWithResponse(url, status, headers, body) {
|
|
80
|
-
return nock(url).get('/api/users').reply(status, body, headers);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function stubGetWithError(url) {
|
|
84
|
-
return nock(url).get('/api/users').replyWithError('dns error');
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
var testHeaders1 = {
|
|
88
|
-
'Content-Type': 'application/json',
|
|
89
|
-
'X-access-token': '123',
|
|
90
|
-
};
|
|
91
|
-
var testHeaders2 = { authorization: 'abc', foo: '456' };
|
|
92
|
-
var testHeaders3 = { 'content-type': 'application/json', foo: '123' };
|
|
93
|
-
var testHeaders4 = { authorization: 'abc', bar: '456' };
|
|
94
|
-
var testBody1 = 'test body 1';
|
|
95
|
-
var testBody2 = 'test body 2';
|
|
96
|
-
var testMessage1 = 'test console message';
|
|
97
|
-
var testMessage2 = 'test console error message';
|
|
98
|
-
var testMessagePart = ', extra part';
|
|
99
|
-
|
|
100
|
-
vows
|
|
101
|
-
.describe('telemetry')
|
|
102
|
-
.addBatch({
|
|
103
|
-
'with log and network capture enabled': {
|
|
104
|
-
topic: function () {
|
|
105
|
-
var rollbar = new Rollbar({
|
|
106
|
-
accessToken: 'abc123',
|
|
107
|
-
captureUncaught: true,
|
|
108
|
-
autoInstrument: true,
|
|
109
|
-
});
|
|
110
|
-
rollbar.testData = {};
|
|
111
|
-
var notifier = rollbar.client.notifier;
|
|
112
|
-
rollbar.testData.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
113
|
-
rollbar.testData.getStub = stubGetWithResponse(
|
|
114
|
-
'http://example.com',
|
|
115
|
-
200,
|
|
116
|
-
testHeaders3,
|
|
117
|
-
testBody1,
|
|
118
|
-
);
|
|
119
|
-
rollbar.testData.postStub = stubPostWithResponse(
|
|
120
|
-
'https://example.com',
|
|
121
|
-
201,
|
|
122
|
-
testHeaders4,
|
|
123
|
-
testBody2,
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
var func = async function (callback) {
|
|
127
|
-
// Invoke telemetry events
|
|
128
|
-
console.info(testMessage1, testMessagePart);
|
|
129
|
-
rollbar.testData.response1 = await request(
|
|
130
|
-
http,
|
|
131
|
-
'http://example.com/api/users',
|
|
132
|
-
{ method: 'GET', headers: testHeaders1 },
|
|
133
|
-
);
|
|
134
|
-
console.error(testMessage2);
|
|
135
|
-
rollbar.testData.response2 = await request(
|
|
136
|
-
https,
|
|
137
|
-
'https://example.com/api/users',
|
|
138
|
-
{ method: 'POST', headers: testHeaders2 },
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
await uncaught(rollbar);
|
|
142
|
-
callback(rollbar);
|
|
143
|
-
};
|
|
144
|
-
func(this.callback);
|
|
145
|
-
},
|
|
146
|
-
'exception payload should have telemetry': function (r) {
|
|
147
|
-
var addItemStub = r.testData.addItemStub;
|
|
148
|
-
var response1 = r.testData.response1;
|
|
149
|
-
var response2 = r.testData.response2;
|
|
150
|
-
|
|
151
|
-
assert.isTrue(addItemStub.called);
|
|
152
|
-
var telemetry = addItemStub.getCall(0).args[3].data.body.telemetry;
|
|
153
|
-
|
|
154
|
-
// Verify that the responses were received intact.
|
|
155
|
-
assert.deepStrictEqual(response1.headers, testHeaders3);
|
|
156
|
-
assert.deepStrictEqual(response2.headers, testHeaders4);
|
|
157
|
-
assert.deepStrictEqual(response1.statusCode, 200);
|
|
158
|
-
assert.deepStrictEqual(response2.statusCode, 201);
|
|
159
|
-
|
|
160
|
-
// Verify telemetry items and order
|
|
161
|
-
assert.deepStrictEqual(telemetry[0].level, 'info');
|
|
162
|
-
assert.deepStrictEqual(telemetry[0].type, 'log');
|
|
163
|
-
assert.deepStrictEqual(
|
|
164
|
-
telemetry[0].body.message,
|
|
165
|
-
'test console message , extra part\n',
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
assert.deepStrictEqual(telemetry[1].level, 'info');
|
|
169
|
-
assert.deepStrictEqual(telemetry[1].type, 'network');
|
|
170
|
-
assert.deepStrictEqual(telemetry[1].body.method, 'GET');
|
|
171
|
-
assert.deepStrictEqual(
|
|
172
|
-
telemetry[1].body.url,
|
|
173
|
-
'http://example.com/api/users',
|
|
174
|
-
);
|
|
175
|
-
assert.deepStrictEqual(telemetry[1].body.status_code, 200);
|
|
176
|
-
assert.deepStrictEqual(telemetry[1].body.subtype, 'http');
|
|
177
|
-
|
|
178
|
-
assert.deepStrictEqual(telemetry[2].level, 'error');
|
|
179
|
-
assert.deepStrictEqual(telemetry[2].type, 'log');
|
|
180
|
-
assert.deepStrictEqual(
|
|
181
|
-
telemetry[2].body.message,
|
|
182
|
-
'test console error message\n',
|
|
183
|
-
);
|
|
184
|
-
|
|
185
|
-
assert.deepStrictEqual(telemetry[3].level, 'info');
|
|
186
|
-
assert.deepStrictEqual(telemetry[3].type, 'network');
|
|
187
|
-
assert.deepStrictEqual(telemetry[3].body.method, 'POST');
|
|
188
|
-
assert.deepStrictEqual(
|
|
189
|
-
telemetry[3].body.url,
|
|
190
|
-
'https://example.com/api/users',
|
|
191
|
-
);
|
|
192
|
-
assert.deepStrictEqual(telemetry[3].body.status_code, 201);
|
|
193
|
-
assert.deepStrictEqual(telemetry[3].body.subtype, 'http');
|
|
194
|
-
|
|
195
|
-
// Verify headers are omitted
|
|
196
|
-
assert.deepEqual(telemetry[1].body.request_headers, undefined);
|
|
197
|
-
assert.deepEqual(telemetry[1].body.response.headers, undefined);
|
|
198
|
-
assert.deepEqual(telemetry[3].body.request_headers, undefined);
|
|
199
|
-
assert.deepEqual(telemetry[3].body.response.headers, undefined);
|
|
200
|
-
|
|
201
|
-
addItemStub.restore();
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
})
|
|
205
|
-
.addBatch({
|
|
206
|
-
'with log and network capture enabled with headers enabled': {
|
|
207
|
-
topic: function () {
|
|
208
|
-
var rollbar = new Rollbar({
|
|
209
|
-
accessToken: 'abc123',
|
|
210
|
-
captureUncaught: true,
|
|
211
|
-
autoInstrument: {
|
|
212
|
-
network: true,
|
|
213
|
-
networkResponseHeaders: true,
|
|
214
|
-
networkRequestHeaders: true,
|
|
215
|
-
},
|
|
216
|
-
});
|
|
217
|
-
rollbar.testData = {};
|
|
218
|
-
var notifier = rollbar.client.notifier;
|
|
219
|
-
rollbar.testData.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
220
|
-
rollbar.testData.getStub = stubGetWithResponse(
|
|
221
|
-
'https://example.com',
|
|
222
|
-
200,
|
|
223
|
-
testHeaders3,
|
|
224
|
-
testBody1,
|
|
225
|
-
);
|
|
226
|
-
rollbar.testData.postStub = stubPostWithResponse(
|
|
227
|
-
'http://example.com',
|
|
228
|
-
201,
|
|
229
|
-
testHeaders4,
|
|
230
|
-
testBody2,
|
|
231
|
-
);
|
|
232
|
-
|
|
233
|
-
var func = async function (callback) {
|
|
234
|
-
// Invoke telemetry events
|
|
235
|
-
console.info(testMessage1, testMessagePart);
|
|
236
|
-
rollbar.testData.response1 = await request(
|
|
237
|
-
https,
|
|
238
|
-
'https://example.com/api/users',
|
|
239
|
-
{ method: 'GET', headers: testHeaders1 },
|
|
240
|
-
);
|
|
241
|
-
console.error(testMessage2);
|
|
242
|
-
rollbar.testData.response2 = await request(
|
|
243
|
-
http,
|
|
244
|
-
'http://example.com/api/users',
|
|
245
|
-
{ method: 'POST', headers: testHeaders2 },
|
|
246
|
-
);
|
|
247
|
-
|
|
248
|
-
await message(rollbar);
|
|
249
|
-
callback(rollbar);
|
|
250
|
-
};
|
|
251
|
-
func(this.callback);
|
|
252
|
-
},
|
|
253
|
-
'message payload should have telemetry': function (r) {
|
|
254
|
-
var addItemStub = r.testData.addItemStub;
|
|
255
|
-
|
|
256
|
-
assert.isTrue(addItemStub.called);
|
|
257
|
-
var telemetry = addItemStub.getCall(0).args[3].data.body.telemetry;
|
|
258
|
-
|
|
259
|
-
// Verify headers captures, with scrubbing
|
|
260
|
-
assert.deepStrictEqual(telemetry[1].body.request_headers, {
|
|
261
|
-
'Content-Type': 'application/json',
|
|
262
|
-
'X-access-token': '********',
|
|
263
|
-
});
|
|
264
|
-
assert.deepStrictEqual(telemetry[1].body.response.headers, {
|
|
265
|
-
'content-type': 'application/json',
|
|
266
|
-
foo: '123',
|
|
267
|
-
});
|
|
268
|
-
assert.deepStrictEqual(telemetry[3].body.request_headers, {
|
|
269
|
-
authorization: '********',
|
|
270
|
-
foo: '456',
|
|
271
|
-
});
|
|
272
|
-
assert.deepStrictEqual(telemetry[3].body.response.headers, {
|
|
273
|
-
authorization: '********',
|
|
274
|
-
bar: '456',
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
addItemStub.restore();
|
|
278
|
-
},
|
|
279
|
-
},
|
|
280
|
-
})
|
|
281
|
-
.addBatch({
|
|
282
|
-
'with telemetry disabled': {
|
|
283
|
-
topic: function () {
|
|
284
|
-
var rollbar = new Rollbar({
|
|
285
|
-
accessToken: 'abc123',
|
|
286
|
-
captureUncaught: true,
|
|
287
|
-
});
|
|
288
|
-
rollbar.testData = {};
|
|
289
|
-
var notifier = rollbar.client.notifier;
|
|
290
|
-
rollbar.testData.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
291
|
-
rollbar.testData.getStub = stubGetWithResponse(
|
|
292
|
-
'https://example.com',
|
|
293
|
-
200,
|
|
294
|
-
testHeaders3,
|
|
295
|
-
testBody1,
|
|
296
|
-
);
|
|
297
|
-
rollbar.testData.postStub = stubPostWithResponse(
|
|
298
|
-
'https://example.com',
|
|
299
|
-
201,
|
|
300
|
-
testHeaders4,
|
|
301
|
-
testBody2,
|
|
302
|
-
);
|
|
303
|
-
|
|
304
|
-
var func = async function (callback) {
|
|
305
|
-
// Invoke telemetry events
|
|
306
|
-
console.info(testMessage1, testMessagePart);
|
|
307
|
-
rollbar.testData.response1 = await request(
|
|
308
|
-
https,
|
|
309
|
-
'https://example.com/api/users',
|
|
310
|
-
{ method: 'GET', headers: testHeaders1 },
|
|
311
|
-
);
|
|
312
|
-
console.error(testMessage2);
|
|
313
|
-
rollbar.testData.response2 = await request(
|
|
314
|
-
https,
|
|
315
|
-
'https://example.com/api/users',
|
|
316
|
-
{ method: 'POST', headers: testHeaders2 },
|
|
317
|
-
);
|
|
318
|
-
|
|
319
|
-
await message(rollbar);
|
|
320
|
-
callback(rollbar);
|
|
321
|
-
};
|
|
322
|
-
func(this.callback);
|
|
323
|
-
},
|
|
324
|
-
'payload should not have telemetry': function (r) {
|
|
325
|
-
var addItemStub = r.testData.addItemStub;
|
|
326
|
-
|
|
327
|
-
assert.isTrue(addItemStub.called);
|
|
328
|
-
var telemetry = addItemStub.getCall(0).args[3].data.body.telemetry;
|
|
329
|
-
|
|
330
|
-
// Verify telemetry is empty
|
|
331
|
-
assert.deepEqual(telemetry, []);
|
|
332
|
-
},
|
|
333
|
-
},
|
|
334
|
-
})
|
|
335
|
-
.addBatch({
|
|
336
|
-
'with callback request and error response': {
|
|
337
|
-
topic: function () {
|
|
338
|
-
var rollbar = new Rollbar({
|
|
339
|
-
accessToken: 'abc123',
|
|
340
|
-
captureUncaught: true,
|
|
341
|
-
autoInstrument: {
|
|
342
|
-
network: true,
|
|
343
|
-
networkResponseHeaders: true,
|
|
344
|
-
networkRequestHeaders: true,
|
|
345
|
-
},
|
|
346
|
-
});
|
|
347
|
-
var notifier = rollbar.client.notifier;
|
|
348
|
-
rollbar.testData = {};
|
|
349
|
-
rollbar.testData.addItemStub = sinon.stub(notifier.queue, 'addItem');
|
|
350
|
-
|
|
351
|
-
var func = async function (callback) {
|
|
352
|
-
var options = {
|
|
353
|
-
method: 'GET',
|
|
354
|
-
protocol: 'https:',
|
|
355
|
-
host: 'example.com',
|
|
356
|
-
path: '/api/users',
|
|
357
|
-
headers: testHeaders1,
|
|
358
|
-
};
|
|
359
|
-
|
|
360
|
-
// Invoke telemetry events
|
|
361
|
-
console.info(testMessage1, testMessagePart);
|
|
362
|
-
rollbar.testData.getStub = stubGetWithResponse(
|
|
363
|
-
'https://example.com',
|
|
364
|
-
200,
|
|
365
|
-
testHeaders3,
|
|
366
|
-
testBody1,
|
|
367
|
-
);
|
|
368
|
-
rollbar.testData.response1 = await requestWithCallback(
|
|
369
|
-
https,
|
|
370
|
-
options,
|
|
371
|
-
).catch((e) => e);
|
|
372
|
-
console.error(testMessage2);
|
|
373
|
-
rollbar.testData.errorStub = stubGetWithError('https://example.com');
|
|
374
|
-
rollbar.testData.response2 = await requestWithCallback(
|
|
375
|
-
https,
|
|
376
|
-
options,
|
|
377
|
-
).catch((e) => e);
|
|
378
|
-
|
|
379
|
-
await message(rollbar);
|
|
380
|
-
callback(rollbar);
|
|
381
|
-
};
|
|
382
|
-
func(this.callback);
|
|
383
|
-
},
|
|
384
|
-
'message payload should have telemetry or error info': function (r) {
|
|
385
|
-
var addItemStub = r.testData.addItemStub;
|
|
386
|
-
var response1 = r.testData.response1;
|
|
387
|
-
var response2 = r.testData.response2;
|
|
388
|
-
|
|
389
|
-
assert.isTrue(addItemStub.called);
|
|
390
|
-
var telemetry = addItemStub.getCall(0).args[3].data.body.telemetry;
|
|
391
|
-
|
|
392
|
-
// Verify that the responses were received intact.
|
|
393
|
-
assert.deepStrictEqual(response1.headers, testHeaders3);
|
|
394
|
-
assert.deepStrictEqual(response1.statusCode, 200);
|
|
395
|
-
assert(response2 instanceof Error);
|
|
396
|
-
|
|
397
|
-
// Verify telemetry
|
|
398
|
-
assert.deepStrictEqual(telemetry[1].body.request_headers, {
|
|
399
|
-
'Content-Type': 'application/json',
|
|
400
|
-
'X-access-token': '********',
|
|
401
|
-
});
|
|
402
|
-
assert.deepStrictEqual(telemetry[1].body.response.headers, {
|
|
403
|
-
'content-type': 'application/json',
|
|
404
|
-
foo: '123',
|
|
405
|
-
});
|
|
406
|
-
assert.deepStrictEqual(telemetry[3].body.request_headers, {
|
|
407
|
-
'Content-Type': 'application/json',
|
|
408
|
-
'X-access-token': '********',
|
|
409
|
-
});
|
|
410
|
-
assert.deepStrictEqual(telemetry[3].body.response, undefined);
|
|
411
|
-
assert.deepStrictEqual(telemetry[3].body.status_code, 0);
|
|
412
|
-
assert.deepStrictEqual(telemetry[3].body.error, 'Error: dns error');
|
|
413
|
-
|
|
414
|
-
addItemStub.restore();
|
|
415
|
-
},
|
|
416
|
-
},
|
|
417
|
-
})
|
|
418
|
-
.addBatch({
|
|
419
|
-
'while using autoinstrument': {
|
|
420
|
-
topic: function () {
|
|
421
|
-
const optionsUsingStringUrl = mergeOptions(
|
|
422
|
-
'http://example.com/api/users',
|
|
423
|
-
{ method: 'GET', headers: testHeaders1 },
|
|
424
|
-
);
|
|
425
|
-
const optionsUsingClassUrl = mergeOptions(
|
|
426
|
-
new URL('http://example.com/api/users'),
|
|
427
|
-
{ method: 'GET', headers: testHeaders1 },
|
|
428
|
-
);
|
|
429
|
-
|
|
430
|
-
return {
|
|
431
|
-
optionsUsingStringUrl,
|
|
432
|
-
optionsUsingClassUrl,
|
|
433
|
-
};
|
|
434
|
-
},
|
|
435
|
-
'mergeOptions should correctly handle URL and options': function ({
|
|
436
|
-
optionsUsingStringUrl,
|
|
437
|
-
optionsUsingClassUrl,
|
|
438
|
-
}) {
|
|
439
|
-
assert.deepStrictEqual(optionsUsingStringUrl, optionsUsingClassUrl);
|
|
440
|
-
},
|
|
441
|
-
},
|
|
442
|
-
})
|
|
443
|
-
.export(module, { error: false });
|