rollbar 2.26.2 → 2.26.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +32 -10
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/Gruntfile.js +51 -71
- package/README.md +2 -4
- package/bower.json +1 -3
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +5699 -5052
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +1 -1
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +5704 -5062
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +1 -1
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +5693 -5052
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +1 -1
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +5704 -5063
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +1 -1
- 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/index.d.ts +270 -231
- package/karma.conf.js +16 -34
- package/package.json +21 -17
- package/prettier.config.js +7 -0
- package/src/api.js +21 -10
- package/src/apiUtility.js +12 -8
- package/src/browser/core.js +103 -65
- 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/rollbar.js +1 -1
- 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 -354
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +16 -14
- package/src/browser/transport/xhr.js +29 -13
- package/src/browser/transport.js +82 -25
- 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 +71 -39
- 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 +22 -13
- 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 +133 -55
- 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 +92 -28
- 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 +89 -52
- package/test/api.test.js +31 -29
- package/test/apiUtility.test.js +43 -44
- package/test/browser.core.test.js +141 -131
- package/test/browser.domUtility.test.js +52 -35
- package/test/browser.predicates.test.js +13 -13
- package/test/browser.rollbar.test.js +597 -503
- package/test/browser.telemetry.test.js +76 -0
- package/test/browser.transforms.test.js +146 -128
- package/test/browser.transport.test.js +54 -46
- package/test/browser.url.test.js +12 -11
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/notifier.test.js +90 -78
- package/test/predicates.test.js +260 -214
- package/test/queue.test.js +230 -214
- package/test/rateLimiter.test.js +50 -42
- package/test/react-native.rollbar.test.js +149 -115
- package/test/react-native.transforms.test.js +21 -23
- package/test/react-native.transport.test.js +23 -11
- package/test/server.lambda.test.js +70 -53
- package/test/server.locals.test.js +437 -210
- package/test/server.parser.test.js +32 -26
- package/test/server.predicates.test.js +45 -43
- package/test/server.rollbar.test.js +311 -259
- package/test/server.telemetry.test.js +208 -83
- package/test/server.transforms.test.js +455 -361
- package/test/server.transport.test.js +144 -76
- package/test/telemetry.test.js +46 -37
- package/test/transforms.test.js +68 -66
- package/test/truncation.test.js +55 -53
- package/test/utility.test.js +266 -222
- package/webpack.config.js +46 -43
- package/.gitmodules +0 -3
- package/browserstack.browsers.js +0 -153
- package/browserstack.browsers.json +0 -4384
|
@@ -7,16 +7,16 @@ var Rollbar = require('../src/react-native/rollbar');
|
|
|
7
7
|
var t = require('../src/react-native/transforms');
|
|
8
8
|
|
|
9
9
|
function TestClientGen() {
|
|
10
|
-
var TestClient = function() {
|
|
10
|
+
var TestClient = function () {
|
|
11
11
|
this.notifier = {
|
|
12
|
-
addTransform: function() {
|
|
12
|
+
addTransform: function () {
|
|
13
13
|
return this.notifier;
|
|
14
|
-
}.bind(this)
|
|
14
|
+
}.bind(this),
|
|
15
15
|
};
|
|
16
16
|
this.queue = {
|
|
17
|
-
addPredicate: function() {
|
|
17
|
+
addPredicate: function () {
|
|
18
18
|
return this.queue;
|
|
19
|
-
}.bind(this)
|
|
19
|
+
}.bind(this),
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
22
|
return TestClient;
|
|
@@ -24,47 +24,45 @@ function TestClientGen() {
|
|
|
24
24
|
|
|
25
25
|
function itemFromArgs(args) {
|
|
26
26
|
var client = new (TestClientGen())();
|
|
27
|
-
var rollbar = new Rollbar({autoInstrument: false}, client);
|
|
27
|
+
var rollbar = new Rollbar({ autoInstrument: false }, client);
|
|
28
28
|
var item = rollbar._createItem(args);
|
|
29
29
|
item.level = 'debug';
|
|
30
30
|
return item;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
describe('handleItemWithError', function() {
|
|
34
|
-
it('should create stackInfo', function(done) {
|
|
33
|
+
describe('handleItemWithError', function () {
|
|
34
|
+
it('should create stackInfo', function (done) {
|
|
35
35
|
var err = new Error('test');
|
|
36
36
|
var args = ['a message', err];
|
|
37
37
|
var item = itemFromArgs(args);
|
|
38
|
-
var options =
|
|
39
|
-
t.handleItemWithError(item, options, function(e, i) {
|
|
40
|
-
expect(item.stackInfo.exception).to.eql({
|
|
38
|
+
var options = new Rollbar({}).options;
|
|
39
|
+
t.handleItemWithError(item, options, function (e, i) {
|
|
40
|
+
expect(item.stackInfo.exception).to.eql({
|
|
41
|
+
class: 'Error',
|
|
42
|
+
message: 'test',
|
|
43
|
+
});
|
|
41
44
|
done(e);
|
|
42
45
|
});
|
|
43
46
|
});
|
|
44
47
|
});
|
|
45
|
-
describe('_matchFilename', function() {
|
|
48
|
+
describe('_matchFilename', function () {
|
|
46
49
|
var filenames = {
|
|
47
50
|
before: [
|
|
48
51
|
'/var/mobile/Containers/Data/Application/1122ABCD-FF02-4942-A0D7-632E691D342F/.app/main.jsbundle',
|
|
49
52
|
'/var/mobile/Containers/Data/Application/1122ABCD-FF02-4942-A0D7-632E691D342F/Library/Application Support/CodePush/2071980d74d1fef682fdab1d1cab345f33f498e3b51f68585c1b0b5469334df7/codepush_ios/main.jsbundle',
|
|
50
53
|
'/data/user/0/com.example/files/CodePush/2071980d74d1fef682fdab1d1cab345f33f498e3b51f68585c1b0b5469334df7/codepush_android/index.android.bundle',
|
|
51
|
-
'index.android.bundle'
|
|
52
|
-
],
|
|
53
|
-
after: [
|
|
54
|
-
'main.jsbundle',
|
|
55
|
-
'main.jsbundle',
|
|
56
54
|
'index.android.bundle',
|
|
57
|
-
|
|
58
|
-
]
|
|
59
|
-
}
|
|
55
|
+
],
|
|
56
|
+
after: ['main.jsbundle', 'main.jsbundle', 'index.android.bundle', null],
|
|
57
|
+
};
|
|
60
58
|
|
|
61
|
-
it('should rewrite filenames', function(done) {
|
|
62
|
-
var options =
|
|
59
|
+
it('should rewrite filenames', function (done) {
|
|
60
|
+
var options = new Rollbar({}).options;
|
|
63
61
|
console.log(options);
|
|
64
62
|
|
|
65
63
|
var length = filenames.before.length;
|
|
66
64
|
|
|
67
|
-
for(var i = 0; i < length; i++){
|
|
65
|
+
for (var i = 0; i < length; i++) {
|
|
68
66
|
var filename = t._matchFilename(filenames.before[i], options);
|
|
69
67
|
expect(filename).to.eql(filenames.after[i]);
|
|
70
68
|
}
|
|
@@ -9,16 +9,16 @@ var t = new Transport(truncation);
|
|
|
9
9
|
var utility = require('../src/utility');
|
|
10
10
|
utility.setupJSON();
|
|
11
11
|
|
|
12
|
-
describe('post', function() {
|
|
12
|
+
describe('post', function () {
|
|
13
13
|
var accessToken = 'abc123';
|
|
14
14
|
var options = {
|
|
15
15
|
hostname: 'api.rollbar.com',
|
|
16
16
|
protocol: 'https',
|
|
17
|
-
path: '/api/1/item/'
|
|
17
|
+
path: '/api/1/item/',
|
|
18
18
|
};
|
|
19
19
|
var payload = {
|
|
20
20
|
access_token: accessToken,
|
|
21
|
-
data: {a: 1}
|
|
21
|
+
data: { a: 1 },
|
|
22
22
|
};
|
|
23
23
|
var uuid = 'd4c7acef55bf4c9ea95e4fe9428a8287';
|
|
24
24
|
|
|
@@ -33,16 +33,28 @@ describe('post', function() {
|
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
function stubResponse(code, err, message) {
|
|
36
|
-
window.fetch.returns(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
window.fetch.returns(
|
|
37
|
+
Promise.resolve(
|
|
38
|
+
new Response(
|
|
39
|
+
JSON.stringify({
|
|
40
|
+
err: err,
|
|
41
|
+
message: message,
|
|
42
|
+
result: { uuid: uuid },
|
|
43
|
+
}),
|
|
44
|
+
{
|
|
45
|
+
status: code,
|
|
46
|
+
statusText: message,
|
|
47
|
+
headers: { 'Content-Type': 'application/json' },
|
|
48
|
+
},
|
|
49
|
+
),
|
|
50
|
+
),
|
|
51
|
+
);
|
|
40
52
|
}
|
|
41
53
|
|
|
42
|
-
it('should callback with the right value on success', function(done) {
|
|
54
|
+
it('should callback with the right value on success', function (done) {
|
|
43
55
|
stubResponse(200, 0, 'OK');
|
|
44
56
|
|
|
45
|
-
var callback = function(err, data) {
|
|
57
|
+
var callback = function (err, data) {
|
|
46
58
|
expect(err).to.eql(null);
|
|
47
59
|
expect(data).to.be.ok();
|
|
48
60
|
expect(data.uuid).to.eql(uuid);
|
|
@@ -51,10 +63,10 @@ describe('post', function() {
|
|
|
51
63
|
t.post(accessToken, options, payload, callback);
|
|
52
64
|
});
|
|
53
65
|
|
|
54
|
-
it('should callback with the server error if 403', function(done) {
|
|
66
|
+
it('should callback with the server error if 403', function (done) {
|
|
55
67
|
stubResponse(403, '403', 'bad request');
|
|
56
68
|
|
|
57
|
-
var callback = function(err, resp) {
|
|
69
|
+
var callback = function (err, resp) {
|
|
58
70
|
expect(resp).to.not.be.ok();
|
|
59
71
|
expect(err.message).to.eql('Api error: bad request');
|
|
60
72
|
done();
|
|
@@ -14,50 +14,59 @@ function promisePending(promise, callback) {
|
|
|
14
14
|
// behavior of Promise.race(), which always returns the first
|
|
15
15
|
// already resolved promise in the array.
|
|
16
16
|
Promise.race([promise, Promise.resolve(testValue)])
|
|
17
|
-
.then(function(value){
|
|
17
|
+
.then(function (value) {
|
|
18
18
|
if (value === testValue) {
|
|
19
19
|
return callback(true);
|
|
20
20
|
} else {
|
|
21
21
|
return callback(false);
|
|
22
22
|
}
|
|
23
23
|
})
|
|
24
|
-
.catch(function(_error){
|
|
24
|
+
.catch(function (_error) {
|
|
25
25
|
return callback(false);
|
|
26
|
-
})
|
|
26
|
+
});
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
function fakePostItem(_item, callback){
|
|
29
|
+
function fakePostItem(_item, callback) {
|
|
30
30
|
// 1000ms simulates low API response, and allows testing the state before completion.
|
|
31
|
-
setTimeout(function
|
|
31
|
+
setTimeout(function () {
|
|
32
|
+
callback();
|
|
33
|
+
}, 1000);
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
var stubContext = {
|
|
35
|
-
getRemainingTimeInMillis: function() {
|
|
36
|
-
|
|
37
|
+
getRemainingTimeInMillis: function () {
|
|
38
|
+
return 2000;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
37
41
|
|
|
38
|
-
vows
|
|
42
|
+
vows
|
|
43
|
+
.describe('lambda')
|
|
39
44
|
.addBatch({
|
|
40
45
|
'async handler sends message': {
|
|
41
|
-
topic: function() {
|
|
46
|
+
topic: function () {
|
|
42
47
|
var rollbar = new Rollbar({
|
|
43
48
|
accessToken: 'abc123',
|
|
44
49
|
captureUncaught: true,
|
|
45
|
-
captureLambdaTimeouts: false
|
|
50
|
+
captureLambdaTimeouts: false,
|
|
46
51
|
});
|
|
47
52
|
var api = rollbar.client.notifier.queue.api;
|
|
48
|
-
rollbar.requestStub = sinon
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
rollbar.requestStub = sinon
|
|
54
|
+
.stub(api, 'postItem')
|
|
55
|
+
.callsFake(fakePostItem);
|
|
56
|
+
|
|
57
|
+
rollbar.testHandlerInstance = rollbar.lambdaHandler(
|
|
58
|
+
async (_event, _context) => {
|
|
59
|
+
// Testing the condition where the client handler sends a message before exit.
|
|
60
|
+
// The Rollbar wrapper should send, and should not resolve until the API request
|
|
61
|
+
// has completed.
|
|
62
|
+
rollbar.info('lambda test message');
|
|
63
|
+
return 'done';
|
|
64
|
+
},
|
|
65
|
+
);
|
|
57
66
|
|
|
58
67
|
return rollbar;
|
|
59
68
|
},
|
|
60
|
-
'invokes handler and receives promise': function(r) {
|
|
69
|
+
'invokes handler and receives promise': function (r) {
|
|
61
70
|
var handler = r.testHandlerInstance;
|
|
62
71
|
|
|
63
72
|
// rollbar.lambdaHandler in the above topic should have returned a
|
|
@@ -70,31 +79,31 @@ vows.describe('lambda')
|
|
|
70
79
|
r.testPromise = handler({}, stubContext);
|
|
71
80
|
},
|
|
72
81
|
'after handler invoked': {
|
|
73
|
-
topic: function(r) {
|
|
82
|
+
topic: function (r) {
|
|
74
83
|
var callback = this.callback;
|
|
75
84
|
|
|
76
85
|
// This timeout allows a few extra ticks so that without the wait in
|
|
77
86
|
// the wrapper this test should fail.
|
|
78
87
|
setTimeout(function () {
|
|
79
|
-
promisePending(r.testPromise, function(pending){
|
|
88
|
+
promisePending(r.testPromise, function (pending) {
|
|
80
89
|
r.promiseIsPending = pending;
|
|
81
90
|
callback(r);
|
|
82
91
|
});
|
|
83
92
|
}, 10);
|
|
84
93
|
},
|
|
85
|
-
'promise is pending': function(r) {
|
|
94
|
+
'promise is pending': function (r) {
|
|
86
95
|
assert.isTrue(r.promiseIsPending);
|
|
87
96
|
},
|
|
88
97
|
'after promise resolved': {
|
|
89
|
-
topic: function(r) {
|
|
98
|
+
topic: function (r) {
|
|
90
99
|
var callback = this.callback;
|
|
91
100
|
|
|
92
|
-
r.testPromise.then(function(value){
|
|
101
|
+
r.testPromise.then(function (value) {
|
|
93
102
|
assert.equal(value, 'done');
|
|
94
103
|
callback(r);
|
|
95
104
|
});
|
|
96
105
|
},
|
|
97
|
-
'sends message before exit': function(r) {
|
|
106
|
+
'sends message before exit': function (r) {
|
|
98
107
|
var requestStub = r.requestStub;
|
|
99
108
|
|
|
100
109
|
// If the handler is allowed to exit prematurely, this will fail.
|
|
@@ -103,32 +112,36 @@ vows.describe('lambda')
|
|
|
103
112
|
assert.equal(data.body.message.body, 'lambda test message');
|
|
104
113
|
|
|
105
114
|
requestStub.reset();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
110
119
|
})
|
|
111
120
|
.addBatch({
|
|
112
121
|
'async handler catches exception': {
|
|
113
|
-
topic: function() {
|
|
122
|
+
topic: function () {
|
|
114
123
|
var rollbar = new Rollbar({
|
|
115
124
|
accessToken: 'abc123',
|
|
116
125
|
captureUncaught: true,
|
|
117
|
-
captureLambdaTimeouts: false
|
|
126
|
+
captureLambdaTimeouts: false,
|
|
118
127
|
});
|
|
119
128
|
var api = rollbar.client.notifier.queue.api;
|
|
120
|
-
rollbar.requestStub = sinon
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
rollbar.requestStub = sinon
|
|
130
|
+
.stub(api, 'postItem')
|
|
131
|
+
.callsFake(fakePostItem);
|
|
132
|
+
|
|
133
|
+
rollbar.testHandlerInstance = rollbar.lambdaHandler(
|
|
134
|
+
async (_event, _context) => {
|
|
135
|
+
// Testing the condition where the client handler throws.
|
|
136
|
+
// The Rollbar wrapper should catch and report, and should not reject
|
|
137
|
+
// until the API request has completed.
|
|
138
|
+
throw new Error('lambda test error');
|
|
139
|
+
},
|
|
140
|
+
);
|
|
128
141
|
|
|
129
142
|
return rollbar;
|
|
130
143
|
},
|
|
131
|
-
'invokes handler and receives promise': function(r) {
|
|
144
|
+
'invokes handler and receives promise': function (r) {
|
|
132
145
|
var handler = r.testHandlerInstance;
|
|
133
146
|
|
|
134
147
|
// rollbar.lambdaHandler in the above topic should have returned a
|
|
@@ -141,37 +154,41 @@ vows.describe('lambda')
|
|
|
141
154
|
r.testPromise = handler({}, stubContext);
|
|
142
155
|
},
|
|
143
156
|
'after handler invoked': {
|
|
144
|
-
topic: function(r) {
|
|
157
|
+
topic: function (r) {
|
|
145
158
|
var callback = this.callback;
|
|
146
159
|
|
|
147
|
-
promisePending(r.testPromise, function(pending){
|
|
160
|
+
promisePending(r.testPromise, function (pending) {
|
|
148
161
|
r.promiseIsPending = pending;
|
|
149
162
|
callback(r);
|
|
150
163
|
});
|
|
151
164
|
},
|
|
152
|
-
'promise is pending': function(r) {
|
|
165
|
+
'promise is pending': function (r) {
|
|
153
166
|
assert.isTrue(r.promiseIsPending);
|
|
154
167
|
},
|
|
155
168
|
'after promise rejected': {
|
|
156
|
-
topic: function(r) {
|
|
169
|
+
topic: function (r) {
|
|
157
170
|
var callback = this.callback;
|
|
158
171
|
|
|
159
|
-
r.testPromise.catch(function(error){
|
|
172
|
+
r.testPromise.catch(function (error) {
|
|
160
173
|
assert.equal(error.message, 'lambda test error');
|
|
161
174
|
callback(r);
|
|
162
175
|
});
|
|
163
176
|
},
|
|
164
|
-
'sends message before exit': function(r) {
|
|
177
|
+
'sends message before exit': function (r) {
|
|
165
178
|
var requestStub = r.requestStub;
|
|
166
179
|
|
|
167
180
|
// If the handler is allowed to exit prematurely, this will fail.
|
|
168
181
|
assert.isTrue(requestStub.called);
|
|
169
182
|
var data = requestStub.getCall(0).args[0];
|
|
170
|
-
assert.equal(
|
|
183
|
+
assert.equal(
|
|
184
|
+
data.body.trace_chain[0].exception.message,
|
|
185
|
+
'lambda test error',
|
|
186
|
+
);
|
|
171
187
|
|
|
172
188
|
requestStub.reset();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
})
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
})
|
|
194
|
+
.export(module, { error: false });
|