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