rollbar 2.17.0 → 2.19.2

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 (55) hide show
  1. package/README.md +1 -1
  2. package/defaults.js +0 -1
  3. package/dist/rollbar.js +3810 -3556
  4. package/dist/rollbar.js.map +1 -1
  5. package/dist/rollbar.min.js +1 -1
  6. package/dist/rollbar.min.js.map +1 -1
  7. package/dist/rollbar.named-amd.js +3807 -3553
  8. package/dist/rollbar.named-amd.js.map +1 -1
  9. package/dist/rollbar.named-amd.min.js +1 -1
  10. package/dist/rollbar.named-amd.min.js.map +1 -1
  11. package/dist/rollbar.noconflict.umd.js +3807 -3553
  12. package/dist/rollbar.noconflict.umd.js.map +1 -1
  13. package/dist/rollbar.noconflict.umd.min.js +1 -1
  14. package/dist/rollbar.noconflict.umd.min.js.map +1 -1
  15. package/dist/rollbar.snippet.js +1 -1
  16. package/dist/rollbar.umd.js +3807 -3553
  17. package/dist/rollbar.umd.js.map +1 -1
  18. package/dist/rollbar.umd.min.js +1 -1
  19. package/dist/rollbar.umd.min.js.map +1 -1
  20. package/index.d.ts +2 -0
  21. package/package.json +1 -62
  22. package/src/api.js +13 -7
  23. package/src/browser/core.js +561 -0
  24. package/src/browser/defaults/scrubFields.js +59 -0
  25. package/src/browser/globalSetup.js +1 -41
  26. package/src/browser/rollbar.js +16 -544
  27. package/src/browser/shim.js +2 -1
  28. package/src/browser/telemetry.js +33 -17
  29. package/src/browser/transforms.js +28 -5
  30. package/src/browser/transport.js +13 -10
  31. package/src/browser/wrapGlobals.js +41 -0
  32. package/src/defaults.js +9 -0
  33. package/src/predicates.js +1 -0
  34. package/src/react-native/rollbar.js +9 -3
  35. package/src/react-native/transforms.js +7 -1
  36. package/src/react-native/transport.js +16 -10
  37. package/src/rollbar.js +9 -10
  38. package/src/scrub.js +93 -0
  39. package/src/server/rollbar.js +6 -2
  40. package/src/server/sourceMap/stackTrace.js +1 -2
  41. package/src/server/transforms.js +18 -4
  42. package/src/transforms.js +0 -1
  43. package/src/truncation.js +3 -2
  44. package/src/utility/traverse.js +38 -0
  45. package/src/utility.js +25 -107
  46. package/test/api.test.js +2 -0
  47. package/test/apiUtility.test.js +2 -1
  48. package/test/browser.core.test.js +555 -0
  49. package/test/browser.rollbar.test.js +116 -13
  50. package/test/browser.transforms.test.js +22 -2
  51. package/test/browser.transport.test.js +5 -2
  52. package/test/react-native.transport.test.js +5 -1
  53. package/test/server.transforms.test.js +70 -0
  54. package/test/truncation.test.js +2 -0
  55. package/test/utility.test.js +44 -13
package/src/truncation.js CHANGED
@@ -1,4 +1,5 @@
1
1
  var _ = require('./utility');
2
+ var traverse = require('./utility/traverse');
2
3
 
3
4
  function raw(payload, jsonBackup) {
4
5
  return [payload, _.stringify(payload, jsonBackup)];
@@ -48,12 +49,12 @@ function truncateStrings(len, payload, jsonBackup) {
48
49
  return maybeTruncateValue(len, v);
49
50
  case 'object':
50
51
  case 'array':
51
- return _.traverse(v, truncator, seen);
52
+ return traverse(v, truncator, seen);
52
53
  default:
53
54
  return v;
54
55
  }
55
56
  }
56
- payload = _.traverse(payload, truncator, []);
57
+ payload = traverse(payload, truncator, []);
57
58
  return [payload, _.stringify(payload, jsonBackup)];
58
59
  }
59
60
 
@@ -0,0 +1,38 @@
1
+ var _ = require('../utility');
2
+
3
+ function traverse(obj, func, seen) {
4
+ var k, v, i;
5
+ var isObj = _.isType(obj, 'object');
6
+ var isArray = _.isType(obj, 'array');
7
+ var keys = [];
8
+
9
+ if (isObj && seen.indexOf(obj) !== -1) {
10
+ return obj;
11
+ }
12
+ seen.push(obj);
13
+
14
+ if (isObj) {
15
+ for (k in obj) {
16
+ if (Object.prototype.hasOwnProperty.call(obj, k)) {
17
+ keys.push(k);
18
+ }
19
+ }
20
+ } else if (isArray) {
21
+ for (i = 0; i < obj.length; ++i) {
22
+ keys.push(i);
23
+ }
24
+ }
25
+
26
+ var result = isObj ? {} : [];
27
+ var same = true;
28
+ for (i = 0; i < keys.length; ++i) {
29
+ k = keys[i];
30
+ v = obj[k];
31
+ result[k] = func(k, v, seen);
32
+ same = same && result[k] === obj[k];
33
+ }
34
+
35
+ return (keys.length != 0 && !same) ? result : obj;
36
+ }
37
+
38
+ module.exports = traverse;
package/src/utility.js CHANGED
@@ -2,7 +2,7 @@ var merge = require('./merge');
2
2
 
3
3
  var RollbarJSON = {};
4
4
  var __initRollbarJSON = false;
5
- function setupJSON() {
5
+ function setupJSON(polyfillJSON) {
6
6
  if (__initRollbarJSON) {
7
7
  return;
8
8
  }
@@ -17,11 +17,9 @@ function setupJSON() {
17
17
  }
18
18
  }
19
19
  if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {
20
- var setupCustomJSON = require('../vendor/JSON-js/json3.js');
21
- setupCustomJSON(RollbarJSON);
20
+ polyfillJSON(RollbarJSON);
22
21
  }
23
22
  }
24
- setupJSON();
25
23
 
26
24
  /*
27
25
  * isType - Given a Javascript value and a string, returns true if the type of the value matches the
@@ -137,41 +135,6 @@ function isError(e) {
137
135
  return isType(e, 'error') || isType(e, 'exception');
138
136
  }
139
137
 
140
- function traverse(obj, func, seen) {
141
- var k, v, i;
142
- var isObj = isType(obj, 'object');
143
- var isArray = isType(obj, 'array');
144
- var keys = [];
145
-
146
- if (isObj && seen.indexOf(obj) !== -1) {
147
- return obj;
148
- }
149
- seen.push(obj);
150
-
151
- if (isObj) {
152
- for (k in obj) {
153
- if (Object.prototype.hasOwnProperty.call(obj, k)) {
154
- keys.push(k);
155
- }
156
- }
157
- } else if (isArray) {
158
- for (i = 0; i < obj.length; ++i) {
159
- keys.push(i);
160
- }
161
- }
162
-
163
- var result = isObj ? {} : [];
164
- var same = true;
165
- for (i = 0; i < keys.length; ++i) {
166
- k = keys[i];
167
- v = obj[k];
168
- result[k] = func(k, v, seen);
169
- same = same && result[k] === obj[k];
170
- }
171
-
172
- return (keys.length != 0 && !same) ? result : obj;
173
- }
174
-
175
138
  function redact() {
176
139
  return '********';
177
140
  }
@@ -506,6 +469,27 @@ function setCustomItemKeys(item, custom) {
506
469
  }
507
470
  }
508
471
 
472
+ function addErrorContext(item, errors) {
473
+ var custom = item.data.custom || {};
474
+ var contextAdded = false;
475
+
476
+ try {
477
+ for (var i = 0; i < errors.length; ++i) {
478
+ if (errors[i].hasOwnProperty('rollbarContext')) {
479
+ custom = merge(custom, errors[i].rollbarContext);
480
+ contextAdded = true;
481
+ }
482
+ }
483
+
484
+ // Avoid adding an empty object to the data.
485
+ if (contextAdded) {
486
+ item.data.custom = custom;
487
+ }
488
+ } catch (e) {
489
+ item.diagnostic.error_context = 'Failed: ' + e.message;
490
+ }
491
+ }
492
+
509
493
  var TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];
510
494
  var TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];
511
495
 
@@ -602,72 +586,6 @@ function set(obj, path, value) {
602
586
  }
603
587
  }
604
588
 
605
- function scrub(data, scrubFields) {
606
- scrubFields = scrubFields || [];
607
- var paramRes = _getScrubFieldRegexs(scrubFields);
608
- var queryRes = _getScrubQueryParamRegexs(scrubFields);
609
-
610
- function redactQueryParam(dummy0, paramPart) {
611
- return paramPart + redact();
612
- }
613
-
614
- function paramScrubber(v) {
615
- var i;
616
- if (isType(v, 'string')) {
617
- for (i = 0; i < queryRes.length; ++i) {
618
- v = v.replace(queryRes[i], redactQueryParam);
619
- }
620
- }
621
- return v;
622
- }
623
-
624
- function valScrubber(k, v) {
625
- var i;
626
- for (i = 0; i < paramRes.length; ++i) {
627
- if (paramRes[i].test(k)) {
628
- v = redact();
629
- break;
630
- }
631
- }
632
- return v;
633
- }
634
-
635
- function scrubber(k, v, seen) {
636
- var tmpV = valScrubber(k, v);
637
- if (tmpV === v) {
638
- if (isType(v, 'object') || isType(v, 'array')) {
639
- return traverse(v, scrubber, seen);
640
- }
641
- return paramScrubber(tmpV);
642
- } else {
643
- return tmpV;
644
- }
645
- }
646
-
647
- return traverse(data, scrubber, []);
648
- }
649
-
650
- function _getScrubFieldRegexs(scrubFields) {
651
- var ret = [];
652
- var pat;
653
- for (var i = 0; i < scrubFields.length; ++i) {
654
- pat = '^\\[?(%5[bB])?' + scrubFields[i] + '\\[?(%5[bB])?\\]?(%5[dD])?$';
655
- ret.push(new RegExp(pat, 'i'));
656
- }
657
- return ret;
658
- }
659
-
660
-
661
- function _getScrubQueryParamRegexs(scrubFields) {
662
- var ret = [];
663
- var pat;
664
- for (var i = 0; i < scrubFields.length; ++i) {
665
- pat = '\\[?(%5[bB])?' + scrubFields[i] + '\\[?(%5[bB])?\\]?(%5[dD])?';
666
- ret.push(new RegExp('(' + pat + '=)([^&\\n]+)', 'igm'));
667
- }
668
- return ret;
669
- }
670
-
671
589
  function formatArgsAsString(args) {
672
590
  var i, len, arg;
673
591
  var result = [];
@@ -753,6 +671,7 @@ function handleOptions(current, input, payload) {
753
671
  module.exports = {
754
672
  addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,
755
673
  createItem: createItem,
674
+ addErrorContext: addErrorContext,
756
675
  createTelemetryEvent: createTelemetryEvent,
757
676
  filterIp: filterIp,
758
677
  formatArgsAsString: formatArgsAsString,
@@ -773,11 +692,10 @@ module.exports = {
773
692
  now: now,
774
693
  redact: redact,
775
694
  sanitizeUrl: sanitizeUrl,
776
- scrub: scrub,
777
695
  set: set,
696
+ setupJSON: setupJSON,
778
697
  stringify: stringify,
779
698
  maxByteSize: maxByteSize,
780
- traverse: traverse,
781
699
  typeName: typeName,
782
700
  uuid4: uuid4
783
701
  };
package/test/api.test.js CHANGED
@@ -4,6 +4,8 @@
4
4
  /* globals sinon */
5
5
 
6
6
  var API = require('../src/api');
7
+ var utility = require('../src/utility');
8
+ utility.setupJSON();
7
9
 
8
10
  function TestTransportGenerator() {
9
11
  var TestTransport = function(callbackError, callbackResponse) {
@@ -4,6 +4,8 @@
4
4
  /* globals sinon */
5
5
 
6
6
  var u = require('../src/apiUtility');
7
+ var utility = require('../src/utility');
8
+ utility.setupJSON();
7
9
 
8
10
  describe('buildPayload', function() {
9
11
  it('should package up the input into a payload', function() {
@@ -157,4 +159,3 @@ describe('appendPathToPath', function() {
157
159
  expect(u.appendPathToPath(base, 'item')).to.eql(expNoSlash);
158
160
  });
159
161
  });
160
-