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.
Files changed (117) hide show
  1. package/.github/workflows/ci.yml +32 -10
  2. package/.lgtm.yml +7 -7
  3. package/.prettierignore +18 -0
  4. package/.vscode/settings.json +39 -0
  5. package/CHANGELOG.md +121 -35
  6. package/Gruntfile.js +51 -71
  7. package/README.md +2 -4
  8. package/bower.json +1 -3
  9. package/defaults.js +17 -5
  10. package/dist/plugins/jquery.min.js +1 -1
  11. package/dist/rollbar.js +5699 -5052
  12. package/dist/rollbar.js.map +1 -1
  13. package/dist/rollbar.min.js +1 -1
  14. package/dist/rollbar.min.js.map +1 -1
  15. package/dist/rollbar.named-amd.js +5704 -5062
  16. package/dist/rollbar.named-amd.js.map +1 -1
  17. package/dist/rollbar.named-amd.min.js +1 -1
  18. package/dist/rollbar.named-amd.min.js.map +1 -1
  19. package/dist/rollbar.noconflict.umd.js +5693 -5052
  20. package/dist/rollbar.noconflict.umd.js.map +1 -1
  21. package/dist/rollbar.noconflict.umd.min.js +1 -1
  22. package/dist/rollbar.noconflict.umd.min.js.map +1 -1
  23. package/dist/rollbar.snippet.js +1 -1
  24. package/dist/rollbar.umd.js +5704 -5063
  25. package/dist/rollbar.umd.js.map +1 -1
  26. package/dist/rollbar.umd.min.js +1 -1
  27. package/dist/rollbar.umd.min.js.map +1 -1
  28. package/docs/extension-exceptions.md +35 -30
  29. package/docs/migration_v0_to_v1.md +41 -38
  30. package/index.d.ts +270 -231
  31. package/karma.conf.js +16 -34
  32. package/package.json +21 -17
  33. package/prettier.config.js +7 -0
  34. package/src/api.js +21 -10
  35. package/src/apiUtility.js +12 -8
  36. package/src/browser/core.js +103 -65
  37. package/src/browser/defaults/scrubFields.js +3 -3
  38. package/src/browser/detection.js +7 -8
  39. package/src/browser/domUtility.js +18 -8
  40. package/src/browser/globalSetup.js +12 -6
  41. package/src/browser/logger.js +1 -1
  42. package/src/browser/plugins/jquery.js +35 -35
  43. package/src/browser/predicates.js +1 -1
  44. package/src/browser/rollbar.js +1 -1
  45. package/src/browser/rollbarWrapper.js +8 -5
  46. package/src/browser/shim.js +43 -19
  47. package/src/browser/snippet_callback.js +6 -4
  48. package/src/browser/telemetry.js +573 -354
  49. package/src/browser/transforms.js +46 -27
  50. package/src/browser/transport/fetch.js +16 -14
  51. package/src/browser/transport/xhr.js +29 -13
  52. package/src/browser/transport.js +82 -25
  53. package/src/browser/url.js +16 -8
  54. package/src/browser/wrapGlobals.js +27 -8
  55. package/src/defaults.js +3 -3
  56. package/src/errorParser.js +14 -11
  57. package/src/merge.js +32 -23
  58. package/src/notifier.js +16 -13
  59. package/src/predicates.js +43 -23
  60. package/src/queue.js +71 -39
  61. package/src/rateLimiter.js +59 -18
  62. package/src/react-native/logger.js +1 -1
  63. package/src/react-native/rollbar.js +59 -55
  64. package/src/react-native/transforms.js +13 -9
  65. package/src/react-native/transport.js +44 -34
  66. package/src/rollbar.js +22 -13
  67. package/src/scrub.js +0 -1
  68. package/src/server/locals.js +69 -39
  69. package/src/server/logger.js +4 -4
  70. package/src/server/parser.js +72 -47
  71. package/src/server/rollbar.js +133 -55
  72. package/src/server/sourceMap/stackTrace.js +33 -18
  73. package/src/server/telemetry/urlHelpers.js +9 -11
  74. package/src/server/telemetry.js +68 -45
  75. package/src/server/transforms.js +37 -21
  76. package/src/server/transport.js +62 -32
  77. package/src/telemetry.js +92 -28
  78. package/src/transforms.js +33 -21
  79. package/src/truncation.js +8 -5
  80. package/src/utility/headers.js +43 -43
  81. package/src/utility/replace.js +9 -0
  82. package/src/utility/traverse.js +1 -1
  83. package/src/utility.js +89 -52
  84. package/test/api.test.js +31 -29
  85. package/test/apiUtility.test.js +43 -44
  86. package/test/browser.core.test.js +141 -131
  87. package/test/browser.domUtility.test.js +52 -35
  88. package/test/browser.predicates.test.js +13 -13
  89. package/test/browser.rollbar.test.js +597 -503
  90. package/test/browser.telemetry.test.js +76 -0
  91. package/test/browser.transforms.test.js +146 -128
  92. package/test/browser.transport.test.js +54 -46
  93. package/test/browser.url.test.js +12 -11
  94. package/test/fixtures/locals.fixtures.js +245 -126
  95. package/test/notifier.test.js +90 -78
  96. package/test/predicates.test.js +260 -214
  97. package/test/queue.test.js +230 -214
  98. package/test/rateLimiter.test.js +50 -42
  99. package/test/react-native.rollbar.test.js +149 -115
  100. package/test/react-native.transforms.test.js +21 -23
  101. package/test/react-native.transport.test.js +23 -11
  102. package/test/server.lambda.test.js +70 -53
  103. package/test/server.locals.test.js +437 -210
  104. package/test/server.parser.test.js +32 -26
  105. package/test/server.predicates.test.js +45 -43
  106. package/test/server.rollbar.test.js +311 -259
  107. package/test/server.telemetry.test.js +208 -83
  108. package/test/server.transforms.test.js +455 -361
  109. package/test/server.transport.test.js +144 -76
  110. package/test/telemetry.test.js +46 -37
  111. package/test/transforms.test.js +68 -66
  112. package/test/truncation.test.js +55 -53
  113. package/test/utility.test.js +266 -222
  114. package/webpack.config.js +46 -43
  115. package/.gitmodules +0 -3
  116. package/browserstack.browsers.js +0 -153
  117. 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 = (new Rollbar({})).options;
39
- t.handleItemWithError(item, options, function(e, i) {
40
- expect(item.stackInfo.exception).to.eql({class: 'Error', message: 'test'});
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
- null
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 = (new Rollbar({})).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(Promise.resolve(new Response(
37
- JSON.stringify({ err: err, message: message, result: { uuid: uuid }}),
38
- { status: code, statusText: message, headers: { 'Content-Type': 'application/json' }}
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(){ callback(); }, 1000);
31
+ setTimeout(function () {
32
+ callback();
33
+ }, 1000);
32
34
  }
33
35
 
34
36
  var stubContext = {
35
- getRemainingTimeInMillis: function() { return 2000 }
36
- }
37
+ getRemainingTimeInMillis: function () {
38
+ return 2000;
39
+ },
40
+ };
37
41
 
38
- vows.describe('lambda')
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.stub(api, 'postItem').callsFake(fakePostItem);
49
-
50
- rollbar.testHandlerInstance = rollbar.lambdaHandler(async (_event, _context) => {
51
- // Testing the condition where the client handler sends a message before exit.
52
- // The Rollbar wrapper should send, and should not resolve until the API request
53
- // has completed.
54
- rollbar.info('lambda test message');
55
- return 'done';
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.stub(api, 'postItem').callsFake(fakePostItem);
121
-
122
- rollbar.testHandlerInstance = rollbar.lambdaHandler(async (_event, _context) => {
123
- // Testing the condition where the client handler throws.
124
- // The Rollbar wrapper should catch and report, and should not reject
125
- // until the API request has completed.
126
- throw new Error('lambda test error');
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(data.body.trace_chain[0].exception.message, 'lambda test error');
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
- }).export(module, {error: false});
189
+ },
190
+ },
191
+ },
192
+ },
193
+ })
194
+ .export(module, { error: false });