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,57 +3,56 @@
3
3
  /* globals it */
4
4
  /* globals sinon */
5
5
 
6
- var u = require('../src/apiUtility');
7
- var utility = require('../src/utility');
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(token, data);
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(token, data);
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(token, data);
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);