rollbar 2.26.2 → 2.26.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/.github/workflows/ci.yml +32 -10
  2. package/.lgtm.yml +7 -7
  3. package/.prettierignore +18 -0
  4. package/.vscode/settings.json +39 -0
  5. package/CHANGELOG.md +121 -35
  6. package/Gruntfile.js +51 -71
  7. package/README.md +2 -4
  8. package/bower.json +1 -3
  9. package/defaults.js +17 -5
  10. package/dist/plugins/jquery.min.js +1 -1
  11. package/dist/rollbar.js +5699 -5052
  12. package/dist/rollbar.js.map +1 -1
  13. package/dist/rollbar.min.js +1 -1
  14. package/dist/rollbar.min.js.map +1 -1
  15. package/dist/rollbar.named-amd.js +5704 -5062
  16. package/dist/rollbar.named-amd.js.map +1 -1
  17. package/dist/rollbar.named-amd.min.js +1 -1
  18. package/dist/rollbar.named-amd.min.js.map +1 -1
  19. package/dist/rollbar.noconflict.umd.js +5693 -5052
  20. package/dist/rollbar.noconflict.umd.js.map +1 -1
  21. package/dist/rollbar.noconflict.umd.min.js +1 -1
  22. package/dist/rollbar.noconflict.umd.min.js.map +1 -1
  23. package/dist/rollbar.snippet.js +1 -1
  24. package/dist/rollbar.umd.js +5704 -5063
  25. package/dist/rollbar.umd.js.map +1 -1
  26. package/dist/rollbar.umd.min.js +1 -1
  27. package/dist/rollbar.umd.min.js.map +1 -1
  28. package/docs/extension-exceptions.md +35 -30
  29. package/docs/migration_v0_to_v1.md +41 -38
  30. package/index.d.ts +270 -231
  31. package/karma.conf.js +16 -34
  32. package/package.json +21 -17
  33. package/prettier.config.js +7 -0
  34. package/src/api.js +21 -10
  35. package/src/apiUtility.js +12 -8
  36. package/src/browser/core.js +103 -65
  37. package/src/browser/defaults/scrubFields.js +3 -3
  38. package/src/browser/detection.js +7 -8
  39. package/src/browser/domUtility.js +18 -8
  40. package/src/browser/globalSetup.js +12 -6
  41. package/src/browser/logger.js +1 -1
  42. package/src/browser/plugins/jquery.js +35 -35
  43. package/src/browser/predicates.js +1 -1
  44. package/src/browser/rollbar.js +1 -1
  45. package/src/browser/rollbarWrapper.js +8 -5
  46. package/src/browser/shim.js +43 -19
  47. package/src/browser/snippet_callback.js +6 -4
  48. package/src/browser/telemetry.js +573 -354
  49. package/src/browser/transforms.js +46 -27
  50. package/src/browser/transport/fetch.js +16 -14
  51. package/src/browser/transport/xhr.js +29 -13
  52. package/src/browser/transport.js +82 -25
  53. package/src/browser/url.js +16 -8
  54. package/src/browser/wrapGlobals.js +27 -8
  55. package/src/defaults.js +3 -3
  56. package/src/errorParser.js +14 -11
  57. package/src/merge.js +32 -23
  58. package/src/notifier.js +16 -13
  59. package/src/predicates.js +43 -23
  60. package/src/queue.js +71 -39
  61. package/src/rateLimiter.js +59 -18
  62. package/src/react-native/logger.js +1 -1
  63. package/src/react-native/rollbar.js +59 -55
  64. package/src/react-native/transforms.js +13 -9
  65. package/src/react-native/transport.js +44 -34
  66. package/src/rollbar.js +22 -13
  67. package/src/scrub.js +0 -1
  68. package/src/server/locals.js +69 -39
  69. package/src/server/logger.js +4 -4
  70. package/src/server/parser.js +72 -47
  71. package/src/server/rollbar.js +133 -55
  72. package/src/server/sourceMap/stackTrace.js +33 -18
  73. package/src/server/telemetry/urlHelpers.js +9 -11
  74. package/src/server/telemetry.js +68 -45
  75. package/src/server/transforms.js +37 -21
  76. package/src/server/transport.js +62 -32
  77. package/src/telemetry.js +92 -28
  78. package/src/transforms.js +33 -21
  79. package/src/truncation.js +8 -5
  80. package/src/utility/headers.js +43 -43
  81. package/src/utility/replace.js +9 -0
  82. package/src/utility/traverse.js +1 -1
  83. package/src/utility.js +89 -52
  84. package/test/api.test.js +31 -29
  85. package/test/apiUtility.test.js +43 -44
  86. package/test/browser.core.test.js +141 -131
  87. package/test/browser.domUtility.test.js +52 -35
  88. package/test/browser.predicates.test.js +13 -13
  89. package/test/browser.rollbar.test.js +597 -503
  90. package/test/browser.telemetry.test.js +76 -0
  91. package/test/browser.transforms.test.js +146 -128
  92. package/test/browser.transport.test.js +54 -46
  93. package/test/browser.url.test.js +12 -11
  94. package/test/fixtures/locals.fixtures.js +245 -126
  95. package/test/notifier.test.js +90 -78
  96. package/test/predicates.test.js +260 -214
  97. package/test/queue.test.js +230 -214
  98. package/test/rateLimiter.test.js +50 -42
  99. package/test/react-native.rollbar.test.js +149 -115
  100. package/test/react-native.transforms.test.js +21 -23
  101. package/test/react-native.transport.test.js +23 -11
  102. package/test/server.lambda.test.js +70 -53
  103. package/test/server.locals.test.js +437 -210
  104. package/test/server.parser.test.js +32 -26
  105. package/test/server.predicates.test.js +45 -43
  106. package/test/server.rollbar.test.js +311 -259
  107. package/test/server.telemetry.test.js +208 -83
  108. package/test/server.transforms.test.js +455 -361
  109. package/test/server.transport.test.js +144 -76
  110. package/test/telemetry.test.js +46 -37
  111. package/test/transforms.test.js +68 -66
  112. package/test/truncation.test.js +55 -53
  113. package/test/utility.test.js +266 -222
  114. package/webpack.config.js +46 -43
  115. package/.gitmodules +0 -3
  116. package/browserstack.browsers.js +0 -153
  117. package/browserstack.browsers.json +0 -4384
@@ -6,12 +6,12 @@
6
6
  var Queue = require('../src/queue');
7
7
 
8
8
  function TestRateLimiterGenerator() {
9
- var TestRateLimiter = function() {
9
+ var TestRateLimiter = function () {
10
10
  this.shouldSendValue = true;
11
11
  this.handler = null;
12
12
  };
13
13
 
14
- TestRateLimiter.prototype.shouldSend = function(item) {
14
+ TestRateLimiter.prototype.shouldSend = function (item) {
15
15
  if (this.handler && typeof this.handler === 'function') {
16
16
  return this.handler(item);
17
17
  }
@@ -22,11 +22,11 @@ function TestRateLimiterGenerator() {
22
22
  }
23
23
 
24
24
  function TestApiGenerator() {
25
- var TestApi = function(handler) {
25
+ var TestApi = function (handler) {
26
26
  this.handler = handler;
27
27
  };
28
28
 
29
- TestApi.prototype.postItem = function(item, callback) {
29
+ TestApi.prototype.postItem = function (item, callback) {
30
30
  if (this.handler && typeof this.handler === 'function') {
31
31
  this.handler(item, callback);
32
32
  } else {
@@ -36,34 +36,33 @@ function TestApiGenerator() {
36
36
  }
37
37
  };
38
38
 
39
- TestApi.prototype.configure = function() {};
39
+ TestApi.prototype.configure = function () {};
40
40
 
41
41
  return TestApi;
42
42
  }
43
43
 
44
44
  function TestLoggerGenerator() {
45
- var TestLogger = function() {
45
+ var TestLogger = function () {
46
46
  this.calls = {
47
47
  log: [],
48
48
  error: [],
49
- info: []
49
+ info: [],
50
50
  };
51
51
  };
52
- TestLogger.prototype.log = function() {
52
+ TestLogger.prototype.log = function () {
53
53
  this.calls.log.push(arguments);
54
54
  };
55
- TestLogger.prototype.error = function() {
55
+ TestLogger.prototype.error = function () {
56
56
  this.calls.error.push(arguments);
57
57
  };
58
- TestLogger.prototype.info = function() {
58
+ TestLogger.prototype.info = function () {
59
59
  this.calls.info.push(arguments);
60
60
  };
61
61
  return TestLogger;
62
- };
63
-
62
+ }
64
63
 
65
- describe('Queue()', function() {
66
- it('should have all of the expected methods', function(done) {
64
+ describe('Queue()', function () {
65
+ it('should have all of the expected methods', function (done) {
67
66
  var rateLimiter = new (TestRateLimiterGenerator())();
68
67
  var api = new (TestApiGenerator())();
69
68
  var logger = new (TestLoggerGenerator())();
@@ -78,18 +77,18 @@ describe('Queue()', function() {
78
77
  });
79
78
  });
80
79
 
81
- describe('configure', function() {
82
- it('should update the options', function(done) {
80
+ describe('configure', function () {
81
+ it('should update the options', function (done) {
83
82
  var rateLimiter = new (TestRateLimiterGenerator())();
84
83
  var api = new (TestApiGenerator())();
85
84
  var logger = new (TestLoggerGenerator())();
86
- var options = {a: 1, b: 42};
85
+ var options = { a: 1, b: 42 };
87
86
  var queue = new Queue(rateLimiter, api, logger, options);
88
87
 
89
88
  expect(queue.options.a).to.eql(1);
90
89
  expect(queue.options.b).to.eql(42);
91
90
 
92
- queue.configure({a: 2, c: 15});
91
+ queue.configure({ a: 2, c: 15 });
93
92
 
94
93
  expect(queue.options.a).to.eql(2);
95
94
  expect(queue.options.b).to.eql(42);
@@ -99,398 +98,408 @@ describe('configure', function() {
99
98
  });
100
99
  });
101
100
 
102
- describe('addItem', function() {
103
- describe('not rate limited', function() {
104
- describe('api success', function() {
105
- it('should work with no callback', function(done) {
101
+ describe('addItem', function () {
102
+ describe('not rate limited', function () {
103
+ describe('api success', function () {
104
+ it('should work with no callback', function (done) {
106
105
  var rateLimiter = new (TestRateLimiterGenerator())();
107
106
  var api = new (TestApiGenerator())();
108
107
  var logger = new (TestLoggerGenerator())();
109
- var options = {transmit: true};
108
+ var options = { transmit: true };
110
109
  var queue = new Queue(rateLimiter, api, logger, options);
111
110
 
112
- var item = {mykey: 'myvalue'};
113
- var serverResponse = {success: true};
111
+ var item = { mykey: 'myvalue' };
112
+ var serverResponse = { success: true };
114
113
 
115
- rateLimiter.handler = function(i) {
114
+ rateLimiter.handler = function (i) {
116
115
  expect(i).to.eql(item);
117
- return {error: null, shouldSend: true, payload: null};
116
+ return { error: null, shouldSend: true, payload: null };
118
117
  };
119
- api.handler = function(i, cb) {
118
+ api.handler = function (i, cb) {
120
119
  expect(i).to.eql(item);
121
120
  cb(null, serverResponse);
122
121
  done();
123
122
  };
124
- queue.addItem({mykey: 'myvalue'});
123
+ queue.addItem({ mykey: 'myvalue' });
125
124
  });
126
- it('should work with a garbage callback', function(done) {
125
+ it('should work with a garbage callback', function (done) {
127
126
  var rateLimiter = new (TestRateLimiterGenerator())();
128
127
  var api = new (TestApiGenerator())();
129
128
  var logger = new (TestLoggerGenerator())();
130
- var options = {transmit: true};
129
+ var options = { transmit: true };
131
130
  var queue = new Queue(rateLimiter, api, logger, options);
132
131
 
133
- var item = {mykey: 'myvalue'};
134
- var serverResponse = {success: true};
132
+ var item = { mykey: 'myvalue' };
133
+ var serverResponse = { success: true };
135
134
 
136
- rateLimiter.handler = function(i) {
135
+ rateLimiter.handler = function (i) {
137
136
  expect(i).to.eql(item);
138
- return {error: null, shouldSend: true, payload: null};
137
+ return { error: null, shouldSend: true, payload: null };
139
138
  };
140
- api.handler = function(i, cb) {
139
+ api.handler = function (i, cb) {
141
140
  expect(i).to.eql(item);
142
141
  cb(null, serverResponse);
143
142
  done();
144
143
  };
145
- queue.addItem({mykey: 'myvalue'}, 'woops');
144
+ queue.addItem({ mykey: 'myvalue' }, 'woops');
146
145
  });
147
- it('should work with no predicates', function(done) {
146
+ it('should work with no predicates', function (done) {
148
147
  var rateLimiter = new (TestRateLimiterGenerator())();
149
148
  var api = new (TestApiGenerator())();
150
149
  var logger = new (TestLoggerGenerator())();
151
- var options = {transmit: true};
150
+ var options = { transmit: true };
152
151
  var queue = new Queue(rateLimiter, api, logger, options);
153
152
 
154
- var item = {mykey: 'myvalue'};
155
- var serverResponse = {success: true};
153
+ var item = { mykey: 'myvalue' };
154
+ var serverResponse = { success: true };
156
155
 
157
- rateLimiter.handler = function(i) {
156
+ rateLimiter.handler = function (i) {
158
157
  expect(i).to.eql(item);
159
- return {error: null, shouldSend: true, payload: null};
158
+ return { error: null, shouldSend: true, payload: null };
160
159
  };
161
- api.handler = function(i, cb) {
160
+ api.handler = function (i, cb) {
162
161
  expect(i).to.eql(item);
163
162
  cb(null, serverResponse);
164
163
  };
165
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
164
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
166
165
  expect(resp).to.eql(serverResponse);
167
166
  done(err);
168
167
  });
169
168
  });
170
- it('should call the logger if an error is about to be logged', function(done) {
169
+ it('should call the logger if an error is about to be logged', function (done) {
171
170
  var rateLimiter = new (TestRateLimiterGenerator())();
172
171
  var api = new (TestApiGenerator())();
173
172
  var logger = new (TestLoggerGenerator())();
174
- var options = {verbose: true, transmit: true};
173
+ var options = { verbose: true, transmit: true };
175
174
  var queue = new Queue(rateLimiter, api, logger, options);
176
175
 
177
- var item = {body: {trace: {exception: {message: 'hello'}}}};
178
- var serverResponse = {success: true};
176
+ var item = { body: { trace: { exception: { message: 'hello' } } } };
177
+ var serverResponse = { success: true };
179
178
 
180
- rateLimiter.handler = function(i) {
179
+ rateLimiter.handler = function (i) {
181
180
  expect(i).to.eql(item);
182
- return {error: null, shouldSend: true, payload: null};
181
+ return { error: null, shouldSend: true, payload: null };
183
182
  };
184
- api.handler = function(i, cb) {
183
+ api.handler = function (i, cb) {
185
184
  expect(i).to.eql(item);
186
185
  cb(null, serverResponse);
187
186
  };
188
- queue.addItem(item, function(err, resp) {
187
+ queue.addItem(item, function (err, resp) {
189
188
  expect(resp).to.eql(serverResponse);
190
189
  expect(logger.calls.error[0][0]).to.eql('hello');
191
190
  done(err);
192
191
  });
193
192
  });
194
- it('should call the logger if a message is about to be logged', function(done) {
193
+ it('should call the logger if a message is about to be logged', function (done) {
195
194
  var rateLimiter = new (TestRateLimiterGenerator())();
196
195
  var api = new (TestApiGenerator())();
197
196
  var logger = new (TestLoggerGenerator())();
198
- var options = {verbose: true, transmit: true};
197
+ var options = { verbose: true, transmit: true };
199
198
  var queue = new Queue(rateLimiter, api, logger, options);
200
199
 
201
- var item = {body: {message: {body: 'hello'}}};
202
- var serverResponse = {success: true};
200
+ var item = { body: { message: { body: 'hello' } } };
201
+ var serverResponse = { success: true };
203
202
 
204
- rateLimiter.handler = function(i) {
203
+ rateLimiter.handler = function (i) {
205
204
  expect(i).to.eql(item);
206
- return {error: null, shouldSend: true, payload: null};
205
+ return { error: null, shouldSend: true, payload: null };
207
206
  };
208
- api.handler = function(i, cb) {
207
+ api.handler = function (i, cb) {
209
208
  expect(i).to.eql(item);
210
209
  cb(null, serverResponse);
211
210
  };
212
- queue.addItem(item, function(err, resp) {
211
+ queue.addItem(item, function (err, resp) {
213
212
  expect(resp).to.eql(serverResponse);
214
213
  expect(logger.calls.log[0][0]).to.eql('hello');
215
214
  done(err);
216
215
  });
217
216
  });
218
- it('should not call the logger if verbose is false', function(done) {
217
+ it('should not call the logger if verbose is false', function (done) {
219
218
  var rateLimiter = new (TestRateLimiterGenerator())();
220
219
  var api = new (TestApiGenerator())();
221
220
  var logger = new (TestLoggerGenerator())();
222
- var options = {verbose: false, transmit: true};
221
+ var options = { verbose: false, transmit: true };
223
222
  var queue = new Queue(rateLimiter, api, logger, options);
224
223
 
225
- var item = {body: {message: {body: 'hello'}}};
226
- var serverResponse = {success: true};
224
+ var item = { body: { message: { body: 'hello' } } };
225
+ var serverResponse = { success: true };
227
226
 
228
- rateLimiter.handler = function(i) {
227
+ rateLimiter.handler = function (i) {
229
228
  expect(i).to.eql(item);
230
- return {error: null, shouldSend: true, payload: null};
229
+ return { error: null, shouldSend: true, payload: null };
231
230
  };
232
- api.handler = function(i, cb) {
231
+ api.handler = function (i, cb) {
233
232
  expect(i).to.eql(item);
234
233
  cb(null, serverResponse);
235
234
  };
236
- queue.addItem(item, function(err, resp) {
235
+ queue.addItem(item, function (err, resp) {
237
236
  expect(resp).to.eql(serverResponse);
238
237
  expect(logger.calls.log.length).to.eql(0);
239
238
  done(err);
240
239
  });
241
240
  });
242
- it('should stop if a predicate returns false', function(done) {
241
+ it('should stop if a predicate returns false', function (done) {
243
242
  var rateLimiter = new (TestRateLimiterGenerator())();
244
243
  var api = new (TestApiGenerator())();
245
244
  var logger = new (TestLoggerGenerator())();
246
- var options = {transmit: true};
245
+ var options = { transmit: true };
247
246
  var queue = new Queue(rateLimiter, api, logger, options);
248
247
 
249
- var item = {mykey: 'myvalue'};
250
- var serverResponse = {success: true};
248
+ var item = { mykey: 'myvalue' };
249
+ var serverResponse = { success: true };
251
250
 
252
- rateLimiter.handler = function(i) {
251
+ rateLimiter.handler = function (i) {
253
252
  expect(false).to.be.ok();
254
- return {error: null, shouldSend: true, payload: null};
253
+ return { error: null, shouldSend: true, payload: null };
255
254
  };
256
- api.handler = function(i, cb) {
255
+ api.handler = function (i, cb) {
257
256
  expect(false).to.be.ok();
258
257
  cb(null, serverResponse);
259
258
  };
260
- queue.addPredicate(function(i, s) {
259
+ queue.addPredicate(function (i, s) {
261
260
  return false;
262
261
  });
263
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
262
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
264
263
  expect(resp).to.not.be.ok();
265
264
  done(err);
266
265
  });
267
266
  });
268
- it('should stop if a predicate returns an error', function(done) {
267
+ it('should stop if a predicate returns an error', function (done) {
269
268
  var rateLimiter = new (TestRateLimiterGenerator())();
270
269
  var api = new (TestApiGenerator())();
271
270
  var logger = new (TestLoggerGenerator())();
272
- var options = {transmit: true};
271
+ var options = { transmit: true };
273
272
  var queue = new Queue(rateLimiter, api, logger, options);
274
273
 
275
- var item = {mykey: 'myvalue'};
276
- var serverResponse = {success: true};
274
+ var item = { mykey: 'myvalue' };
275
+ var serverResponse = { success: true };
277
276
 
278
- rateLimiter.handler = function(i) {
277
+ rateLimiter.handler = function (i) {
279
278
  expect(false).to.be.ok();
280
- return {error: null, shouldSend: true, payload: null};
279
+ return { error: null, shouldSend: true, payload: null };
281
280
  };
282
- api.handler = function(i, cb) {
281
+ api.handler = function (i, cb) {
283
282
  expect(false).to.be.ok();
284
283
  cb(null, serverResponse);
285
284
  };
286
285
  var predicateError = 'bork bork';
287
- queue.addPredicate(function(i, s) {
288
- return {err: predicateError};
286
+ queue.addPredicate(function (i, s) {
287
+ return { err: predicateError };
289
288
  });
290
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
289
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
291
290
  expect(err).to.eql(predicateError);
292
291
  expect(resp).to.not.be.ok();
293
292
  done();
294
293
  });
295
294
  });
296
- it('should stop if any predicate returns an error', function(done) {
295
+ it('should stop if any predicate returns an error', function (done) {
297
296
  var rateLimiter = new (TestRateLimiterGenerator())();
298
297
  var api = new (TestApiGenerator())();
299
298
  var logger = new (TestLoggerGenerator())();
300
- var options = {transmit: true};
299
+ var options = { transmit: true };
301
300
  var queue = new Queue(rateLimiter, api, logger, options);
302
301
 
303
- var item = {mykey: 'myvalue'};
304
- var serverResponse = {success: true};
302
+ var item = { mykey: 'myvalue' };
303
+ var serverResponse = { success: true };
305
304
 
306
- rateLimiter.handler = function(i) {
305
+ rateLimiter.handler = function (i) {
307
306
  expect(false).to.be.ok();
308
- return {error: null, shouldSend: true, payload: null};
307
+ return { error: null, shouldSend: true, payload: null };
309
308
  };
310
- api.handler = function(i, cb) {
309
+ api.handler = function (i, cb) {
311
310
  expect(false).to.be.ok();
312
311
  cb(null, serverResponse);
313
312
  };
314
313
  var predicateError = 'bork bork';
315
- queue.addPredicate(function(i, s) {
316
- return true;
317
- }).addPredicate(function(i, s) {
318
- return {err: predicateError};
319
- }).addPredicate(function(i, s) {
320
- return true;
321
- });
322
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
314
+ queue
315
+ .addPredicate(function (i, s) {
316
+ return true;
317
+ })
318
+ .addPredicate(function (i, s) {
319
+ return { err: predicateError };
320
+ })
321
+ .addPredicate(function (i, s) {
322
+ return true;
323
+ });
324
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
323
325
  expect(err).to.eql(predicateError);
324
326
  expect(resp).to.not.be.ok();
325
327
  done();
326
328
  });
327
329
  });
328
- it('should call wait if set', function(done) {
330
+ it('should call wait if set', function (done) {
329
331
  var rateLimiter = new (TestRateLimiterGenerator())();
330
332
  var api = new (TestApiGenerator())();
331
333
  var logger = new (TestLoggerGenerator())();
332
- var options = {transmit: true};
334
+ var options = { transmit: true };
333
335
  var queue = new Queue(rateLimiter, api, logger, options);
334
336
 
335
- var item = {mykey: 'myvalue'};
336
- var serverResponse = {success: true};
337
+ var item = { mykey: 'myvalue' };
338
+ var serverResponse = { success: true };
337
339
 
338
- rateLimiter.handler = function(i) {
340
+ rateLimiter.handler = function (i) {
339
341
  expect(false).to.be.ok();
340
- return {error: null, shouldSend: true, payload: null};
342
+ return { error: null, shouldSend: true, payload: null };
341
343
  };
342
- api.handler = function(i, cb) {
344
+ api.handler = function (i, cb) {
343
345
  expect(false).to.be.ok();
344
346
  cb(null, serverResponse);
345
347
  };
346
- queue.wait(function() {
348
+ queue.wait(function () {
347
349
  done();
348
350
  });
349
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
351
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
350
352
  expect(resp).to.be.ok();
351
353
  });
352
354
  });
353
- it('should work if wait is called with a non-function', function(done) {
355
+ it('should work if wait is called with a non-function', function (done) {
354
356
  var rateLimiter = new (TestRateLimiterGenerator())();
355
357
  var api = new (TestApiGenerator())();
356
358
  var logger = new (TestLoggerGenerator())();
357
- var options = {transmit: true};
359
+ var options = { transmit: true };
358
360
  var queue = new Queue(rateLimiter, api, logger, options);
359
361
 
360
- var item = {mykey: 'myvalue'};
361
- var serverResponse = {success: true};
362
+ var item = { mykey: 'myvalue' };
363
+ var serverResponse = { success: true };
362
364
 
363
- rateLimiter.handler = function(i) {
364
- return {error: null, shouldSend: true, payload: null};
365
+ rateLimiter.handler = function (i) {
366
+ return { error: null, shouldSend: true, payload: null };
365
367
  };
366
- api.handler = function(i, cb) {
368
+ api.handler = function (i, cb) {
367
369
  cb(null, serverResponse);
368
370
  };
369
371
  queue.wait({});
370
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
372
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
371
373
  expect(resp).to.be.ok();
372
374
  done(err);
373
375
  });
374
376
  });
375
- it('should work if all predicates return true', function(done) {
377
+ it('should work if all predicates return true', function (done) {
376
378
  var rateLimiter = new (TestRateLimiterGenerator())();
377
379
  var api = new (TestApiGenerator())();
378
380
  var logger = new (TestLoggerGenerator())();
379
- var options = {transmit: true};
381
+ var options = { transmit: true };
380
382
  var queue = new Queue(rateLimiter, api, logger, options);
381
383
 
382
- var item = {mykey: 'myvalue'};
383
- var serverResponse = {success: true};
384
+ var item = { mykey: 'myvalue' };
385
+ var serverResponse = { success: true };
384
386
 
385
- rateLimiter.handler = function(i) {
387
+ rateLimiter.handler = function (i) {
386
388
  expect(i).to.eql(item);
387
- return {error: null, shouldSend: true, payload: null};
389
+ return { error: null, shouldSend: true, payload: null };
388
390
  };
389
- api.handler = function(i, cb) {
391
+ api.handler = function (i, cb) {
390
392
  expect(i).to.eql(item);
391
393
  cb(null, serverResponse);
392
394
  };
393
- queue.addPredicate(function(i, s) {
394
- return true;
395
- }).addPredicate(function() {
396
- return true;
397
- });
398
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
395
+ queue
396
+ .addPredicate(function (i, s) {
397
+ return true;
398
+ })
399
+ .addPredicate(function () {
400
+ return true;
401
+ });
402
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
399
403
  expect(resp).to.eql(serverResponse);
400
404
  done(err);
401
405
  });
402
406
  });
403
407
  });
404
- describe('api failure', function() {
405
- it('should callback if the api throws an exception', function(done) {
408
+ describe('api failure', function () {
409
+ it('should callback if the api throws an exception', function (done) {
406
410
  var rateLimiter = new (TestRateLimiterGenerator())();
407
411
  var api = new (TestApiGenerator())();
408
412
  var logger = new (TestLoggerGenerator())();
409
- var options = {transmit: true};
413
+ var options = { transmit: true };
410
414
  var queue = new Queue(rateLimiter, api, logger, options);
411
415
 
412
- var item = {mykey: 'myvalue'};
416
+ var item = { mykey: 'myvalue' };
413
417
  var exception = 'boom!';
414
418
 
415
- rateLimiter.handler = function(i) {
419
+ rateLimiter.handler = function (i) {
416
420
  expect(i).to.eql(item);
417
- return {error: null, shouldSend: true, payload: null};
421
+ return { error: null, shouldSend: true, payload: null };
418
422
  };
419
- api.handler = function(i, cb) {
423
+ api.handler = function (i, cb) {
420
424
  throw exception;
421
425
  };
422
- queue.addPredicate(function(i, s) {
423
- return true;
424
- }).addPredicate(function() {
425
- return true;
426
- });
427
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
426
+ queue
427
+ .addPredicate(function (i, s) {
428
+ return true;
429
+ })
430
+ .addPredicate(function () {
431
+ return true;
432
+ });
433
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
428
434
  expect(resp).to.not.be.ok();
429
435
  expect(err).to.eql(exception);
430
436
  done();
431
437
  });
432
438
  });
433
- it('should callback with the api error if not retriable', function(done) {
439
+ it('should callback with the api error if not retriable', function (done) {
434
440
  var rateLimiter = new (TestRateLimiterGenerator())();
435
441
  var api = new (TestApiGenerator())();
436
442
  var logger = new (TestLoggerGenerator())();
437
- var options = {retryInterval: 1, transmit: true};
443
+ var options = { retryInterval: 1, transmit: true };
438
444
  var queue = new Queue(rateLimiter, api, logger, options);
439
445
 
440
- var item = {mykey: 'myvalue'};
441
- var apiError = {code: 'NOPE', message: 'borked'};
446
+ var item = { mykey: 'myvalue' };
447
+ var apiError = { code: 'NOPE', message: 'borked' };
442
448
 
443
- rateLimiter.handler = function(i) {
444
- return {error: null, shouldSend: true, payload: null};
449
+ rateLimiter.handler = function (i) {
450
+ return { error: null, shouldSend: true, payload: null };
445
451
  };
446
- api.handler = function(i, cb) {
452
+ api.handler = function (i, cb) {
447
453
  cb(apiError);
448
454
  };
449
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
455
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
450
456
  expect(err).to.eql(apiError);
451
457
  expect(resp).to.not.be.ok();
452
458
  done();
453
459
  });
454
460
  });
455
- it('should callback with the api error if no retryInterval is set', function(done) {
461
+ it('should callback with the api error if no retryInterval is set', function (done) {
456
462
  var rateLimiter = new (TestRateLimiterGenerator())();
457
463
  var api = new (TestApiGenerator())();
458
464
  var logger = new (TestLoggerGenerator())();
459
- var options = {transmit: true};
465
+ var options = { transmit: true };
460
466
  var queue = new Queue(rateLimiter, api, logger, options);
461
467
 
462
- var item = {mykey: 'myvalue'};
463
- var apiError = {code: 'ENOTFOUND', message: 'No internet connection'};
468
+ var item = { mykey: 'myvalue' };
469
+ var apiError = { code: 'ENOTFOUND', message: 'No internet connection' };
464
470
 
465
- rateLimiter.handler = function(i) {
466
- return {error: null, shouldSend: true, payload: null};
471
+ rateLimiter.handler = function (i) {
472
+ return { error: null, shouldSend: true, payload: null };
467
473
  };
468
- api.handler = function(i, cb) {
474
+ api.handler = function (i, cb) {
469
475
  cb(apiError);
470
476
  };
471
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
477
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
472
478
  expect(err).to.eql(apiError);
473
479
  expect(resp).to.not.be.ok();
474
480
  done();
475
481
  });
476
482
  });
477
- describe('if we get a retriable error', function() {
478
- it('should retry', function(done) {
483
+ describe('if we get a retriable error', function () {
484
+ it('should retry', function (done) {
479
485
  var rateLimiter = new (TestRateLimiterGenerator())();
480
486
  var api = new (TestApiGenerator())();
481
487
  var logger = new (TestLoggerGenerator())();
482
- var options = {retryInterval: 1, transmit: true};
488
+ var options = { retryInterval: 1, transmit: true };
483
489
  var queue = new Queue(rateLimiter, api, logger, options);
484
490
 
485
- var item = {mykey: 'myvalue'};
486
- var serverResponse = {success: true};
487
- var apiError = {code: 'ENOTFOUND', message: 'No internet connection'};
491
+ var item = { mykey: 'myvalue' };
492
+ var serverResponse = { success: true };
493
+ var apiError = {
494
+ code: 'ENOTFOUND',
495
+ message: 'No internet connection',
496
+ };
488
497
 
489
498
  var apiRequestCount = 0;
490
- rateLimiter.handler = function(i) {
491
- return {error: null, shouldSend: true, payload: null};
499
+ rateLimiter.handler = function (i) {
500
+ return { error: null, shouldSend: true, payload: null };
492
501
  };
493
- api.handler = function(i, cb) {
502
+ api.handler = function (i, cb) {
494
503
  apiRequestCount++;
495
504
  if (apiRequestCount === 1) {
496
505
  cb(apiError);
@@ -498,52 +507,55 @@ describe('addItem', function() {
498
507
  cb(null, serverResponse);
499
508
  }
500
509
  };
501
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
510
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
502
511
  expect(err).to.not.be.ok();
503
512
  expect(resp).to.eql(serverResponse);
504
513
  expect(apiRequestCount).to.eql(2);
505
514
  done();
506
515
  });
507
516
  });
508
- it('should retry until maxRetries limit is reached', function(done) {
517
+ it('should retry until maxRetries limit is reached', function (done) {
509
518
  var rateLimiter = new (TestRateLimiterGenerator())();
510
519
  var api = new (TestApiGenerator())();
511
520
  var logger = new (TestLoggerGenerator())();
512
- var options = {retryInterval: 1, maxRetries: 2, transmit: true};
521
+ var options = { retryInterval: 1, maxRetries: 2, transmit: true };
513
522
  var queue = new Queue(rateLimiter, api, logger, options);
514
523
 
515
- var item = {mykey: 'myvalue'};
516
- var serverResponse = {success: true};
517
- var apiError = {code: 'ENOTFOUND', message: 'No internet connection'};
524
+ var item = { mykey: 'myvalue' };
525
+ var serverResponse = { success: true };
526
+ var apiError = {
527
+ code: 'ENOTFOUND',
528
+ message: 'No internet connection',
529
+ };
518
530
 
519
531
  var apiRequestCount = 0;
520
- rateLimiter.handler = function(i) {
521
- return {error: null, shouldSend: true, payload: null};
532
+ rateLimiter.handler = function (i) {
533
+ return { error: null, shouldSend: true, payload: null };
522
534
  };
523
- api.handler = function(i, cb) {
535
+ api.handler = function (i, cb) {
524
536
  apiRequestCount++;
525
- cb({...apiError, retry: apiRequestCount});
537
+ cb({ ...apiError, retry: apiRequestCount });
526
538
  };
527
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
539
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
528
540
  var numRequests = options.maxRetries + 1;
529
541
  expect(apiRequestCount).to.eql(numRequests);
530
- expect(err).to.eql({...apiError, retry: numRequests});
542
+ expect(err).to.eql({ ...apiError, retry: numRequests });
531
543
  expect(resp).to.not.be.ok();
532
544
  done();
533
545
  });
534
546
  });
535
547
  });
536
548
  });
537
- describe('transmit disabled', function() {
538
- it('should not attempt to send', function(done) {
549
+ describe('transmit disabled', function () {
550
+ it('should not attempt to send', function (done) {
539
551
  var rateLimiter = new (TestRateLimiterGenerator())();
540
552
  var api = new (TestApiGenerator())();
541
553
  var logger = new (TestLoggerGenerator())();
542
- var options = {transmit: false};
554
+ var options = { transmit: false };
543
555
  var queue = new Queue(rateLimiter, api, logger, options);
544
556
  var makeApiRequestStub = sinon.stub(queue, '_makeApiRequest');
545
557
 
546
- queue.addItem({mykey: 'myvalue'}, function(err) {
558
+ queue.addItem({ mykey: 'myvalue' }, function (err) {
547
559
  expect(err.message).to.eql('Transmit disabled');
548
560
  });
549
561
 
@@ -554,60 +566,64 @@ describe('addItem', function() {
554
566
  });
555
567
  });
556
568
  });
557
- describe('rate limited', function() {
558
- it('should callback if the rate limiter says not to send and has an error', function(done) {
569
+ describe('rate limited', function () {
570
+ it('should callback if the rate limiter says not to send and has an error', function (done) {
559
571
  var rateLimiter = new (TestRateLimiterGenerator())();
560
572
  var api = new (TestApiGenerator())();
561
573
  var logger = new (TestLoggerGenerator())();
562
- var options = {transmit: true};
574
+ var options = { transmit: true };
563
575
  var queue = new Queue(rateLimiter, api, logger, options);
564
576
 
565
- var item = {mykey: 'myvalue'};
577
+ var item = { mykey: 'myvalue' };
566
578
  var rateLimitError = 'bork';
567
579
 
568
- rateLimiter.handler = function(i) {
580
+ rateLimiter.handler = function (i) {
569
581
  expect(i).to.eql(item);
570
- return {error: rateLimitError, shouldSend: false, payload: null};
582
+ return { error: rateLimitError, shouldSend: false, payload: null };
571
583
  };
572
- api.handler = function(i, cb) {
584
+ api.handler = function (i, cb) {
573
585
  cb(null, 'Good times');
574
586
  };
575
- queue.addPredicate(function(i, s) {
576
- return true;
577
- }).addPredicate(function() {
578
- return true;
579
- });
580
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
587
+ queue
588
+ .addPredicate(function (i, s) {
589
+ return true;
590
+ })
591
+ .addPredicate(function () {
592
+ return true;
593
+ });
594
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
581
595
  expect(resp).to.not.be.ok();
582
596
  expect(err).to.eql(rateLimitError);
583
597
  done();
584
598
  });
585
599
  });
586
- it('should callback if the rate limiter says not to send and has a payload', function(done) {
600
+ it('should callback if the rate limiter says not to send and has a payload', function (done) {
587
601
  var rateLimiter = new (TestRateLimiterGenerator())();
588
602
  var api = new (TestApiGenerator())();
589
603
  var logger = new (TestLoggerGenerator())();
590
- var options = {transmit: true};
604
+ var options = { transmit: true };
591
605
  var queue = new Queue(rateLimiter, api, logger, options);
592
606
 
593
- var item = {mykey: 'myvalue'};
594
- var rateLimitPayload = {something: 'went wrong'};
595
- var serverResponse = {message: 'good times'};
607
+ var item = { mykey: 'myvalue' };
608
+ var rateLimitPayload = { something: 'went wrong' };
609
+ var serverResponse = { message: 'good times' };
596
610
 
597
- rateLimiter.handler = function(i) {
611
+ rateLimiter.handler = function (i) {
598
612
  expect(i).to.eql(item);
599
- return {error: null, shouldSend: false, payload: rateLimitPayload};
613
+ return { error: null, shouldSend: false, payload: rateLimitPayload };
600
614
  };
601
- api.handler = function(i, cb) {
615
+ api.handler = function (i, cb) {
602
616
  expect(i).to.eql(rateLimitPayload);
603
617
  cb(null, serverResponse);
604
618
  };
605
- queue.addPredicate(function(i, s) {
606
- return true;
607
- }).addPredicate(function() {
608
- return true;
609
- });
610
- queue.addItem({mykey: 'myvalue'}, function(err, resp) {
619
+ queue
620
+ .addPredicate(function (i, s) {
621
+ return true;
622
+ })
623
+ .addPredicate(function () {
624
+ return true;
625
+ });
626
+ queue.addItem({ mykey: 'myvalue' }, function (err, resp) {
611
627
  expect(resp).to.eql(serverResponse);
612
628
  expect(err).to.not.be.ok();
613
629
  done();