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.
- package/.cursor/rules/guidelines.mdc +154 -0
- package/.github/workflows/ci.yml +32 -12
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/CLAUDE.md +201 -0
- package/Gruntfile.js +101 -48
- package/Makefile +3 -3
- package/README.md +2 -4
- package/SECURITY.md +5 -0
- package/babel.config.json +9 -0
- package/bower.json +1 -3
- package/codex.md +148 -0
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +18748 -5375
- package/dist/rollbar.js.map +1 -1
- package/dist/rollbar.min.js +2 -1
- package/dist/rollbar.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.min.js.map +1 -1
- package/dist/rollbar.named-amd.js +19368 -6000
- package/dist/rollbar.named-amd.js.map +1 -1
- package/dist/rollbar.named-amd.min.js +3 -1
- package/dist/rollbar.named-amd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.named-amd.min.js.map +1 -1
- package/dist/rollbar.noconflict.umd.js +18749 -5380
- package/dist/rollbar.noconflict.umd.js.map +1 -1
- package/dist/rollbar.noconflict.umd.min.js +3 -1
- package/dist/rollbar.noconflict.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.noconflict.umd.min.js.map +1 -1
- package/dist/rollbar.snippet.js +1 -1
- package/dist/rollbar.umd.js +19367 -6000
- package/dist/rollbar.umd.js.map +1 -1
- package/dist/rollbar.umd.min.js +3 -1
- package/dist/rollbar.umd.min.js.LICENSE.txt +1 -0
- package/dist/rollbar.umd.min.js.map +1 -1
- package/docs/extension-exceptions.md +35 -30
- package/docs/migration_v0_to_v1.md +41 -38
- package/eslint.config.mjs +33 -0
- package/get_versions.js +33 -0
- package/index.d.ts +270 -231
- package/karma.conf.js +18 -27
- package/package.json +21 -21
- package/prettier.config.js +7 -0
- package/src/api.js +78 -14
- package/src/apiUtility.js +14 -11
- package/src/browser/core.js +138 -72
- package/src/browser/defaults/scrubFields.js +3 -3
- package/src/browser/detection.js +7 -8
- package/src/browser/domUtility.js +18 -8
- package/src/browser/globalSetup.js +12 -6
- package/src/browser/logger.js +1 -1
- package/src/browser/plugins/jquery.js +35 -35
- package/src/browser/predicates.js +1 -1
- package/src/browser/replay/defaults.js +71 -0
- package/src/browser/replay/recorder.js +193 -0
- package/src/browser/replay/replayMap.js +195 -0
- package/src/browser/rollbar.js +12 -8
- package/src/browser/rollbarWrapper.js +8 -5
- package/src/browser/shim.js +43 -19
- package/src/browser/snippet_callback.js +6 -4
- package/src/browser/telemetry.js +573 -361
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +26 -14
- package/src/browser/transport/xhr.js +41 -14
- package/src/browser/transport.js +93 -33
- package/src/browser/url.js +16 -8
- package/src/browser/wrapGlobals.js +27 -8
- package/src/defaults.js +3 -3
- package/src/errorParser.js +14 -11
- package/src/merge.js +32 -23
- package/src/notifier.js +16 -13
- package/src/predicates.js +43 -23
- package/src/queue.js +133 -40
- package/src/rateLimiter.js +59 -18
- package/src/react-native/logger.js +1 -1
- package/src/react-native/rollbar.js +59 -55
- package/src/react-native/transforms.js +13 -9
- package/src/react-native/transport.js +44 -34
- package/src/rollbar.js +72 -21
- package/src/scrub.js +0 -1
- package/src/server/locals.js +69 -39
- package/src/server/logger.js +4 -4
- package/src/server/parser.js +72 -47
- package/src/server/rollbar.js +135 -56
- package/src/server/sourceMap/stackTrace.js +33 -18
- package/src/server/telemetry/urlHelpers.js +9 -11
- package/src/server/telemetry.js +68 -45
- package/src/server/transforms.js +37 -21
- package/src/server/transport.js +62 -32
- package/src/telemetry.js +162 -33
- package/src/tracing/context.js +24 -0
- package/src/tracing/contextManager.js +37 -0
- package/src/tracing/defaults.js +7 -0
- package/src/tracing/exporter.js +188 -0
- package/src/tracing/hrtime.js +98 -0
- package/src/tracing/id.js +24 -0
- package/src/tracing/session.js +55 -0
- package/src/tracing/span.js +92 -0
- package/src/tracing/spanProcessor.js +15 -0
- package/src/tracing/tracer.js +46 -0
- package/src/tracing/tracing.js +89 -0
- package/src/transforms.js +33 -21
- package/src/truncation.js +8 -5
- package/src/utility/headers.js +43 -43
- package/src/utility/replace.js +9 -0
- package/src/utility/traverse.js +1 -1
- package/src/utility.js +123 -52
- package/test/api.test.js +88 -41
- package/test/apiUtility.test.js +48 -50
- package/test/browser.core.test.js +142 -141
- package/test/browser.domUtility.test.js +53 -36
- package/test/browser.predicates.test.js +14 -14
- package/test/browser.replay.recorder.test.js +416 -0
- package/test/browser.rollbar.test.js +655 -515
- package/test/browser.telemetry.test.js +46 -39
- package/test/browser.transforms.test.js +164 -139
- package/test/browser.transport.test.js +59 -50
- package/test/browser.url.test.js +13 -12
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/fixtures/replay/index.js +20 -0
- package/test/fixtures/replay/payloads.fixtures.js +229 -0
- package/test/fixtures/replay/rrwebEvents.fixtures.js +251 -0
- package/test/fixtures/replay/rrwebSyntheticEvents.fixtures.js +328 -0
- package/test/notifier.test.js +91 -79
- package/test/predicates.test.js +261 -215
- package/test/queue.test.js +231 -215
- package/test/rateLimiter.test.js +51 -43
- package/test/react-native.rollbar.test.js +150 -116
- package/test/react-native.transforms.test.js +23 -25
- package/test/react-native.transport.test.js +26 -14
- package/test/replay/index.js +2 -0
- package/test/replay/integration/api.spans.test.js +136 -0
- package/test/replay/integration/e2e.test.js +228 -0
- package/test/replay/integration/index.js +9 -0
- package/test/replay/integration/queue.replayMap.test.js +332 -0
- package/test/replay/integration/replayMap.test.js +163 -0
- package/test/replay/integration/sessionRecording.test.js +390 -0
- package/test/replay/unit/api.postSpans.test.js +150 -0
- package/test/replay/unit/index.js +7 -0
- package/test/replay/unit/queue.replayMap.test.js +225 -0
- package/test/replay/unit/replayMap.test.js +348 -0
- package/test/replay/util/index.js +5 -0
- package/test/replay/util/mockRecordFn.js +80 -0
- package/test/server.lambda.mocha.test.mjs +172 -0
- package/test/server.locals.constructor.mocha.test.mjs +80 -0
- package/test/server.locals.error-handling.mocha.test.mjs +387 -0
- package/test/server.locals.merge.mocha.test.mjs +267 -0
- package/test/server.locals.test-utils.mjs +114 -0
- package/test/server.parser.mocha.test.mjs +87 -0
- package/test/server.predicates.mocha.test.mjs +63 -0
- package/test/server.rollbar.constructor.mocha.test.mjs +199 -0
- package/test/server.rollbar.handlers.mocha.test.mjs +253 -0
- package/test/server.rollbar.logging.mocha.test.mjs +326 -0
- package/test/server.rollbar.misc.mocha.test.mjs +44 -0
- package/test/server.rollbar.test-utils.mjs +57 -0
- package/test/server.telemetry.mocha.test.mjs +377 -0
- package/test/server.transforms.data.mocha.test.mjs +163 -0
- package/test/server.transforms.error.mocha.test.mjs +199 -0
- package/test/server.transforms.request.mocha.test.mjs +208 -0
- package/test/server.transforms.scrub.mocha.test.mjs +140 -0
- package/test/server.transforms.sourcemaps.mocha.test.mjs +122 -0
- package/test/server.transforms.test-utils.mjs +62 -0
- package/test/server.transport.mocha.test.mjs +269 -0
- package/test/telemetry.test.js +178 -38
- package/test/tracing/contextManager.test.js +28 -0
- package/test/tracing/exporter.toPayload.test.js +400 -0
- package/test/tracing/id.test.js +24 -0
- package/test/tracing/span.test.js +183 -0
- package/test/tracing/spanProcessor.test.js +73 -0
- package/test/tracing/tracing.test.js +105 -0
- package/test/transforms.test.js +70 -68
- package/test/truncation.test.js +57 -55
- package/test/utility.test.js +310 -228
- package/webpack.config.js +36 -70
- package/.eslintignore +0 -7
- package/.gitmodules +0 -3
- package/test/server.lambda.test.js +0 -177
- package/test/server.locals.test.js +0 -841
- package/test/server.parser.test.js +0 -72
- package/test/server.predicates.test.js +0 -89
- package/test/server.rollbar.test.js +0 -676
- package/test/server.telemetry.test.js +0 -318
- package/test/server.transforms.test.js +0 -1099
- package/test/server.transport.test.js +0 -201
package/test/apiUtility.test.js
CHANGED
|
@@ -3,57 +3,56 @@
|
|
|
3
3
|
/* globals it */
|
|
4
4
|
/* globals sinon */
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import u from '../src/apiUtility.js';
|
|
7
|
+
import utility from '../src/utility.js';
|
|
8
8
|
utility.setupJSON();
|
|
9
9
|
|
|
10
|
-
describe('buildPayload', function() {
|
|
11
|
-
it('should package up the input into a payload', function() {
|
|
10
|
+
describe('buildPayload', function () {
|
|
11
|
+
it('should package up the input into a payload', function () {
|
|
12
12
|
var token = 'abc123';
|
|
13
|
-
var data = {context: 'not an object', other: 'stuff'};
|
|
14
|
-
var payload = u.buildPayload(
|
|
13
|
+
var data = { context: 'not an object', other: 'stuff' };
|
|
14
|
+
var payload = u.buildPayload(data);
|
|
15
15
|
|
|
16
|
-
expect(payload.access_token).to.eql(token);
|
|
17
16
|
expect(payload.data).to.eql(data);
|
|
18
17
|
});
|
|
19
|
-
it('should stringify context', function() {
|
|
18
|
+
it('should stringify context', function () {
|
|
20
19
|
var token = 'abc123';
|
|
21
|
-
var context = {a: 1, b:'other'};
|
|
20
|
+
var context = { a: 1, b: 'other' };
|
|
22
21
|
var data = {
|
|
23
22
|
context: context,
|
|
24
|
-
other: 'stuff'
|
|
23
|
+
other: 'stuff',
|
|
25
24
|
};
|
|
26
|
-
var payload = u.buildPayload(
|
|
25
|
+
var payload = u.buildPayload(data);
|
|
27
26
|
|
|
28
27
|
expect(payload.data.context).to.not.eql(context);
|
|
29
28
|
expect(payload.data.context).to.eql('{"a":1,"b":"other"}');
|
|
30
29
|
});
|
|
31
|
-
it('should truncate context', function() {
|
|
30
|
+
it('should truncate context', function () {
|
|
32
31
|
var token = 'abc123';
|
|
33
32
|
var context = {};
|
|
34
|
-
for (var i=0; i<35; i++) {
|
|
33
|
+
for (var i = 0; i < 35; i++) {
|
|
35
34
|
context[i] = i;
|
|
36
35
|
}
|
|
37
36
|
var data = {
|
|
38
37
|
context: context,
|
|
39
|
-
other: 'stuff'
|
|
38
|
+
other: 'stuff',
|
|
40
39
|
};
|
|
41
|
-
var payload = u.buildPayload(
|
|
40
|
+
var payload = u.buildPayload(data);
|
|
42
41
|
|
|
43
42
|
expect(payload.data.context).to.not.eql(context);
|
|
44
43
|
expect(payload.data.context.length).to.eql(255);
|
|
45
44
|
});
|
|
46
45
|
});
|
|
47
46
|
|
|
48
|
-
describe('getTransportFromOptions', function() {
|
|
49
|
-
it('should use defaults with not endpoint', function() {
|
|
47
|
+
describe('getTransportFromOptions', function () {
|
|
48
|
+
it('should use defaults with not endpoint', function () {
|
|
50
49
|
var options = {
|
|
51
50
|
not: 'endpoint',
|
|
52
51
|
proxy: {
|
|
53
52
|
host: 'whatver.com',
|
|
54
|
-
port: 9090
|
|
53
|
+
port: 9090,
|
|
55
54
|
},
|
|
56
|
-
timeout: 3000
|
|
55
|
+
timeout: 3000,
|
|
57
56
|
};
|
|
58
57
|
var defaults = {
|
|
59
58
|
hostname: 'api.com',
|
|
@@ -61,10 +60,10 @@ describe('getTransportFromOptions', function() {
|
|
|
61
60
|
path: '/api/1',
|
|
62
61
|
};
|
|
63
62
|
var url = {
|
|
64
|
-
parse: function() {
|
|
63
|
+
parse: function () {
|
|
65
64
|
expect(false).to.be.ok();
|
|
66
65
|
return {};
|
|
67
|
-
}
|
|
66
|
+
},
|
|
68
67
|
};
|
|
69
68
|
var t = u.getTransportFromOptions(options, defaults, url);
|
|
70
69
|
expect(t.hostname).to.eql(defaults.hostname);
|
|
@@ -73,13 +72,13 @@ describe('getTransportFromOptions', function() {
|
|
|
73
72
|
expect(t.proxy).to.eql(options.proxy);
|
|
74
73
|
expect(t.timeout).to.eql(options.timeout);
|
|
75
74
|
});
|
|
76
|
-
it('should parse the endpoint if given', function() {
|
|
75
|
+
it('should parse the endpoint if given', function () {
|
|
77
76
|
var options = {
|
|
78
77
|
endpoint: 'http://whatever.com/api/42',
|
|
79
78
|
proxy: {
|
|
80
79
|
host: 'nope.com',
|
|
81
|
-
port: 9090
|
|
82
|
-
}
|
|
80
|
+
port: 9090,
|
|
81
|
+
},
|
|
83
82
|
};
|
|
84
83
|
var defaults = {
|
|
85
84
|
hostname: 'api.com',
|
|
@@ -88,14 +87,14 @@ describe('getTransportFromOptions', function() {
|
|
|
88
87
|
search: '?abc=456',
|
|
89
88
|
};
|
|
90
89
|
var url = {
|
|
91
|
-
parse: function(endpoint) {
|
|
90
|
+
parse: function (endpoint) {
|
|
92
91
|
expect(endpoint).to.eql(options.endpoint);
|
|
93
92
|
return {
|
|
94
93
|
hostname: 'whatever.com',
|
|
95
94
|
protocol: 'http:',
|
|
96
|
-
pathname: '/api/42'
|
|
95
|
+
pathname: '/api/42',
|
|
97
96
|
};
|
|
98
|
-
}
|
|
97
|
+
},
|
|
99
98
|
};
|
|
100
99
|
var t = u.getTransportFromOptions(options, defaults, url);
|
|
101
100
|
expect(t.hostname).to.not.eql(defaults.hostname);
|
|
@@ -105,7 +104,7 @@ describe('getTransportFromOptions', function() {
|
|
|
105
104
|
expect(t.proxy).to.eql(options.proxy);
|
|
106
105
|
expect(t.timeout).to.eql(undefined);
|
|
107
106
|
});
|
|
108
|
-
describe('getTransportFromOptions', function() {
|
|
107
|
+
describe('getTransportFromOptions', function () {
|
|
109
108
|
var defaults = {
|
|
110
109
|
hostname: 'api.com',
|
|
111
110
|
protocol: 'https:',
|
|
@@ -113,34 +112,34 @@ describe('getTransportFromOptions', function() {
|
|
|
113
112
|
search: '?abc=456',
|
|
114
113
|
};
|
|
115
114
|
var url = {
|
|
116
|
-
parse: function(_) {
|
|
115
|
+
parse: function (_) {
|
|
117
116
|
return {
|
|
118
117
|
hostname: 'whatever.com',
|
|
119
118
|
protocol: 'http:',
|
|
120
|
-
pathname: '/api/42'
|
|
119
|
+
pathname: '/api/42',
|
|
121
120
|
};
|
|
122
|
-
}
|
|
121
|
+
},
|
|
123
122
|
};
|
|
124
|
-
it('should use xhr by default', function(done) {
|
|
123
|
+
it('should use xhr by default', function (done) {
|
|
125
124
|
var options = {};
|
|
126
125
|
var t = u.getTransportFromOptions(options, defaults, url);
|
|
127
126
|
expect(t.transport).to.eql('xhr');
|
|
128
127
|
done();
|
|
129
128
|
});
|
|
130
|
-
it('should use fetch when requested', function(done) {
|
|
131
|
-
var options = {defaultTransport: 'fetch'};
|
|
129
|
+
it('should use fetch when requested', function (done) {
|
|
130
|
+
var options = { defaultTransport: 'fetch' };
|
|
132
131
|
var t = u.getTransportFromOptions(options, defaults, url);
|
|
133
132
|
expect(t.transport).to.eql('fetch');
|
|
134
133
|
done();
|
|
135
134
|
});
|
|
136
|
-
it('should use xhr when requested', function(done) {
|
|
137
|
-
var options = {defaultTransport: 'xhr'};
|
|
135
|
+
it('should use xhr when requested', function (done) {
|
|
136
|
+
var options = { defaultTransport: 'xhr' };
|
|
138
137
|
var t = u.getTransportFromOptions(options, defaults, url);
|
|
139
138
|
expect(t.transport).to.eql('xhr');
|
|
140
139
|
done();
|
|
141
140
|
});
|
|
142
|
-
it('should use xhr when fetch is unavailable', function(done) {
|
|
143
|
-
var options = {defaultTransport: 'fetch'};
|
|
141
|
+
it('should use xhr when fetch is unavailable', function (done) {
|
|
142
|
+
var options = { defaultTransport: 'fetch' };
|
|
144
143
|
var oldFetch = window.fetch;
|
|
145
144
|
self.fetch = undefined;
|
|
146
145
|
var t = u.getTransportFromOptions(options, defaults, url);
|
|
@@ -148,8 +147,8 @@ describe('getTransportFromOptions', function() {
|
|
|
148
147
|
self.fetch = oldFetch;
|
|
149
148
|
done();
|
|
150
149
|
});
|
|
151
|
-
it('should use fetch when xhr is unavailable', function(done) {
|
|
152
|
-
var options = {defaultTransport: 'xhr'};
|
|
150
|
+
it('should use fetch when xhr is unavailable', function (done) {
|
|
151
|
+
var options = { defaultTransport: 'xhr' };
|
|
153
152
|
var oldXhr = window.XMLHttpRequest;
|
|
154
153
|
self.XMLHttpRequest = undefined;
|
|
155
154
|
var t = u.getTransportFromOptions(options, defaults, url);
|
|
@@ -158,15 +157,14 @@ describe('getTransportFromOptions', function() {
|
|
|
158
157
|
done();
|
|
159
158
|
});
|
|
160
159
|
});
|
|
161
|
-
|
|
162
160
|
});
|
|
163
161
|
|
|
164
|
-
describe('transportOptions', function() {
|
|
165
|
-
it('should use the given data if no proxy', function() {
|
|
162
|
+
describe('transportOptions', function () {
|
|
163
|
+
it('should use the given data if no proxy', function () {
|
|
166
164
|
var transport = {
|
|
167
165
|
hostname: 'a.com',
|
|
168
166
|
path: '/api/v1/item/',
|
|
169
|
-
port: 5000
|
|
167
|
+
port: 5000,
|
|
170
168
|
};
|
|
171
169
|
var method = 'GET';
|
|
172
170
|
|
|
@@ -178,16 +176,16 @@ describe('transportOptions', function() {
|
|
|
178
176
|
expect(o.method).to.eql(method);
|
|
179
177
|
expect(o.timeout).to.eql(undefined);
|
|
180
178
|
});
|
|
181
|
-
it('should use the proxy if given', function() {
|
|
179
|
+
it('should use the proxy if given', function () {
|
|
182
180
|
var transport = {
|
|
183
181
|
hostname: 'a.com',
|
|
184
182
|
path: '/api/v1/item/',
|
|
185
183
|
port: 5000,
|
|
186
184
|
proxy: {
|
|
187
185
|
host: 'b.com',
|
|
188
|
-
port: 8080
|
|
186
|
+
port: 8080,
|
|
189
187
|
},
|
|
190
|
-
timeout: 3000
|
|
188
|
+
timeout: 3000,
|
|
191
189
|
};
|
|
192
190
|
var method = 'GET';
|
|
193
191
|
|
|
@@ -201,17 +199,17 @@ describe('transportOptions', function() {
|
|
|
201
199
|
});
|
|
202
200
|
});
|
|
203
201
|
|
|
204
|
-
describe('appendPathToPath', function() {
|
|
202
|
+
describe('appendPathToPath', function () {
|
|
205
203
|
var expSlash = '/api/item/';
|
|
206
204
|
var expNoSlash = '/api/item';
|
|
207
|
-
it('should handle trailing slash in base', function() {
|
|
205
|
+
it('should handle trailing slash in base', function () {
|
|
208
206
|
var base = '/api/';
|
|
209
207
|
expect(u.appendPathToPath(base, '/item/')).to.eql(expSlash);
|
|
210
208
|
expect(u.appendPathToPath(base, '/item')).to.eql(expNoSlash);
|
|
211
209
|
expect(u.appendPathToPath(base, 'item/')).to.eql(expSlash);
|
|
212
210
|
expect(u.appendPathToPath(base, 'item')).to.eql(expNoSlash);
|
|
213
211
|
});
|
|
214
|
-
it('should handle no trailing slash in base', function() {
|
|
212
|
+
it('should handle no trailing slash in base', function () {
|
|
215
213
|
var base = '/api';
|
|
216
214
|
expect(u.appendPathToPath(base, '/item/')).to.eql(expSlash);
|
|
217
215
|
expect(u.appendPathToPath(base, '/item')).to.eql(expNoSlash);
|