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.
- package/.github/workflows/ci.yml +32 -10
- package/.lgtm.yml +7 -7
- package/.prettierignore +18 -0
- package/.vscode/settings.json +39 -0
- package/CHANGELOG.md +121 -35
- package/Gruntfile.js +51 -71
- package/README.md +2 -4
- package/bower.json +1 -3
- package/defaults.js +17 -5
- package/dist/plugins/jquery.min.js +1 -1
- package/dist/rollbar.js +5699 -5052
- 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 +5704 -5062
- 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 +5693 -5052
- 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 +5704 -5063
- 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/docs/extension-exceptions.md +35 -30
- package/docs/migration_v0_to_v1.md +41 -38
- package/index.d.ts +270 -231
- package/karma.conf.js +16 -34
- package/package.json +21 -17
- package/prettier.config.js +7 -0
- package/src/api.js +21 -10
- package/src/apiUtility.js +12 -8
- package/src/browser/core.js +103 -65
- 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/rollbar.js +1 -1
- 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 -354
- package/src/browser/transforms.js +46 -27
- package/src/browser/transport/fetch.js +16 -14
- package/src/browser/transport/xhr.js +29 -13
- package/src/browser/transport.js +82 -25
- 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 +71 -39
- 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 +22 -13
- 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 +133 -55
- 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 +92 -28
- 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 +89 -52
- package/test/api.test.js +31 -29
- package/test/apiUtility.test.js +43 -44
- package/test/browser.core.test.js +141 -131
- package/test/browser.domUtility.test.js +52 -35
- package/test/browser.predicates.test.js +13 -13
- package/test/browser.rollbar.test.js +597 -503
- package/test/browser.telemetry.test.js +76 -0
- package/test/browser.transforms.test.js +146 -128
- package/test/browser.transport.test.js +54 -46
- package/test/browser.url.test.js +12 -11
- package/test/fixtures/locals.fixtures.js +245 -126
- package/test/notifier.test.js +90 -78
- package/test/predicates.test.js +260 -214
- package/test/queue.test.js +230 -214
- package/test/rateLimiter.test.js +50 -42
- package/test/react-native.rollbar.test.js +149 -115
- package/test/react-native.transforms.test.js +21 -23
- package/test/react-native.transport.test.js +23 -11
- package/test/server.lambda.test.js +70 -53
- package/test/server.locals.test.js +437 -210
- package/test/server.parser.test.js +32 -26
- package/test/server.predicates.test.js +45 -43
- package/test/server.rollbar.test.js +311 -259
- package/test/server.telemetry.test.js +208 -83
- package/test/server.transforms.test.js +455 -361
- package/test/server.transport.test.js +144 -76
- package/test/telemetry.test.js +46 -37
- package/test/transforms.test.js +68 -66
- package/test/truncation.test.js +55 -53
- package/test/utility.test.js +266 -222
- package/webpack.config.js +46 -43
- package/.gitmodules +0 -3
- package/browserstack.browsers.js +0 -153
- package/browserstack.browsers.json +0 -4384
|
@@ -3,7 +3,7 @@ var errorParser = require('../errorParser');
|
|
|
3
3
|
var logger = require('./logger');
|
|
4
4
|
|
|
5
5
|
function handleDomException(item, options, callback) {
|
|
6
|
-
if(item.err && errorParser.Stack(item.err).name === 'DOMException') {
|
|
6
|
+
if (item.err && errorParser.Stack(item.err).name === 'DOMException') {
|
|
7
7
|
var originalError = new Error();
|
|
8
8
|
originalError.name = item.err.name;
|
|
9
9
|
originalError.message = item.err.message;
|
|
@@ -18,7 +18,9 @@ function handleItemWithError(item, options, callback) {
|
|
|
18
18
|
item.data = item.data || {};
|
|
19
19
|
if (item.err) {
|
|
20
20
|
try {
|
|
21
|
-
item.stackInfo =
|
|
21
|
+
item.stackInfo =
|
|
22
|
+
item.err._savedStackTrace ||
|
|
23
|
+
errorParser.parse(item.err, item.skipFrames);
|
|
22
24
|
|
|
23
25
|
if (options.addErrorContext) {
|
|
24
26
|
addErrorContext(item);
|
|
@@ -26,7 +28,11 @@ function handleItemWithError(item, options, callback) {
|
|
|
26
28
|
} catch (e) {
|
|
27
29
|
logger.error('Error while parsing the error object.', e);
|
|
28
30
|
try {
|
|
29
|
-
item.message =
|
|
31
|
+
item.message =
|
|
32
|
+
item.err.message ||
|
|
33
|
+
item.err.description ||
|
|
34
|
+
item.message ||
|
|
35
|
+
String(item.err);
|
|
30
36
|
} catch (e2) {
|
|
31
37
|
item.message = String(item.err) || String(e2);
|
|
32
38
|
}
|
|
@@ -58,7 +64,8 @@ function ensureItemHasSomethingToSay(item, options, callback) {
|
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
function addBaseInfo(item, options, callback) {
|
|
61
|
-
var environment =
|
|
67
|
+
var environment =
|
|
68
|
+
(options.payload && options.payload.environment) || options.environment;
|
|
62
69
|
item.data = _.merge(item.data, {
|
|
63
70
|
environment: environment,
|
|
64
71
|
level: item.level,
|
|
@@ -70,15 +77,15 @@ function addBaseInfo(item, options, callback) {
|
|
|
70
77
|
uuid: item.uuid,
|
|
71
78
|
notifier: {
|
|
72
79
|
name: 'rollbar-browser-js',
|
|
73
|
-
version: options.version
|
|
80
|
+
version: options.version,
|
|
74
81
|
},
|
|
75
|
-
custom: item.custom
|
|
82
|
+
custom: item.custom,
|
|
76
83
|
});
|
|
77
84
|
callback(null, item);
|
|
78
85
|
}
|
|
79
86
|
|
|
80
87
|
function addRequestInfo(window) {
|
|
81
|
-
return function(item, options, callback) {
|
|
88
|
+
return function (item, options, callback) {
|
|
82
89
|
var requestInfo = {};
|
|
83
90
|
|
|
84
91
|
if (window && window.location) {
|
|
@@ -103,7 +110,7 @@ function addRequestInfo(window) {
|
|
|
103
110
|
}
|
|
104
111
|
|
|
105
112
|
function addClientInfo(window) {
|
|
106
|
-
return function(item, options, callback) {
|
|
113
|
+
return function (item, options, callback) {
|
|
107
114
|
if (!window) {
|
|
108
115
|
return callback(null, item);
|
|
109
116
|
}
|
|
@@ -118,25 +125,25 @@ function addClientInfo(window) {
|
|
|
118
125
|
cookie_enabled: nav.cookieEnabled,
|
|
119
126
|
screen: {
|
|
120
127
|
width: scr.width,
|
|
121
|
-
height: scr.height
|
|
122
|
-
}
|
|
123
|
-
}
|
|
128
|
+
height: scr.height,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
124
131
|
});
|
|
125
132
|
callback(null, item);
|
|
126
133
|
};
|
|
127
134
|
}
|
|
128
135
|
|
|
129
136
|
function addPluginInfo(window) {
|
|
130
|
-
return function(item, options, callback) {
|
|
137
|
+
return function (item, options, callback) {
|
|
131
138
|
if (!window || !window.navigator) {
|
|
132
139
|
return callback(null, item);
|
|
133
140
|
}
|
|
134
141
|
var plugins = [];
|
|
135
142
|
var navPlugins = window.navigator.plugins || [];
|
|
136
143
|
var cur;
|
|
137
|
-
for (var i=0, l=navPlugins.length; i < l; ++i) {
|
|
144
|
+
for (var i = 0, l = navPlugins.length; i < l; ++i) {
|
|
138
145
|
cur = navPlugins[i];
|
|
139
|
-
plugins.push({name: cur.name, description: cur.description});
|
|
146
|
+
plugins.push({ name: cur.name, description: cur.description });
|
|
140
147
|
}
|
|
141
148
|
_.set(item, 'data.client.javascript.plugins', plugins);
|
|
142
149
|
callback(null, item);
|
|
@@ -163,21 +170,26 @@ function addBodyMessage(item, options, callback) {
|
|
|
163
170
|
message = 'Item sent with null or missing arguments.';
|
|
164
171
|
}
|
|
165
172
|
var result = {
|
|
166
|
-
body: message
|
|
173
|
+
body: message,
|
|
167
174
|
};
|
|
168
175
|
|
|
169
176
|
if (custom) {
|
|
170
177
|
result.extra = _.merge(custom);
|
|
171
178
|
}
|
|
172
179
|
|
|
173
|
-
_.set(item, 'data.body', {message: result});
|
|
180
|
+
_.set(item, 'data.body', { message: result });
|
|
174
181
|
callback(null, item);
|
|
175
182
|
}
|
|
176
183
|
|
|
177
184
|
function stackFromItem(item) {
|
|
178
185
|
// Transform a TraceKit stackInfo object into a Rollbar trace
|
|
179
186
|
var stack = item.stackInfo.stack;
|
|
180
|
-
if (
|
|
187
|
+
if (
|
|
188
|
+
stack &&
|
|
189
|
+
stack.length === 0 &&
|
|
190
|
+
item._unhandledStackInfo &&
|
|
191
|
+
item._unhandledStackInfo.stack
|
|
192
|
+
) {
|
|
181
193
|
stack = item._unhandledStackInfo.stack;
|
|
182
194
|
}
|
|
183
195
|
return stack;
|
|
@@ -193,7 +205,7 @@ function addBodyTraceChain(item, options, callback) {
|
|
|
193
205
|
traces.push(trace);
|
|
194
206
|
}
|
|
195
207
|
|
|
196
|
-
_.set(item, 'data.body', {trace_chain: traces});
|
|
208
|
+
_.set(item, 'data.body', { trace_chain: traces });
|
|
197
209
|
callback(null, item);
|
|
198
210
|
}
|
|
199
211
|
|
|
@@ -202,7 +214,7 @@ function addBodyTrace(item, options, callback) {
|
|
|
202
214
|
|
|
203
215
|
if (stack) {
|
|
204
216
|
var trace = buildTrace(item, item.stackInfo, options);
|
|
205
|
-
_.set(item, 'data.body', {trace: trace});
|
|
217
|
+
_.set(item, 'data.body', { trace: trace });
|
|
206
218
|
callback(null, item);
|
|
207
219
|
} else {
|
|
208
220
|
var stackInfo = item.stackInfo;
|
|
@@ -225,9 +237,9 @@ function buildTrace(item, stackInfo, options) {
|
|
|
225
237
|
var message = guess[1];
|
|
226
238
|
var trace = {
|
|
227
239
|
exception: {
|
|
228
|
-
|
|
229
|
-
message: message
|
|
230
|
-
}
|
|
240
|
+
class: className,
|
|
241
|
+
message: message,
|
|
242
|
+
},
|
|
231
243
|
};
|
|
232
244
|
|
|
233
245
|
if (description) {
|
|
@@ -253,13 +265,20 @@ function buildTrace(item, stackInfo, options) {
|
|
|
253
265
|
frame = {
|
|
254
266
|
filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',
|
|
255
267
|
lineno: stackFrame.line || null,
|
|
256
|
-
method:
|
|
257
|
-
|
|
268
|
+
method:
|
|
269
|
+
!stackFrame.func || stackFrame.func === '?'
|
|
270
|
+
? '[anonymous]'
|
|
271
|
+
: stackFrame.func,
|
|
272
|
+
colno: stackFrame.column,
|
|
258
273
|
};
|
|
259
274
|
if (options.sendFrameUrl) {
|
|
260
275
|
frame.url = stackFrame.url;
|
|
261
276
|
}
|
|
262
|
-
if (
|
|
277
|
+
if (
|
|
278
|
+
frame.method &&
|
|
279
|
+
frame.method.endsWith &&
|
|
280
|
+
frame.method.endsWith('_rollbar_wrapped')
|
|
281
|
+
) {
|
|
263
282
|
continue;
|
|
264
283
|
}
|
|
265
284
|
|
|
@@ -322,7 +341,7 @@ function addScrubber(scrubFn) {
|
|
|
322
341
|
item.data = scrubFn(item.data, scrubFields, scrubPaths);
|
|
323
342
|
}
|
|
324
343
|
callback(null, item);
|
|
325
|
-
}
|
|
344
|
+
};
|
|
326
345
|
}
|
|
327
346
|
|
|
328
347
|
module.exports = {
|
|
@@ -334,5 +353,5 @@ module.exports = {
|
|
|
334
353
|
addClientInfo: addClientInfo,
|
|
335
354
|
addPluginInfo: addPluginInfo,
|
|
336
355
|
addBody: addBody,
|
|
337
|
-
addScrubber: addScrubber
|
|
356
|
+
addScrubber: addScrubber,
|
|
338
357
|
};
|
|
@@ -5,9 +5,11 @@ function makeFetchRequest(accessToken, url, method, data, callback, timeout) {
|
|
|
5
5
|
var controller;
|
|
6
6
|
var timeoutId;
|
|
7
7
|
|
|
8
|
-
if(_.isFiniteNumber(timeout)) {
|
|
8
|
+
if (_.isFiniteNumber(timeout)) {
|
|
9
9
|
controller = new AbortController();
|
|
10
|
-
timeoutId = setTimeout(function () {
|
|
10
|
+
timeoutId = setTimeout(function () {
|
|
11
|
+
controller.abort();
|
|
12
|
+
}, timeout);
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
fetch(url, {
|
|
@@ -15,21 +17,21 @@ function makeFetchRequest(accessToken, url, method, data, callback, timeout) {
|
|
|
15
17
|
headers: {
|
|
16
18
|
'Content-Type': 'application/json',
|
|
17
19
|
'X-Rollbar-Access-Token': accessToken,
|
|
18
|
-
signal: controller && controller.signal
|
|
20
|
+
signal: controller && controller.signal,
|
|
19
21
|
},
|
|
20
22
|
body: data,
|
|
21
23
|
})
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
.then(function (response) {
|
|
25
|
+
if (timeoutId) clearTimeout(timeoutId);
|
|
26
|
+
return response.json();
|
|
27
|
+
})
|
|
28
|
+
.then(function (data) {
|
|
29
|
+
callback(null, data);
|
|
30
|
+
})
|
|
31
|
+
.catch(function (error) {
|
|
32
|
+
logger.error(error.message);
|
|
33
|
+
callback(error);
|
|
34
|
+
});
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
module.exports = makeFetchRequest;
|
|
@@ -3,7 +3,15 @@
|
|
|
3
3
|
var _ = require('../../utility');
|
|
4
4
|
var logger = require('../logger');
|
|
5
5
|
|
|
6
|
-
function makeXhrRequest(
|
|
6
|
+
function makeXhrRequest(
|
|
7
|
+
accessToken,
|
|
8
|
+
url,
|
|
9
|
+
method,
|
|
10
|
+
data,
|
|
11
|
+
callback,
|
|
12
|
+
requestFactory,
|
|
13
|
+
timeout,
|
|
14
|
+
) {
|
|
7
15
|
var request;
|
|
8
16
|
if (requestFactory) {
|
|
9
17
|
request = requestFactory();
|
|
@@ -16,7 +24,7 @@ function makeXhrRequest(accessToken, url, method, data, callback, requestFactory
|
|
|
16
24
|
}
|
|
17
25
|
try {
|
|
18
26
|
try {
|
|
19
|
-
var onreadystatechange = function() {
|
|
27
|
+
var onreadystatechange = function () {
|
|
20
28
|
try {
|
|
21
29
|
if (onreadystatechange && request.readyState === 4) {
|
|
22
30
|
onreadystatechange = undefined;
|
|
@@ -28,7 +36,8 @@ function makeXhrRequest(accessToken, url, method, data, callback, requestFactory
|
|
|
28
36
|
} else if (_isNormalFailure(request)) {
|
|
29
37
|
if (request.status === 403) {
|
|
30
38
|
// likely caused by using a server access token
|
|
31
|
-
var message =
|
|
39
|
+
var message =
|
|
40
|
+
parseResponse.value && parseResponse.value.message;
|
|
32
41
|
logger.error(message);
|
|
33
42
|
}
|
|
34
43
|
// return valid http status codes
|
|
@@ -37,7 +46,8 @@ function makeXhrRequest(accessToken, url, method, data, callback, requestFactory
|
|
|
37
46
|
// IE will return a status 12000+ on some sort of connection failure,
|
|
38
47
|
// so we return a blank error
|
|
39
48
|
// http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx
|
|
40
|
-
var msg =
|
|
49
|
+
var msg =
|
|
50
|
+
'XHR response had no status code (likely connection failure)';
|
|
41
51
|
callback(_newRetriableError(msg));
|
|
42
52
|
}
|
|
43
53
|
}
|
|
@@ -61,7 +71,7 @@ function makeXhrRequest(accessToken, url, method, data, callback, requestFactory
|
|
|
61
71
|
request.setRequestHeader('X-Rollbar-Access-Token', accessToken);
|
|
62
72
|
}
|
|
63
73
|
|
|
64
|
-
if(_.isFiniteNumber(timeout)) {
|
|
74
|
+
if (_.isFiniteNumber(timeout)) {
|
|
65
75
|
request.timeout = timeout;
|
|
66
76
|
}
|
|
67
77
|
|
|
@@ -70,31 +80,37 @@ function makeXhrRequest(accessToken, url, method, data, callback, requestFactory
|
|
|
70
80
|
} catch (e1) {
|
|
71
81
|
// Sending using the normal xmlhttprequest object didn't work, try XDomainRequest
|
|
72
82
|
if (typeof XDomainRequest !== 'undefined') {
|
|
73
|
-
|
|
74
83
|
// Assume we are in a really old browser which has a bunch of limitations:
|
|
75
84
|
// http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
|
|
76
85
|
|
|
77
86
|
// Extreme paranoia: if we have XDomainRequest then we have a window, but just in case
|
|
78
87
|
if (!window || !window.location) {
|
|
79
|
-
return callback(
|
|
88
|
+
return callback(
|
|
89
|
+
new Error(
|
|
90
|
+
'No window available during request, unknown environment',
|
|
91
|
+
),
|
|
92
|
+
);
|
|
80
93
|
}
|
|
81
94
|
|
|
82
95
|
// If the current page is http, try and send over http
|
|
83
|
-
if (
|
|
96
|
+
if (
|
|
97
|
+
window.location.href.substring(0, 5) === 'http:' &&
|
|
98
|
+
url.substring(0, 5) === 'https'
|
|
99
|
+
) {
|
|
84
100
|
url = 'http' + url.substring(5);
|
|
85
101
|
}
|
|
86
102
|
|
|
87
103
|
var xdomainrequest = new XDomainRequest();
|
|
88
|
-
xdomainrequest.onprogress = function() {};
|
|
89
|
-
xdomainrequest.ontimeout = function() {
|
|
104
|
+
xdomainrequest.onprogress = function () {};
|
|
105
|
+
xdomainrequest.ontimeout = function () {
|
|
90
106
|
var msg = 'Request timed out';
|
|
91
107
|
var code = 'ETIMEDOUT';
|
|
92
108
|
callback(_newRetriableError(msg, code));
|
|
93
109
|
};
|
|
94
|
-
xdomainrequest.onerror = function() {
|
|
110
|
+
xdomainrequest.onerror = function () {
|
|
95
111
|
callback(new Error('Error during request'));
|
|
96
112
|
};
|
|
97
|
-
xdomainrequest.onload = function() {
|
|
113
|
+
xdomainrequest.onload = function () {
|
|
98
114
|
var parseResponse = _.jsonParse(xdomainrequest.responseText);
|
|
99
115
|
callback(parseResponse.error, parseResponse.value);
|
|
100
116
|
};
|
|
@@ -124,7 +140,7 @@ function _createXMLHTTPObject() {
|
|
|
124
140
|
},
|
|
125
141
|
function () {
|
|
126
142
|
return new ActiveXObject('Microsoft.XMLHTTP');
|
|
127
|
-
}
|
|
143
|
+
},
|
|
128
144
|
];
|
|
129
145
|
var xmlhttp;
|
|
130
146
|
var i;
|
package/src/browser/transport.js
CHANGED
|
@@ -24,22 +24,41 @@ function Transport(truncation) {
|
|
|
24
24
|
this.truncation = truncation;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
Transport.prototype.get = function(
|
|
27
|
+
Transport.prototype.get = function (
|
|
28
|
+
accessToken,
|
|
29
|
+
options,
|
|
30
|
+
params,
|
|
31
|
+
callback,
|
|
32
|
+
requestFactory,
|
|
33
|
+
) {
|
|
28
34
|
if (!callback || !_.isFunction(callback)) {
|
|
29
|
-
callback = function() {};
|
|
35
|
+
callback = function () {};
|
|
30
36
|
}
|
|
31
37
|
_.addParamsAndAccessTokenToPath(accessToken, options, params);
|
|
32
38
|
|
|
33
39
|
var method = 'GET';
|
|
34
40
|
var url = _.formatUrl(options);
|
|
35
41
|
this._makeZoneRequest(
|
|
36
|
-
accessToken,
|
|
42
|
+
accessToken,
|
|
43
|
+
url,
|
|
44
|
+
method,
|
|
45
|
+
null,
|
|
46
|
+
callback,
|
|
47
|
+
requestFactory,
|
|
48
|
+
options.timeout,
|
|
49
|
+
options.transport,
|
|
37
50
|
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
Transport.prototype.post = function(
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
Transport.prototype.post = function (
|
|
54
|
+
accessToken,
|
|
55
|
+
options,
|
|
56
|
+
payload,
|
|
57
|
+
callback,
|
|
58
|
+
requestFactory,
|
|
59
|
+
) {
|
|
41
60
|
if (!callback || !_.isFunction(callback)) {
|
|
42
|
-
callback = function() {};
|
|
61
|
+
callback = function () {};
|
|
43
62
|
}
|
|
44
63
|
|
|
45
64
|
if (!payload) {
|
|
@@ -50,7 +69,7 @@ Transport.prototype.post = function(accessToken, options, payload, callback, req
|
|
|
50
69
|
if (this.truncation) {
|
|
51
70
|
stringifyResult = this.truncation.truncate(payload);
|
|
52
71
|
} else {
|
|
53
|
-
stringifyResult = _.stringify(payload)
|
|
72
|
+
stringifyResult = _.stringify(payload);
|
|
54
73
|
}
|
|
55
74
|
if (stringifyResult.error) {
|
|
56
75
|
return callback(stringifyResult.error);
|
|
@@ -60,29 +79,50 @@ Transport.prototype.post = function(accessToken, options, payload, callback, req
|
|
|
60
79
|
var method = 'POST';
|
|
61
80
|
var url = _.formatUrl(options);
|
|
62
81
|
this._makeZoneRequest(
|
|
63
|
-
accessToken,
|
|
82
|
+
accessToken,
|
|
83
|
+
url,
|
|
84
|
+
method,
|
|
85
|
+
writeData,
|
|
86
|
+
callback,
|
|
87
|
+
requestFactory,
|
|
88
|
+
options.timeout,
|
|
89
|
+
options.transport,
|
|
64
90
|
);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
Transport.prototype.postJsonPayload = function (
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
Transport.prototype.postJsonPayload = function (
|
|
94
|
+
accessToken,
|
|
95
|
+
options,
|
|
96
|
+
jsonPayload,
|
|
97
|
+
callback,
|
|
98
|
+
requestFactory,
|
|
99
|
+
) {
|
|
68
100
|
if (!callback || !_.isFunction(callback)) {
|
|
69
|
-
callback = function() {};
|
|
101
|
+
callback = function () {};
|
|
70
102
|
}
|
|
71
103
|
|
|
72
104
|
var method = 'POST';
|
|
73
105
|
var url = _.formatUrl(options);
|
|
74
106
|
this._makeZoneRequest(
|
|
75
|
-
accessToken,
|
|
107
|
+
accessToken,
|
|
108
|
+
url,
|
|
109
|
+
method,
|
|
110
|
+
jsonPayload,
|
|
111
|
+
callback,
|
|
112
|
+
requestFactory,
|
|
113
|
+
options.timeout,
|
|
114
|
+
options.transport,
|
|
76
115
|
);
|
|
77
|
-
}
|
|
78
|
-
|
|
116
|
+
};
|
|
79
117
|
|
|
80
118
|
// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope
|
|
81
119
|
// so Angular change detection isn't triggered on each API call.
|
|
82
120
|
// This is the equivalent of runOutsideAngular().
|
|
83
121
|
//
|
|
84
122
|
Transport.prototype._makeZoneRequest = function () {
|
|
85
|
-
var gWindow =
|
|
123
|
+
var gWindow =
|
|
124
|
+
(typeof window != 'undefined' && window) ||
|
|
125
|
+
(typeof self != 'undefined' && self);
|
|
86
126
|
var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;
|
|
87
127
|
var args = Array.prototype.slice.call(arguments);
|
|
88
128
|
|
|
@@ -95,31 +135,48 @@ Transport.prototype._makeZoneRequest = function () {
|
|
|
95
135
|
} else {
|
|
96
136
|
this._makeRequest.apply(undefined, args);
|
|
97
137
|
}
|
|
98
|
-
}
|
|
138
|
+
};
|
|
99
139
|
|
|
100
140
|
Transport.prototype._makeRequest = function (
|
|
101
|
-
accessToken,
|
|
141
|
+
accessToken,
|
|
142
|
+
url,
|
|
143
|
+
method,
|
|
144
|
+
data,
|
|
145
|
+
callback,
|
|
146
|
+
requestFactory,
|
|
147
|
+
timeout,
|
|
148
|
+
transport,
|
|
102
149
|
) {
|
|
103
150
|
if (typeof RollbarProxy !== 'undefined') {
|
|
104
151
|
return _proxyRequest(data, callback);
|
|
105
152
|
}
|
|
106
153
|
|
|
107
154
|
if (transport === 'fetch') {
|
|
108
|
-
makeFetchRequest(accessToken, url, method, data, callback, timeout)
|
|
155
|
+
makeFetchRequest(accessToken, url, method, data, callback, timeout);
|
|
109
156
|
} else {
|
|
110
|
-
makeXhrRequest(
|
|
157
|
+
makeXhrRequest(
|
|
158
|
+
accessToken,
|
|
159
|
+
url,
|
|
160
|
+
method,
|
|
161
|
+
data,
|
|
162
|
+
callback,
|
|
163
|
+
requestFactory,
|
|
164
|
+
timeout,
|
|
165
|
+
);
|
|
111
166
|
}
|
|
112
|
-
}
|
|
167
|
+
};
|
|
113
168
|
|
|
114
169
|
/* global RollbarProxy */
|
|
115
170
|
function _proxyRequest(json, callback) {
|
|
116
171
|
var rollbarProxy = new RollbarProxy();
|
|
117
172
|
rollbarProxy.sendJsonPayload(
|
|
118
173
|
json,
|
|
119
|
-
function(_msg) {
|
|
120
|
-
|
|
174
|
+
function (_msg) {
|
|
175
|
+
/* do nothing */
|
|
176
|
+
}, // eslint-disable-line no-unused-vars
|
|
177
|
+
function (err) {
|
|
121
178
|
callback(new Error(err));
|
|
122
|
-
}
|
|
179
|
+
},
|
|
123
180
|
);
|
|
124
181
|
}
|
|
125
182
|
|
package/src/browser/url.js
CHANGED
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
// See https://nodejs.org/docs/latest/api/url.html
|
|
2
2
|
function parse(url) {
|
|
3
3
|
var result = {
|
|
4
|
-
protocol: null,
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
protocol: null,
|
|
5
|
+
auth: null,
|
|
6
|
+
host: null,
|
|
7
|
+
path: null,
|
|
8
|
+
hash: null,
|
|
9
|
+
href: url,
|
|
10
|
+
hostname: null,
|
|
11
|
+
port: null,
|
|
12
|
+
pathname: null,
|
|
13
|
+
search: null,
|
|
14
|
+
query: null,
|
|
7
15
|
};
|
|
8
16
|
|
|
9
17
|
var i, last;
|
|
10
18
|
i = url.indexOf('//');
|
|
11
19
|
if (i !== -1) {
|
|
12
|
-
result.protocol = url.substring(0,i);
|
|
13
|
-
last = i+2;
|
|
20
|
+
result.protocol = url.substring(0, i);
|
|
21
|
+
last = i + 2;
|
|
14
22
|
} else {
|
|
15
23
|
last = 0;
|
|
16
24
|
}
|
|
17
|
-
|
|
25
|
+
|
|
18
26
|
i = url.indexOf('@', last);
|
|
19
27
|
if (i !== -1) {
|
|
20
28
|
result.auth = url.substring(last, i);
|
|
21
|
-
last = i+1;
|
|
29
|
+
last = i + 1;
|
|
22
30
|
}
|
|
23
31
|
|
|
24
32
|
i = url.indexOf('/', last);
|
|
@@ -75,5 +83,5 @@ function parse(url) {
|
|
|
75
83
|
}
|
|
76
84
|
|
|
77
85
|
module.exports = {
|
|
78
|
-
parse: parse
|
|
86
|
+
parse: parse,
|
|
79
87
|
};
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
function wrapGlobals(window, handler, shim) {
|
|
2
|
-
if (!window) {
|
|
2
|
+
if (!window) {
|
|
3
|
+
return;
|
|
4
|
+
}
|
|
3
5
|
// Adapted from https://github.com/bugsnag/bugsnag-js
|
|
4
|
-
var globals =
|
|
6
|
+
var globals =
|
|
7
|
+
'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(
|
|
8
|
+
',',
|
|
9
|
+
);
|
|
5
10
|
var i, global;
|
|
6
11
|
for (i = 0; i < globals.length; ++i) {
|
|
7
12
|
global = globals[i];
|
|
@@ -13,12 +18,18 @@ function wrapGlobals(window, handler, shim) {
|
|
|
13
18
|
}
|
|
14
19
|
|
|
15
20
|
function _extendListenerPrototype(handler, prototype, shim) {
|
|
16
|
-
if (
|
|
21
|
+
if (
|
|
22
|
+
prototype.hasOwnProperty &&
|
|
23
|
+
prototype.hasOwnProperty('addEventListener')
|
|
24
|
+
) {
|
|
17
25
|
var oldAddEventListener = prototype.addEventListener;
|
|
18
|
-
while (
|
|
26
|
+
while (
|
|
27
|
+
oldAddEventListener._rollbarOldAdd &&
|
|
28
|
+
oldAddEventListener.belongsToShim
|
|
29
|
+
) {
|
|
19
30
|
oldAddEventListener = oldAddEventListener._rollbarOldAdd;
|
|
20
31
|
}
|
|
21
|
-
var addFn = function(event, callback, bubble) {
|
|
32
|
+
var addFn = function (event, callback, bubble) {
|
|
22
33
|
oldAddEventListener.call(this, event, handler.wrap(callback), bubble);
|
|
23
34
|
};
|
|
24
35
|
addFn._rollbarOldAdd = oldAddEventListener;
|
|
@@ -26,11 +37,19 @@ function _extendListenerPrototype(handler, prototype, shim) {
|
|
|
26
37
|
prototype.addEventListener = addFn;
|
|
27
38
|
|
|
28
39
|
var oldRemoveEventListener = prototype.removeEventListener;
|
|
29
|
-
while (
|
|
40
|
+
while (
|
|
41
|
+
oldRemoveEventListener._rollbarOldRemove &&
|
|
42
|
+
oldRemoveEventListener.belongsToShim
|
|
43
|
+
) {
|
|
30
44
|
oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;
|
|
31
45
|
}
|
|
32
|
-
var removeFn = function(event, callback, bubble) {
|
|
33
|
-
oldRemoveEventListener.call(
|
|
46
|
+
var removeFn = function (event, callback, bubble) {
|
|
47
|
+
oldRemoveEventListener.call(
|
|
48
|
+
this,
|
|
49
|
+
event,
|
|
50
|
+
(callback && callback._rollbar_wrapped) || callback,
|
|
51
|
+
bubble,
|
|
52
|
+
);
|
|
34
53
|
};
|
|
35
54
|
removeFn._rollbarOldRemove = oldRemoveEventListener;
|
|
36
55
|
removeFn.belongsToShim = shim;
|
package/src/defaults.js
CHANGED