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.
- package/README.md +1 -1
- package/defaults.js +0 -1
- package/dist/rollbar.js +3810 -3556
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +1 -1
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +3807 -3553
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +1 -1
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +3807 -3553
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +1 -1
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +3807 -3553
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +1 -1
- package/dist/rollbar.umd.min.js.map +1 -1
- package/index.d.ts +2 -0
- package/package.json +1 -62
- package/src/api.js +13 -7
- package/src/browser/core.js +561 -0
- package/src/browser/defaults/scrubFields.js +59 -0
- package/src/browser/globalSetup.js +1 -41
- package/src/browser/rollbar.js +16 -544
- package/src/browser/shim.js +2 -1
- package/src/browser/telemetry.js +33 -17
- package/src/browser/transforms.js +28 -5
- package/src/browser/transport.js +13 -10
- package/src/browser/wrapGlobals.js +41 -0
- package/src/defaults.js +9 -0
- package/src/predicates.js +1 -0
- package/src/react-native/rollbar.js +9 -3
- package/src/react-native/transforms.js +7 -1
- package/src/react-native/transport.js +16 -10
- package/src/rollbar.js +9 -10
- package/src/scrub.js +93 -0
- package/src/server/rollbar.js +6 -2
- package/src/server/sourceMap/stackTrace.js +1 -2
- package/src/server/transforms.js +18 -4
- package/src/transforms.js +0 -1
- package/src/truncation.js +3 -2
- package/src/utility/traverse.js +38 -0
- package/src/utility.js +25 -107
- package/test/api.test.js +2 -0
- package/test/apiUtility.test.js +2 -1
- package/test/browser.core.test.js +555 -0
- package/test/browser.rollbar.test.js +116 -13
- package/test/browser.transforms.test.js +22 -2
- package/test/browser.transport.test.js +5 -2
- package/test/react-native.transport.test.js +5 -1
- package/test/server.transforms.test.js +70 -0
- package/test/truncation.test.js +2 -0
- 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
|
|
52
|
+
return traverse(v, truncator, seen);
|
|
52
53
|
default:
|
|
53
54
|
return v;
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
|
-
payload =
|
|
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
|
-
|
|
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
package/test/apiUtility.test.js
CHANGED
|
@@ -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
|
-
|