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