bugsnagjs-rails 6.2.0.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 03f954083a51e7a8fabd72aa949b6ceb252e6e18b2da614e951f8e7246fe6433
4
+ data.tar.gz: 512631bee02394063354f74b2567e472b3253b2d09cd08edd2647d336ad97101
5
+ SHA512:
6
+ metadata.gz: 9a33c579d6425e01702116aefd7aa28ea05058909d919c942ec48bc7b8c40bd2e302e7cc79f625fced2ee132e00fa3b2cd37c025d813fd666ee4db21afd2e025
7
+ data.tar.gz: 4ddfeaaf122bbc16a3765ba23b4ab5ef2d6b9fb01156e75d259cd5db797339b6e59cc69b27f3fc38a7f26f3947bf7b3dc9e44ccf65d148cb9f59499a94a2068e
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ pkg/
3
+ Gemfile.lock
4
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 localhostdotdev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,6 @@
1
+ # bugsnagjs-rails
2
+
3
+ - <https://www.npmjs.com/package/bugsnagjs>
4
+ - <https://unpkg.com/bugsnagjs@VERSION/dist/bugsnag.js>
5
+ - `gem 'bugsnagjs-rails`
6
+ - `#= require bugsnag`
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,16 @@
1
+ require_relative 'lib/bugsnagjs-rails/version.rb'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "bugsnagjs-rails"
5
+ s.authors = ["localhostdotdev"]
6
+ s.email = %q{localhostdotdev@protonmail.com}
7
+ s.summary = %q{bugsnag in your js}
8
+ s.homepage = %q{https://github.com/universal-updates/bugsnagjs-rails}
9
+ s.description = %q{bugsnagjs for rails assets pipeline}
10
+ s.version = Bugsnagjs::Rails::VERSION
11
+ s.date = Time.now.strftime("%Y-%m-%d")
12
+ s.files = `git ls-files`.split("\n")
13
+ s.require_paths = ['lib']
14
+ s.add_runtime_dependency(%q{rails}, ">= 4")
15
+ s.license = 'MIT'
16
+ end
@@ -0,0 +1,8 @@
1
+ require "bugsnagjs-rails/version"
2
+
3
+ module Bugsnagjs
4
+ module Rails
5
+ require "bugsnagjs-rails/engine"
6
+ end
7
+ end
8
+
@@ -0,0 +1,6 @@
1
+ module Bugsnagjs
2
+ module Rails
3
+ class Engine < ::Rails::Engine
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module Bugsnagjs
2
+ module Rails
3
+ # https://www.npmjs.com/package/@bugsnag/browser
4
+ # 9 may 2019
5
+ VERSION = "6.2.0.0"
6
+ end
7
+ end
@@ -0,0 +1,2970 @@
1
+ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bugsnag = f()}})(function(){var define,module,exports;
2
+ // minimal implementations of useful ES functionality
3
+ // all we really need for arrays is reduce – everything else is just sugar!
4
+ // Array#reduce
5
+ var reduce = function (arr, fn, accum) {
6
+ var val = accum;
7
+
8
+ for (var i = 0, len = arr.length; i < len; i++) {
9
+ val = fn(val, arr[i], i, arr);
10
+ }
11
+
12
+ return val;
13
+ }; // Array#filter
14
+
15
+
16
+ var filter = function (arr, fn) {
17
+ return reduce(arr, function (accum, item, i, arr) {
18
+ return !fn(item, i, arr) ? accum : accum.concat(item);
19
+ }, []);
20
+ }; // Array#map
21
+
22
+
23
+ var map = function (arr, fn) {
24
+ return reduce(arr, function (accum, item, i, arr) {
25
+ return accum.concat(fn(item, i, arr));
26
+ }, []);
27
+ }; // Array#includes
28
+
29
+
30
+ var includes = function (arr, x) {
31
+ return reduce(arr, function (accum, item, i, arr) {
32
+ return accum === true || item === x;
33
+ }, false);
34
+ };
35
+
36
+ var _hasDontEnumBug = !{
37
+ toString: null
38
+ }.propertyIsEnumerable('toString');
39
+
40
+ var _dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor']; // Object#keys
41
+
42
+ var keys = function (obj) {
43
+ // stripped down version of
44
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/Keys
45
+ var result = [];
46
+ var prop;
47
+
48
+ for (prop in obj) {
49
+ if (Object.prototype.hasOwnProperty.call(obj, prop)) result.push(prop);
50
+ }
51
+
52
+ if (!_hasDontEnumBug) return result;
53
+
54
+ for (var i = 0, len = _dontEnums.length; i < len; i++) {
55
+ if (Object.prototype.hasOwnProperty.call(obj, _dontEnums[i])) result.push(_dontEnums[i]);
56
+ }
57
+
58
+ return result;
59
+ }; // Array#isArray
60
+
61
+
62
+ var isArray = function (obj) {
63
+ return Object.prototype.toString.call(obj) === '[object Array]';
64
+ };
65
+
66
+ var _pad = function (n) {
67
+ return n < 10 ? "0" + n : n;
68
+ }; // Date#toISOString
69
+
70
+
71
+ var isoDate = function () {
72
+ // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
73
+ var d = new Date();
74
+ return d.getUTCFullYear() + '-' + _pad(d.getUTCMonth() + 1) + '-' + _pad(d.getUTCDate()) + 'T' + _pad(d.getUTCHours()) + ':' + _pad(d.getUTCMinutes()) + ':' + _pad(d.getUTCSeconds()) + '.' + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z';
75
+ };
76
+
77
+ var _$esUtils_8 = {
78
+ map: map,
79
+ reduce: reduce,
80
+ filter: filter,
81
+ includes: includes,
82
+ keys: keys,
83
+ isArray: isArray,
84
+ isoDate: isoDate
85
+ };
86
+
87
+ var _$validators_15 = {};
88
+ _$validators_15.intRange = function (min, max) {
89
+ if (min === void 0) {
90
+ min = 1;
91
+ }
92
+
93
+ if (max === void 0) {
94
+ max = Infinity;
95
+ }
96
+
97
+ return function (value) {
98
+ return typeof value === 'number' && parseInt('' + value, 10) === value && value >= min && value <= max;
99
+ };
100
+ };
101
+
102
+ _$validators_15.stringWithLength = function (value) {
103
+ return typeof value === 'string' && !!value.length;
104
+ };
105
+
106
+ var _$config_5 = {};
107
+ var __filter_5 = _$esUtils_8.filter,
108
+ __reduce_5 = _$esUtils_8.reduce,
109
+ __keys_5 = _$esUtils_8.keys,
110
+ __isArray_5 = _$esUtils_8.isArray,
111
+ __includes_5 = _$esUtils_8.includes;
112
+
113
+ var intRange = _$validators_15.intRange,
114
+ stringWithLength = _$validators_15.stringWithLength;
115
+
116
+ _$config_5.schema = {
117
+ apiKey: {
118
+ defaultValue: function () {
119
+ return null;
120
+ },
121
+ message: 'is required',
122
+ validate: stringWithLength
123
+ },
124
+ appVersion: {
125
+ defaultValue: function () {
126
+ return null;
127
+ },
128
+ message: 'should be a string',
129
+ validate: function (value) {
130
+ return value === null || stringWithLength(value);
131
+ }
132
+ },
133
+ appType: {
134
+ defaultValue: function () {
135
+ return null;
136
+ },
137
+ message: 'should be a string',
138
+ validate: function (value) {
139
+ return value === null || stringWithLength(value);
140
+ }
141
+ },
142
+ autoNotify: {
143
+ defaultValue: function () {
144
+ return true;
145
+ },
146
+ message: 'should be true|false',
147
+ validate: function (value) {
148
+ return value === true || value === false;
149
+ }
150
+ },
151
+ beforeSend: {
152
+ defaultValue: function () {
153
+ return [];
154
+ },
155
+ message: 'should be a function or array of functions',
156
+ validate: function (value) {
157
+ return typeof value === 'function' || __isArray_5(value) && __filter_5(value, function (f) {
158
+ return typeof f === 'function';
159
+ }).length === value.length;
160
+ }
161
+ },
162
+ endpoints: {
163
+ defaultValue: function () {
164
+ return {
165
+ notify: 'https://notify.bugsnag.com',
166
+ sessions: 'https://sessions.bugsnag.com'
167
+ };
168
+ },
169
+ message: 'should be an object containing endpoint URLs { notify, sessions }. sessions is optional if autoCaptureSessions=false',
170
+ validate: function (val, obj) {
171
+ return (// first, ensure it's an object
172
+ val && typeof val === 'object' && // endpoints.notify must always be set
173
+ stringWithLength(val.notify) && ( // endpoints.sessions must be set unless session tracking is explicitly off
174
+ obj.autoCaptureSessions === false || stringWithLength(val.sessions)) && // ensure no keys other than notify/session are set on endpoints object
175
+ __filter_5(__keys_5(val), function (k) {
176
+ return !__includes_5(['notify', 'sessions'], k);
177
+ }).length === 0
178
+ );
179
+ }
180
+ },
181
+ autoCaptureSessions: {
182
+ defaultValue: function (val, opts) {
183
+ return opts.endpoints === undefined || !!opts.endpoints && !!opts.endpoints.sessions;
184
+ },
185
+ message: 'should be true|false',
186
+ validate: function (val) {
187
+ return val === true || val === false;
188
+ }
189
+ },
190
+ notifyReleaseStages: {
191
+ defaultValue: function () {
192
+ return null;
193
+ },
194
+ message: 'should be an array of strings',
195
+ validate: function (value) {
196
+ return value === null || __isArray_5(value) && __filter_5(value, function (f) {
197
+ return typeof f === 'string';
198
+ }).length === value.length;
199
+ }
200
+ },
201
+ releaseStage: {
202
+ defaultValue: function () {
203
+ return 'production';
204
+ },
205
+ message: 'should be a string',
206
+ validate: function (value) {
207
+ return typeof value === 'string' && value.length;
208
+ }
209
+ },
210
+ maxBreadcrumbs: {
211
+ defaultValue: function () {
212
+ return 20;
213
+ },
214
+ message: 'should be a number ≤40',
215
+ validate: function (value) {
216
+ return intRange(0, 40)(value);
217
+ }
218
+ },
219
+ autoBreadcrumbs: {
220
+ defaultValue: function () {
221
+ return true;
222
+ },
223
+ message: 'should be true|false',
224
+ validate: function (value) {
225
+ return typeof value === 'boolean';
226
+ }
227
+ },
228
+ user: {
229
+ defaultValue: function () {
230
+ return null;
231
+ },
232
+ message: '(object) user should be an object',
233
+ validate: function (value) {
234
+ return typeof value === 'object';
235
+ }
236
+ },
237
+ metaData: {
238
+ defaultValue: function () {
239
+ return null;
240
+ },
241
+ message: 'should be an object',
242
+ validate: function (value) {
243
+ return typeof value === 'object';
244
+ }
245
+ },
246
+ logger: {
247
+ defaultValue: function () {
248
+ return undefined;
249
+ },
250
+ message: 'should be null or an object with methods { debug, info, warn, error }',
251
+ validate: function (value) {
252
+ return !value || value && __reduce_5(['debug', 'info', 'warn', 'error'], function (accum, method) {
253
+ return accum && typeof value[method] === 'function';
254
+ }, true);
255
+ }
256
+ },
257
+ filters: {
258
+ defaultValue: function () {
259
+ return ['password'];
260
+ },
261
+ message: 'should be an array of strings|regexes',
262
+ validate: function (value) {
263
+ return __isArray_5(value) && value.length === __filter_5(value, function (s) {
264
+ return typeof s === 'string' || s && typeof s.test === 'function';
265
+ }).length;
266
+ }
267
+ }
268
+ };
269
+
270
+ _$config_5.mergeDefaults = function (opts, schema) {
271
+ if (!opts || !schema) throw new Error('opts and schema objects are required');
272
+ return __reduce_5(__keys_5(schema), function (accum, key) {
273
+ accum[key] = opts[key] !== undefined ? opts[key] : schema[key].defaultValue(opts[key], opts);
274
+ return accum;
275
+ }, {});
276
+ };
277
+
278
+ _$config_5.validate = function (opts, schema) {
279
+ if (!opts || !schema) throw new Error('opts and schema objects are required');
280
+ var errors = __reduce_5(__keys_5(schema), function (accum, key) {
281
+ if (schema[key].validate(opts[key], opts)) return accum;
282
+ return accum.concat({
283
+ key: key,
284
+ message: schema[key].message,
285
+ value: opts[key]
286
+ });
287
+ }, []);
288
+ return {
289
+ valid: !errors.length,
290
+ errors: errors
291
+ };
292
+ };
293
+
294
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
295
+
296
+ var schema = _$config_5.schema;
297
+
298
+ var __map_1 = _$esUtils_8.map;
299
+
300
+ var __stringWithLength_1 = _$validators_15.stringWithLength;
301
+
302
+ var _$config_1 = {
303
+ releaseStage: {
304
+ defaultValue: function () {
305
+ if (/^localhost(:\d+)?$/.test(window.location.host)) return 'development';
306
+ return 'production';
307
+ },
308
+ message: 'should be set',
309
+ validate: __stringWithLength_1
310
+ },
311
+ logger: _extends({}, schema.logger, {
312
+ defaultValue: function () {
313
+ return (// set logger based on browser capability
314
+ typeof console !== 'undefined' && typeof console.debug === 'function' ? getPrefixedConsole() : undefined
315
+ );
316
+ }
317
+ })
318
+ };
319
+
320
+ var getPrefixedConsole = function () {
321
+ var logger = {};
322
+ var consoleLog = console['log'];
323
+ __map_1(['debug', 'info', 'warn', 'error'], function (method) {
324
+ var consoleMethod = console[method];
325
+ logger[method] = typeof consoleMethod === 'function' ? consoleMethod.bind(console, '[bugsnag]') : consoleLog.bind(console, '[bugsnag]');
326
+ });
327
+ return logger;
328
+ };
329
+
330
+ var __isoDate_3 = _$esUtils_8.isoDate;
331
+
332
+ var BugsnagBreadcrumb =
333
+ /*#__PURE__*/
334
+ function () {
335
+ function BugsnagBreadcrumb(name, metaData, type, timestamp) {
336
+ if (name === void 0) {
337
+ name = '[anonymous]';
338
+ }
339
+
340
+ if (metaData === void 0) {
341
+ metaData = {};
342
+ }
343
+
344
+ if (type === void 0) {
345
+ type = 'manual';
346
+ }
347
+
348
+ if (timestamp === void 0) {
349
+ timestamp = __isoDate_3();
350
+ }
351
+
352
+ this.type = type;
353
+ this.name = name;
354
+ this.metaData = metaData;
355
+ this.timestamp = timestamp;
356
+ }
357
+
358
+ var _proto = BugsnagBreadcrumb.prototype;
359
+
360
+ _proto.toJSON = function toJSON() {
361
+ return {
362
+ type: this.type,
363
+ name: this.name,
364
+ timestamp: this.timestamp,
365
+ metaData: this.metaData
366
+ };
367
+ };
368
+
369
+ return BugsnagBreadcrumb;
370
+ }();
371
+
372
+ var _$BugsnagBreadcrumb_3 = BugsnagBreadcrumb;
373
+
374
+ // This is a heavily modified/simplified version of
375
+ // https://github.com/othiym23/async-some
376
+ //
377
+ // We can't use that because:
378
+ // a) it inflates the bundle size to over 10kB
379
+ // b) it depends on a module that uses Object.keys()
380
+ // (which we can't use due to ie8 support)
381
+ // run the asynchronous test function (fn) over each item in the array (arr)
382
+ // in series until:
383
+ // - fn(item, cb) => calls cb(null, true)
384
+ // - or the end of the array is reached
385
+ // the callback (cb) will be passed true if any of the items resulted in a true
386
+ // callback, otherwise false
387
+ var _$asyncSome_6 = function (arr, fn, cb) {
388
+ var length = arr.length;
389
+ var index = 0;
390
+
391
+ var next = function () {
392
+ if (index >= length) return cb(null, false);
393
+ fn(arr[index], function (err, result) {
394
+ if (err) return cb(err, false);
395
+ if (result === true) return cb(null, true);
396
+ index++;
397
+ next();
398
+ });
399
+ };
400
+
401
+ next();
402
+ };
403
+
404
+ var _$inferReleaseStage_10 = function (client) {
405
+ return client.app && typeof client.app.releaseStage === 'string' ? client.app.releaseStage : client.config.releaseStage;
406
+ };
407
+
408
+ /**
409
+ * Expose `isError`.
410
+ */
411
+ var _$isError_21 = isError;
412
+ /**
413
+ * Test whether `value` is error object.
414
+ *
415
+ * @param {*} value
416
+ * @returns {boolean}
417
+ */
418
+
419
+ function isError(value) {
420
+ switch (Object.prototype.toString.call(value)) {
421
+ case '[object Error]':
422
+ return true;
423
+
424
+ case '[object Exception]':
425
+ return true;
426
+
427
+ case '[object DOMException]':
428
+ return true;
429
+
430
+ default:
431
+ return value instanceof Error;
432
+ }
433
+ }
434
+
435
+ var _$iserror_11 = _$isError_21;
436
+
437
+ var _$runBeforeSend_14 = function (report, onError) {
438
+ return function (fn, cb) {
439
+ if (typeof fn !== 'function') return cb(null, false);
440
+
441
+ try {
442
+ // if function appears sync…
443
+ if (fn.length !== 2) {
444
+ var ret = fn(report); // check if it returned a "thenable" (promise)
445
+
446
+ if (ret && typeof ret.then === 'function') {
447
+ return ret.then( // resolve
448
+ function (val) {
449
+ return setTimeout(function () {
450
+ return cb(null, shouldPreventSend(report, val));
451
+ }, 0);
452
+ }, // reject
453
+ function (err) {
454
+ setTimeout(function () {
455
+ onError(err);
456
+ return cb(null, false);
457
+ });
458
+ });
459
+ }
460
+
461
+ return cb(null, shouldPreventSend(report, ret));
462
+ } // if function is async…
463
+
464
+
465
+ fn(report, function (err, result) {
466
+ if (err) {
467
+ onError(err);
468
+ return cb(null, false);
469
+ }
470
+
471
+ cb(null, shouldPreventSend(report, result));
472
+ });
473
+ } catch (e) {
474
+ onError(e);
475
+ cb(null, false);
476
+ }
477
+ };
478
+ };
479
+
480
+ var shouldPreventSend = function (report, value) {
481
+ return report.isIgnored() || value === false;
482
+ };
483
+
484
+ var _$stackframe_23 = {};
485
+ (function (root, factory) {
486
+ 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.
487
+
488
+ /* istanbul ignore next */
489
+
490
+ if (typeof define === 'function' && define.amd) {
491
+ define('stackframe', [], factory);
492
+ } else if (typeof _$stackframe_23 === 'object') {
493
+ _$stackframe_23 = factory();
494
+ } else {
495
+ root.StackFrame = factory();
496
+ }
497
+ })(this, function () {
498
+ 'use strict';
499
+
500
+ function _isNumber(n) {
501
+ return !isNaN(parseFloat(n)) && isFinite(n);
502
+ }
503
+
504
+ function _capitalize(str) {
505
+ return str.charAt(0).toUpperCase() + str.substring(1);
506
+ }
507
+
508
+ function _getter(p) {
509
+ return function () {
510
+ return this[p];
511
+ };
512
+ }
513
+
514
+ var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];
515
+ var numericProps = ['columnNumber', 'lineNumber'];
516
+ var stringProps = ['fileName', 'functionName', 'source'];
517
+ var arrayProps = ['args'];
518
+ var props = booleanProps.concat(numericProps, stringProps, arrayProps);
519
+
520
+ function StackFrame(obj) {
521
+ if (obj instanceof Object) {
522
+ for (var i = 0; i < props.length; i++) {
523
+ if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) {
524
+ this['set' + _capitalize(props[i])](obj[props[i]]);
525
+ }
526
+ }
527
+ }
528
+ }
529
+
530
+ StackFrame.prototype = {
531
+ getArgs: function () {
532
+ return this.args;
533
+ },
534
+ setArgs: function (v) {
535
+ if (Object.prototype.toString.call(v) !== '[object Array]') {
536
+ throw new TypeError('Args must be an Array');
537
+ }
538
+
539
+ this.args = v;
540
+ },
541
+ getEvalOrigin: function () {
542
+ return this.evalOrigin;
543
+ },
544
+ setEvalOrigin: function (v) {
545
+ if (v instanceof StackFrame) {
546
+ this.evalOrigin = v;
547
+ } else if (v instanceof Object) {
548
+ this.evalOrigin = new StackFrame(v);
549
+ } else {
550
+ throw new TypeError('Eval Origin must be an Object or StackFrame');
551
+ }
552
+ },
553
+ toString: function () {
554
+ var functionName = this.getFunctionName() || '{anonymous}';
555
+ var args = '(' + (this.getArgs() || []).join(',') + ')';
556
+ var fileName = this.getFileName() ? '@' + this.getFileName() : '';
557
+ var lineNumber = _isNumber(this.getLineNumber()) ? ':' + this.getLineNumber() : '';
558
+ var columnNumber = _isNumber(this.getColumnNumber()) ? ':' + this.getColumnNumber() : '';
559
+ return functionName + args + fileName + lineNumber + columnNumber;
560
+ }
561
+ };
562
+
563
+ for (var i = 0; i < booleanProps.length; i++) {
564
+ StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);
565
+
566
+ StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {
567
+ return function (v) {
568
+ this[p] = Boolean(v);
569
+ };
570
+ }(booleanProps[i]);
571
+ }
572
+
573
+ for (var j = 0; j < numericProps.length; j++) {
574
+ StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);
575
+
576
+ StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {
577
+ return function (v) {
578
+ if (!_isNumber(v)) {
579
+ throw new TypeError(p + ' must be a Number');
580
+ }
581
+
582
+ this[p] = Number(v);
583
+ };
584
+ }(numericProps[j]);
585
+ }
586
+
587
+ for (var k = 0; k < stringProps.length; k++) {
588
+ StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);
589
+
590
+ StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {
591
+ return function (v) {
592
+ this[p] = String(v);
593
+ };
594
+ }(stringProps[k]);
595
+ }
596
+
597
+ return StackFrame;
598
+ });
599
+
600
+ var _$errorStackParser_20 = {};
601
+ (function (root, factory) {
602
+ 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.
603
+
604
+ /* istanbul ignore next */
605
+
606
+ if (typeof define === 'function' && define.amd) {
607
+ define('error-stack-parser', ['stackframe'], factory);
608
+ } else if (typeof _$errorStackParser_20 === 'object') {
609
+ _$errorStackParser_20 = factory(_$stackframe_23);
610
+ } else {
611
+ root.ErrorStackParser = factory(root.StackFrame);
612
+ }
613
+ })(this, function ErrorStackParser(StackFrame) {
614
+ 'use strict';
615
+
616
+ var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/;
617
+ var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m;
618
+ var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/;
619
+ return {
620
+ /**
621
+ * Given an Error object, extract the most information from it.
622
+ *
623
+ * @param {Error} error object
624
+ * @return {Array} of StackFrames
625
+ */
626
+ parse: function ErrorStackParser$$parse(error) {
627
+ if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {
628
+ return this.parseOpera(error);
629
+ } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {
630
+ return this.parseV8OrIE(error);
631
+ } else if (error.stack) {
632
+ return this.parseFFOrSafari(error);
633
+ } else {
634
+ throw new Error('Cannot parse given Error object');
635
+ }
636
+ },
637
+ // Separate line and column numbers from a string of the form: (URI:Line:Column)
638
+ extractLocation: function ErrorStackParser$$extractLocation(urlLike) {
639
+ // Fail-fast but return locations like "(native)"
640
+ if (urlLike.indexOf(':') === -1) {
641
+ return [urlLike];
642
+ }
643
+
644
+ var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/;
645
+ var parts = regExp.exec(urlLike.replace(/[\(\)]/g, ''));
646
+ return [parts[1], parts[2] || undefined, parts[3] || undefined];
647
+ },
648
+ parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {
649
+ var filtered = error.stack.split('\n').filter(function (line) {
650
+ return !!line.match(CHROME_IE_STACK_REGEXP);
651
+ }, this);
652
+ return filtered.map(function (line) {
653
+ if (line.indexOf('(eval ') > -1) {
654
+ // Throw away eval information until we implement stacktrace.js/stackframe#8
655
+ line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, '');
656
+ }
657
+
658
+ var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1);
659
+ var locationParts = this.extractLocation(tokens.pop());
660
+ var functionName = tokens.join(' ') || undefined;
661
+ var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];
662
+ return new StackFrame({
663
+ functionName: functionName,
664
+ fileName: fileName,
665
+ lineNumber: locationParts[1],
666
+ columnNumber: locationParts[2],
667
+ source: line
668
+ });
669
+ }, this);
670
+ },
671
+ parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {
672
+ var filtered = error.stack.split('\n').filter(function (line) {
673
+ return !line.match(SAFARI_NATIVE_CODE_REGEXP);
674
+ }, this);
675
+ return filtered.map(function (line) {
676
+ // Throw away eval information until we implement stacktrace.js/stackframe#8
677
+ if (line.indexOf(' > eval') > -1) {
678
+ line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1');
679
+ }
680
+
681
+ if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {
682
+ // Safari eval frames only have function names and nothing else
683
+ return new StackFrame({
684
+ functionName: line
685
+ });
686
+ } else {
687
+ var functionNameRegex = /((.*".+"[^@]*)?[^@]*)(?:@)/;
688
+ var matches = line.match(functionNameRegex);
689
+ var functionName = matches && matches[1] ? matches[1] : undefined;
690
+ var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));
691
+ return new StackFrame({
692
+ functionName: functionName,
693
+ fileName: locationParts[0],
694
+ lineNumber: locationParts[1],
695
+ columnNumber: locationParts[2],
696
+ source: line
697
+ });
698
+ }
699
+ }, this);
700
+ },
701
+ parseOpera: function ErrorStackParser$$parseOpera(e) {
702
+ if (!e.stacktrace || e.message.indexOf('\n') > -1 && e.message.split('\n').length > e.stacktrace.split('\n').length) {
703
+ return this.parseOpera9(e);
704
+ } else if (!e.stack) {
705
+ return this.parseOpera10(e);
706
+ } else {
707
+ return this.parseOpera11(e);
708
+ }
709
+ },
710
+ parseOpera9: function ErrorStackParser$$parseOpera9(e) {
711
+ var lineRE = /Line (\d+).*script (?:in )?(\S+)/i;
712
+ var lines = e.message.split('\n');
713
+ var result = [];
714
+
715
+ for (var i = 2, len = lines.length; i < len; i += 2) {
716
+ var match = lineRE.exec(lines[i]);
717
+
718
+ if (match) {
719
+ result.push(new StackFrame({
720
+ fileName: match[2],
721
+ lineNumber: match[1],
722
+ source: lines[i]
723
+ }));
724
+ }
725
+ }
726
+
727
+ return result;
728
+ },
729
+ parseOpera10: function ErrorStackParser$$parseOpera10(e) {
730
+ var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i;
731
+ var lines = e.stacktrace.split('\n');
732
+ var result = [];
733
+
734
+ for (var i = 0, len = lines.length; i < len; i += 2) {
735
+ var match = lineRE.exec(lines[i]);
736
+
737
+ if (match) {
738
+ result.push(new StackFrame({
739
+ functionName: match[3] || undefined,
740
+ fileName: match[2],
741
+ lineNumber: match[1],
742
+ source: lines[i]
743
+ }));
744
+ }
745
+ }
746
+
747
+ return result;
748
+ },
749
+ // Opera 10.65+ Error.stack very similar to FF/Safari
750
+ parseOpera11: function ErrorStackParser$$parseOpera11(error) {
751
+ var filtered = error.stack.split('\n').filter(function (line) {
752
+ return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);
753
+ }, this);
754
+ return filtered.map(function (line) {
755
+ var tokens = line.split('@');
756
+ var locationParts = this.extractLocation(tokens.pop());
757
+ var functionCall = tokens.shift() || '';
758
+ var functionName = functionCall.replace(/<anonymous function(: (\w+))?>/, '$2').replace(/\([^\)]*\)/g, '') || undefined;
759
+ var argsRaw;
760
+
761
+ if (functionCall.match(/\(([^\)]*)\)/)) {
762
+ argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1');
763
+ }
764
+
765
+ var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');
766
+ return new StackFrame({
767
+ functionName: functionName,
768
+ args: args,
769
+ fileName: locationParts[0],
770
+ lineNumber: locationParts[1],
771
+ columnNumber: locationParts[2],
772
+ source: line
773
+ });
774
+ }, this);
775
+ }
776
+ };
777
+ });
778
+
779
+ var _$errorStackParser_7 = _$errorStackParser_20;
780
+
781
+ // Given `err` which may be an error, does it have a stack property which is a string?
782
+ var _$hasStack_9 = function (err) {
783
+ return !!err && (!!err.stack || !!err.stacktrace || !!err['opera#sourceloc']) && typeof (err.stack || err.stacktrace || err['opera#sourceloc']) === 'string' && err.stack !== err.name + ": " + err.message;
784
+ };
785
+
786
+ var _$jsRuntime_12 = "yes" ? 'browserjs' : typeof navigator !== 'undefined' && navigator.product === 'ReactNative' ? typeof Expo !== 'undefined' ? 'expojs' : 'reactnativejs' : 'nodejs';
787
+
788
+ var _$stackGenerator_22 = {};
789
+ (function (root, factory) {
790
+ 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.
791
+
792
+ /* istanbul ignore next */
793
+
794
+ if (typeof define === 'function' && define.amd) {
795
+ define('stack-generator', ['stackframe'], factory);
796
+ } else if (typeof _$stackGenerator_22 === 'object') {
797
+ _$stackGenerator_22 = factory(_$stackframe_23);
798
+ } else {
799
+ root.StackGenerator = factory(root.StackFrame);
800
+ }
801
+ })(this, function (StackFrame) {
802
+ return {
803
+ backtrace: function StackGenerator$$backtrace(opts) {
804
+ var stack = [];
805
+ var maxStackSize = 10;
806
+
807
+ if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {
808
+ maxStackSize = opts.maxStackSize;
809
+ }
810
+
811
+ var curr = arguments.callee;
812
+
813
+ while (curr && stack.length < maxStackSize && curr['arguments']) {
814
+ // Allow V8 optimizations
815
+ var args = new Array(curr['arguments'].length);
816
+
817
+ for (var i = 0; i < args.length; ++i) {
818
+ args[i] = curr['arguments'][i];
819
+ }
820
+
821
+ if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) {
822
+ stack.push(new StackFrame({
823
+ functionName: RegExp.$1 || undefined,
824
+ args: args
825
+ }));
826
+ } else {
827
+ stack.push(new StackFrame({
828
+ args: args
829
+ }));
830
+ }
831
+
832
+ try {
833
+ curr = curr.caller;
834
+ } catch (e) {
835
+ break;
836
+ }
837
+ }
838
+
839
+ return stack;
840
+ }
841
+ };
842
+ });
843
+
844
+ function ___extends_24() { ___extends_24 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_24.apply(this, arguments); }
845
+
846
+ /* removed: var _$errorStackParser_7 = require('./lib/error-stack-parser'); */;
847
+
848
+ /* removed: var _$stackGenerator_22 = require('stack-generator'); */;
849
+
850
+ /* removed: var _$hasStack_9 = require('./lib/has-stack'); */;
851
+
852
+ var __reduce_24 = _$esUtils_8.reduce,
853
+ __filter_24 = _$esUtils_8.filter;
854
+
855
+ /* removed: var _$jsRuntime_12 = require('./lib/js-runtime'); */;
856
+
857
+ var BugsnagReport =
858
+ /*#__PURE__*/
859
+ function () {
860
+ function BugsnagReport(errorClass, errorMessage, stacktrace, handledState, originalError) {
861
+ if (stacktrace === void 0) {
862
+ stacktrace = [];
863
+ }
864
+
865
+ if (handledState === void 0) {
866
+ handledState = defaultHandledState();
867
+ }
868
+
869
+ // duck-typing ftw >_<
870
+ this.__isBugsnagReport = true;
871
+ this._ignored = false; // private (un)handled state
872
+
873
+ this._handledState = handledState; // setable props
874
+
875
+ this.app = undefined;
876
+ this.apiKey = undefined;
877
+ this.breadcrumbs = [];
878
+ this.context = undefined;
879
+ this.device = undefined;
880
+ this.errorClass = stringOrFallback(errorClass, '[no error class]');
881
+ this.errorMessage = stringOrFallback(errorMessage, '[no error message]');
882
+ this.groupingHash = undefined;
883
+ this.metaData = {};
884
+ this.request = undefined;
885
+ this.severity = this._handledState.severity;
886
+ this.stacktrace = __reduce_24(stacktrace, function (accum, frame) {
887
+ var f = formatStackframe(frame); // don't include a stackframe if none of its properties are defined
888
+
889
+ try {
890
+ if (JSON.stringify(f) === '{}') return accum;
891
+ return accum.concat(f);
892
+ } catch (e) {
893
+ return accum;
894
+ }
895
+ }, []);
896
+ this.user = undefined;
897
+ this.session = undefined;
898
+ this.originalError = originalError; // Flags.
899
+ // Note these are not initialised unless they are used
900
+ // to save unnecessary bytes in the browser bundle
901
+
902
+ /* this.attemptImmediateDelivery, default: true */
903
+ }
904
+
905
+ var _proto = BugsnagReport.prototype;
906
+
907
+ _proto.ignore = function ignore() {
908
+ this._ignored = true;
909
+ };
910
+
911
+ _proto.isIgnored = function isIgnored() {
912
+ return this._ignored;
913
+ };
914
+
915
+ _proto.updateMetaData = function updateMetaData(section) {
916
+ var _updates;
917
+
918
+ if (!section) return this;
919
+ var updates; // updateMetaData("section", null) -> removes section
920
+
921
+ if ((arguments.length <= 1 ? undefined : arguments[1]) === null) return this.removeMetaData(section); // updateMetaData("section", "property", null) -> removes property from section
922
+
923
+ if ((arguments.length <= 2 ? undefined : arguments[2]) === null) return this.removeMetaData(section, arguments.length <= 1 ? undefined : arguments[1], arguments.length <= 2 ? undefined : arguments[2]); // normalise the two supported input types into object form
924
+
925
+ if (typeof (arguments.length <= 1 ? undefined : arguments[1]) === 'object') updates = arguments.length <= 1 ? undefined : arguments[1];
926
+ if (typeof (arguments.length <= 1 ? undefined : arguments[1]) === 'string') updates = (_updates = {}, _updates[arguments.length <= 1 ? undefined : arguments[1]] = arguments.length <= 2 ? undefined : arguments[2], _updates); // exit if we don't have an updates object at this point
927
+
928
+ if (!updates) return this; // ensure a section with this name exists
929
+
930
+ if (!this.metaData[section]) this.metaData[section] = {}; // merge the updates with the existing section
931
+
932
+ this.metaData[section] = ___extends_24({}, this.metaData[section], updates);
933
+ return this;
934
+ };
935
+
936
+ _proto.removeMetaData = function removeMetaData(section, property) {
937
+ if (typeof section !== 'string') return this; // remove an entire section
938
+
939
+ if (!property) {
940
+ delete this.metaData[section];
941
+ return this;
942
+ } // remove a single property from a section
943
+
944
+
945
+ if (this.metaData[section]) {
946
+ delete this.metaData[section][property];
947
+ return this;
948
+ }
949
+
950
+ return this;
951
+ };
952
+
953
+ _proto.toJSON = function toJSON() {
954
+ return {
955
+ payloadVersion: '4',
956
+ exceptions: [{
957
+ errorClass: this.errorClass,
958
+ message: this.errorMessage,
959
+ stacktrace: this.stacktrace,
960
+ type: _$jsRuntime_12
961
+ }],
962
+ severity: this.severity,
963
+ unhandled: this._handledState.unhandled,
964
+ severityReason: this._handledState.severityReason,
965
+ app: this.app,
966
+ device: this.device,
967
+ breadcrumbs: this.breadcrumbs,
968
+ context: this.context,
969
+ user: this.user,
970
+ metaData: this.metaData,
971
+ groupingHash: this.groupingHash,
972
+ request: this.request,
973
+ session: this.session
974
+ };
975
+ };
976
+
977
+ return BugsnagReport;
978
+ }(); // takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)
979
+ // and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)
980
+
981
+
982
+ var formatStackframe = function (frame) {
983
+ var f = {
984
+ file: frame.fileName,
985
+ method: normaliseFunctionName(frame.functionName),
986
+ lineNumber: frame.lineNumber,
987
+ columnNumber: frame.columnNumber,
988
+ code: undefined,
989
+ inProject: undefined // Some instances result in no file:
990
+ // - calling notify() from chrome's terminal results in no file/method.
991
+ // - non-error exception thrown from global code in FF
992
+ // This adds one.
993
+
994
+ };
995
+
996
+ if (f.lineNumber > -1 && !f.file && !f.method) {
997
+ f.file = 'global code';
998
+ }
999
+
1000
+ return f;
1001
+ };
1002
+
1003
+ var normaliseFunctionName = function (name) {
1004
+ return /^global code$/i.test(name) ? 'global code' : name;
1005
+ };
1006
+
1007
+ var defaultHandledState = function () {
1008
+ return {
1009
+ unhandled: false,
1010
+ severity: 'warning',
1011
+ severityReason: {
1012
+ type: 'handledException'
1013
+ }
1014
+ };
1015
+ };
1016
+
1017
+ var stringOrFallback = function (str, fallback) {
1018
+ return typeof str === 'string' && str ? str : fallback;
1019
+ }; // Helpers
1020
+
1021
+
1022
+ BugsnagReport.getStacktrace = function (error, errorFramesToSkip, generatedFramesToSkip) {
1023
+ if (errorFramesToSkip === void 0) {
1024
+ errorFramesToSkip = 0;
1025
+ }
1026
+
1027
+ if (generatedFramesToSkip === void 0) {
1028
+ generatedFramesToSkip = 0;
1029
+ }
1030
+
1031
+ if (_$hasStack_9(error)) return _$errorStackParser_7.parse(error).slice(errorFramesToSkip); // error wasn't provided or didn't have a stacktrace so try to walk the callstack
1032
+
1033
+ return __filter_24(_$stackGenerator_22.backtrace(), function (frame) {
1034
+ return (frame.functionName || '').indexOf('StackGenerator$$') === -1;
1035
+ }).slice(1 + generatedFramesToSkip);
1036
+ };
1037
+
1038
+ BugsnagReport.ensureReport = function (reportOrError, errorFramesToSkip, generatedFramesToSkip) {
1039
+ if (errorFramesToSkip === void 0) {
1040
+ errorFramesToSkip = 0;
1041
+ }
1042
+
1043
+ if (generatedFramesToSkip === void 0) {
1044
+ generatedFramesToSkip = 0;
1045
+ }
1046
+
1047
+ // notify() can be called with a Report object. In this case no action is required
1048
+ if (reportOrError.__isBugsnagReport) return reportOrError;
1049
+
1050
+ try {
1051
+ var stacktrace = BugsnagReport.getStacktrace(reportOrError, errorFramesToSkip, 1 + generatedFramesToSkip);
1052
+ return new BugsnagReport(reportOrError.name, reportOrError.message, stacktrace, undefined, reportOrError);
1053
+ } catch (e) {
1054
+ return new BugsnagReport(reportOrError.name, reportOrError.message, [], undefined, reportOrError);
1055
+ }
1056
+ };
1057
+
1058
+ var _$BugsnagReport_24 = BugsnagReport;
1059
+
1060
+ var _$pad_18 = function pad(num, size) {
1061
+ var s = '000000000' + num;
1062
+ return s.substr(s.length - size);
1063
+ };
1064
+
1065
+ /* removed: var _$pad_18 = require('./pad.js'); */;
1066
+
1067
+ var env = typeof window === 'object' ? window : self;
1068
+ var globalCount = 0;
1069
+
1070
+ for (var prop in env) {
1071
+ if (Object.hasOwnProperty.call(env, prop)) globalCount++;
1072
+ }
1073
+
1074
+ var mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;
1075
+ var clientId = _$pad_18((mimeTypesLength + navigator.userAgent.length).toString(36) + globalCount.toString(36), 4);
1076
+
1077
+ var _$fingerprint_17 = function fingerprint() {
1078
+ return clientId;
1079
+ };
1080
+
1081
+ /**
1082
+ * cuid.js
1083
+ * Collision-resistant UID generator for browsers and node.
1084
+ * Sequential for fast db lookups and recency sorting.
1085
+ * Safe for element IDs and server-side lookups.
1086
+ *
1087
+ * Extracted from CLCTR
1088
+ *
1089
+ * Copyright (c) Eric Elliott 2012
1090
+ * MIT License
1091
+ */
1092
+ /* removed: var _$fingerprint_17 = require('./lib/fingerprint.js'); */;
1093
+
1094
+ /* removed: var _$pad_18 = require('./lib/pad.js'); */;
1095
+
1096
+ var c = 0,
1097
+ blockSize = 4,
1098
+ base = 36,
1099
+ discreteValues = Math.pow(base, blockSize);
1100
+
1101
+ function randomBlock() {
1102
+ return _$pad_18((Math.random() * discreteValues << 0).toString(base), blockSize);
1103
+ }
1104
+
1105
+ function safeCounter() {
1106
+ c = c < discreteValues ? c : 0;
1107
+ c++; // this is not subliminal
1108
+
1109
+ return c - 1;
1110
+ }
1111
+
1112
+ function cuid() {
1113
+ // Starting with a lowercase letter makes
1114
+ // it HTML element ID friendly.
1115
+ var letter = 'c',
1116
+ // hard-coded allows for sequential access
1117
+ // timestamp
1118
+ // warning: this exposes the exact date and time
1119
+ // that the uid was created.
1120
+ timestamp = new Date().getTime().toString(base),
1121
+ // Prevent same-machine collisions.
1122
+ counter = _$pad_18(safeCounter().toString(base), blockSize),
1123
+ // A few chars to generate distinct ids for different
1124
+ // clients (so different computers are far less
1125
+ // likely to generate the same id)
1126
+ print = _$fingerprint_17(),
1127
+ // Grab some more chars from Math.random()
1128
+ random = randomBlock() + randomBlock();
1129
+ return letter + timestamp + counter + print + random;
1130
+ }
1131
+
1132
+ cuid.fingerprint = _$fingerprint_17;
1133
+ var _$cuid_16 = cuid;
1134
+
1135
+ var __isoDate_25 = _$esUtils_8.isoDate;
1136
+
1137
+ /* removed: var _$cuid_16 = require('@bugsnag/cuid'); */;
1138
+
1139
+ var Session =
1140
+ /*#__PURE__*/
1141
+ function () {
1142
+ function Session() {
1143
+ this.id = _$cuid_16();
1144
+ this.startedAt = __isoDate_25();
1145
+ this._handled = 0;
1146
+ this._unhandled = 0;
1147
+ }
1148
+
1149
+ var _proto = Session.prototype;
1150
+
1151
+ _proto.toJSON = function toJSON() {
1152
+ return {
1153
+ id: this.id,
1154
+ startedAt: this.startedAt,
1155
+ events: {
1156
+ handled: this._handled,
1157
+ unhandled: this._unhandled
1158
+ }
1159
+ };
1160
+ };
1161
+
1162
+ _proto.trackError = function trackError(report) {
1163
+ this[report._handledState.unhandled ? '_unhandled' : '_handled'] += 1;
1164
+ };
1165
+
1166
+ return Session;
1167
+ }();
1168
+
1169
+ var _$Session_25 = Session;
1170
+
1171
+ function ___extends_4() { ___extends_4 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_4.apply(this, arguments); }
1172
+
1173
+ /* removed: var _$config_5 = require('./config'); */;
1174
+
1175
+ /* removed: var _$BugsnagReport_24 = require('./report'); */;
1176
+
1177
+ /* removed: var _$BugsnagBreadcrumb_3 = require('./breadcrumb'); */;
1178
+
1179
+ /* removed: var _$Session_25 = require('./session'); */;
1180
+
1181
+ var __map_4 = _$esUtils_8.map,
1182
+ __includes_4 = _$esUtils_8.includes,
1183
+ __isArray_4 = _$esUtils_8.isArray;
1184
+
1185
+ /* removed: var _$inferReleaseStage_10 = require('./lib/infer-release-stage'); */;
1186
+
1187
+ /* removed: var _$iserror_11 = require('./lib/iserror'); */;
1188
+
1189
+ /* removed: var _$asyncSome_6 = require('./lib/async-some'); */;
1190
+
1191
+ /* removed: var _$runBeforeSend_14 = require('./lib/run-before-send'); */;
1192
+
1193
+ var LOG_USAGE_ERR_PREFIX = "Usage error.";
1194
+ var REPORT_USAGE_ERR_PREFIX = "Bugsnag usage error.";
1195
+
1196
+ var BugsnagClient =
1197
+ /*#__PURE__*/
1198
+ function () {
1199
+ function BugsnagClient(notifier) {
1200
+ if (!notifier || !notifier.name || !notifier.version || !notifier.url) {
1201
+ throw new Error('`notifier` argument is required');
1202
+ } // notifier id
1203
+
1204
+
1205
+ this.notifier = notifier; // configure() should be called before notify()
1206
+
1207
+ this._configured = false; // intialise opts and config
1208
+
1209
+ this._opts = {};
1210
+ this.config = {}; // // i/o
1211
+
1212
+ this._delivery = {
1213
+ sendSession: function () {},
1214
+ sendReport: function () {}
1215
+ };
1216
+ this._logger = {
1217
+ debug: function () {},
1218
+ info: function () {},
1219
+ warn: function () {},
1220
+ error: function () {} // plugins
1221
+
1222
+ };
1223
+ this._plugins = {};
1224
+ this._session = null;
1225
+ this.breadcrumbs = []; // setable props
1226
+
1227
+ this.app = {};
1228
+ this.context = undefined;
1229
+ this.device = undefined;
1230
+ this.metaData = undefined;
1231
+ this.request = undefined;
1232
+ this.user = {}; // expose internal constructors
1233
+
1234
+ this.BugsnagClient = BugsnagClient;
1235
+ this.BugsnagReport = _$BugsnagReport_24;
1236
+ this.BugsnagBreadcrumb = _$BugsnagBreadcrumb_3;
1237
+ this.BugsnagSession = _$Session_25;
1238
+ var self = this;
1239
+ var notify = this.notify;
1240
+
1241
+ this.notify = function () {
1242
+ return notify.apply(self, arguments);
1243
+ };
1244
+ }
1245
+
1246
+ var _proto = BugsnagClient.prototype;
1247
+
1248
+ _proto.setOptions = function setOptions(opts) {
1249
+ this._opts = ___extends_4({}, this._opts, opts);
1250
+ };
1251
+
1252
+ _proto.configure = function configure(partialSchema) {
1253
+ if (partialSchema === void 0) {
1254
+ partialSchema = _$config_5.schema;
1255
+ }
1256
+
1257
+ var conf = _$config_5.mergeDefaults(this._opts, partialSchema);
1258
+ var validity = _$config_5.validate(conf, partialSchema);
1259
+ if (!validity.valid === true) throw new Error(generateConfigErrorMessage(validity.errors)); // update and elevate some special options if they were passed in at this point
1260
+
1261
+ if (typeof conf.beforeSend === 'function') conf.beforeSend = [conf.beforeSend];
1262
+ if (conf.appVersion) this.app.version = conf.appVersion;
1263
+ if (conf.appType) this.app.type = conf.appType;
1264
+ if (conf.metaData) this.metaData = conf.metaData;
1265
+ if (conf.user) this.user = conf.user;
1266
+ if (conf.logger) this.logger(conf.logger); // merge with existing config
1267
+
1268
+ this.config = ___extends_4({}, this.config, conf);
1269
+ this._configured = true;
1270
+ return this;
1271
+ };
1272
+
1273
+ _proto.use = function use(plugin) {
1274
+ if (!this._configured) throw new Error('client not configured');
1275
+ if (plugin.configSchema) this.configure(plugin.configSchema);
1276
+
1277
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1278
+ args[_key - 1] = arguments[_key];
1279
+ }
1280
+
1281
+ var result = plugin.init.apply(plugin, [this].concat(args)); // JS objects are not the safest way to store arbitrarily keyed values,
1282
+ // so bookend the key with some characters that prevent tampering with
1283
+ // stuff like __proto__ etc. (only store the result if the plugin had a
1284
+ // name)
1285
+
1286
+ if (plugin.name) this._plugins["~" + plugin.name + "~"] = result;
1287
+ return this;
1288
+ };
1289
+
1290
+ _proto.getPlugin = function getPlugin(name) {
1291
+ return this._plugins["~" + name + "~"];
1292
+ };
1293
+
1294
+ _proto.delivery = function delivery(d) {
1295
+ this._delivery = d(this);
1296
+ return this;
1297
+ };
1298
+
1299
+ _proto.logger = function logger(l, sid) {
1300
+ this._logger = l;
1301
+ return this;
1302
+ };
1303
+
1304
+ _proto.sessionDelegate = function sessionDelegate(s) {
1305
+ this._sessionDelegate = s;
1306
+ return this;
1307
+ };
1308
+
1309
+ _proto.startSession = function startSession() {
1310
+ if (!this._sessionDelegate) {
1311
+ this._logger.warn('No session implementation is installed');
1312
+
1313
+ return this;
1314
+ }
1315
+
1316
+ return this._sessionDelegate.startSession(this);
1317
+ };
1318
+
1319
+ _proto.leaveBreadcrumb = function leaveBreadcrumb(name, metaData, type, timestamp) {
1320
+ if (!this._configured) throw new Error('client not configured'); // coerce bad values so that the defaults get set
1321
+
1322
+ name = name || undefined;
1323
+ type = typeof type === 'string' ? type : undefined;
1324
+ timestamp = typeof timestamp === 'string' ? timestamp : undefined;
1325
+ metaData = typeof metaData === 'object' && metaData !== null ? metaData : undefined; // if no name and no metaData, usefulness of this crumb is questionable at best so discard
1326
+
1327
+ if (typeof name !== 'string' && !metaData) return;
1328
+ var crumb = new _$BugsnagBreadcrumb_3(name, metaData, type, timestamp); // push the valid crumb onto the queue and maintain the length
1329
+
1330
+ this.breadcrumbs.push(crumb);
1331
+
1332
+ if (this.breadcrumbs.length > this.config.maxBreadcrumbs) {
1333
+ this.breadcrumbs = this.breadcrumbs.slice(this.breadcrumbs.length - this.config.maxBreadcrumbs);
1334
+ }
1335
+
1336
+ return this;
1337
+ };
1338
+
1339
+ _proto.notify = function notify(error, opts, cb) {
1340
+ var _this = this;
1341
+
1342
+ if (opts === void 0) {
1343
+ opts = {};
1344
+ }
1345
+
1346
+ if (cb === void 0) {
1347
+ cb = function () {};
1348
+ }
1349
+
1350
+ if (!this._configured) throw new Error('client not configured'); // releaseStage can be set via config.releaseStage or client.app.releaseStage
1351
+
1352
+ var releaseStage = _$inferReleaseStage_10(this); // ensure we have an error (or a reasonable object representation of an error)
1353
+
1354
+ var _normaliseError = normaliseError(error, opts, this._logger),
1355
+ err = _normaliseError.err,
1356
+ errorFramesToSkip = _normaliseError.errorFramesToSkip,
1357
+ _opts = _normaliseError._opts;
1358
+
1359
+ if (_opts) opts = _opts; // ensure opts is an object
1360
+
1361
+ if (typeof opts !== 'object' || opts === null) opts = {}; // create a report from the error, if it isn't one already
1362
+
1363
+ var report = _$BugsnagReport_24.ensureReport(err, errorFramesToSkip, 2);
1364
+ report.app = ___extends_4({}, {
1365
+ releaseStage: releaseStage
1366
+ }, report.app, this.app);
1367
+ report.context = report.context || opts.context || this.context || undefined;
1368
+ report.device = ___extends_4({}, report.device, this.device, opts.device);
1369
+ report.request = ___extends_4({}, report.request, this.request, opts.request);
1370
+ report.user = ___extends_4({}, report.user, this.user, opts.user);
1371
+ report.metaData = ___extends_4({}, report.metaData, this.metaData, opts.metaData);
1372
+ report.breadcrumbs = this.breadcrumbs.slice(0);
1373
+
1374
+ if (this._session) {
1375
+ this._session.trackError(report);
1376
+
1377
+ report.session = this._session;
1378
+ } // set severity if supplied
1379
+
1380
+
1381
+ if (opts.severity !== undefined) {
1382
+ report.severity = opts.severity;
1383
+ report._handledState.severityReason = {
1384
+ type: 'userSpecifiedSeverity'
1385
+ };
1386
+ } // exit early if the reports should not be sent on the current releaseStage
1387
+
1388
+
1389
+ if (__isArray_4(this.config.notifyReleaseStages) && !__includes_4(this.config.notifyReleaseStages, releaseStage)) {
1390
+ this._logger.warn("Report not sent due to releaseStage/notifyReleaseStages configuration");
1391
+
1392
+ return cb(null, report);
1393
+ }
1394
+
1395
+ var originalSeverity = report.severity;
1396
+ var beforeSend = [].concat(opts.beforeSend).concat(this.config.beforeSend);
1397
+
1398
+ var onBeforeSendErr = function (err) {
1399
+ _this._logger.error("Error occurred in beforeSend callback, continuing anyway\u2026");
1400
+
1401
+ _this._logger.error(err);
1402
+ };
1403
+
1404
+ _$asyncSome_6(beforeSend, _$runBeforeSend_14(report, onBeforeSendErr), function (err, preventSend) {
1405
+ if (err) onBeforeSendErr(err);
1406
+
1407
+ if (preventSend) {
1408
+ _this._logger.debug("Report not sent due to beforeSend callback");
1409
+
1410
+ return cb(null, report);
1411
+ } // only leave a crumb for the error if actually got sent
1412
+
1413
+
1414
+ if (_this.config.autoBreadcrumbs) {
1415
+ _this.leaveBreadcrumb(report.errorClass, {
1416
+ errorClass: report.errorClass,
1417
+ errorMessage: report.errorMessage,
1418
+ severity: report.severity
1419
+ }, 'error');
1420
+ }
1421
+
1422
+ if (originalSeverity !== report.severity) {
1423
+ report._handledState.severityReason = {
1424
+ type: 'userCallbackSetSeverity'
1425
+ };
1426
+ }
1427
+
1428
+ _this._delivery.sendReport({
1429
+ apiKey: report.apiKey || _this.config.apiKey,
1430
+ notifier: _this.notifier,
1431
+ events: [report]
1432
+ }, function (err) {
1433
+ return cb(err, report);
1434
+ });
1435
+ });
1436
+ };
1437
+
1438
+ return BugsnagClient;
1439
+ }();
1440
+
1441
+ var normaliseError = function (error, opts, logger) {
1442
+ var synthesizedErrorFramesToSkip = 3;
1443
+
1444
+ var createAndLogUsageError = function (reason) {
1445
+ var msg = generateNotifyUsageMessage(reason);
1446
+ logger.warn(LOG_USAGE_ERR_PREFIX + " " + msg);
1447
+ return new Error(REPORT_USAGE_ERR_PREFIX + " " + msg);
1448
+ };
1449
+
1450
+ var err;
1451
+ var errorFramesToSkip = 0;
1452
+
1453
+ var _opts;
1454
+
1455
+ switch (typeof error) {
1456
+ case 'string':
1457
+ if (typeof opts === 'string') {
1458
+ // ≤v3 used to have a notify('ErrorName', 'Error message') interface
1459
+ // report usage/deprecation errors if this function is called like that
1460
+ err = createAndLogUsageError('string/string');
1461
+ _opts = {
1462
+ metaData: {
1463
+ notifier: {
1464
+ notifyArgs: [error, opts]
1465
+ }
1466
+ }
1467
+ };
1468
+ } else {
1469
+ err = new Error(String(error));
1470
+ errorFramesToSkip = synthesizedErrorFramesToSkip;
1471
+ }
1472
+
1473
+ break;
1474
+
1475
+ case 'number':
1476
+ case 'boolean':
1477
+ err = new Error(String(error));
1478
+ break;
1479
+
1480
+ case 'function':
1481
+ err = createAndLogUsageError('function');
1482
+ break;
1483
+
1484
+ case 'object':
1485
+ if (error !== null && (_$iserror_11(error) || error.__isBugsnagReport)) {
1486
+ err = error;
1487
+ } else if (error !== null && hasNecessaryFields(error)) {
1488
+ err = new Error(error.message || error.errorMessage);
1489
+ err.name = error.name || error.errorClass;
1490
+ errorFramesToSkip = synthesizedErrorFramesToSkip;
1491
+ } else {
1492
+ err = createAndLogUsageError(error === null ? 'null' : 'unsupported object');
1493
+ }
1494
+
1495
+ break;
1496
+
1497
+ default:
1498
+ err = createAndLogUsageError('nothing');
1499
+ }
1500
+
1501
+ return {
1502
+ err: err,
1503
+ errorFramesToSkip: errorFramesToSkip,
1504
+ _opts: _opts
1505
+ };
1506
+ };
1507
+
1508
+ var hasNecessaryFields = function (error) {
1509
+ return (typeof error.name === 'string' || typeof error.errorClass === 'string') && (typeof error.message === 'string' || typeof error.errorMessage === 'string');
1510
+ };
1511
+
1512
+ var generateConfigErrorMessage = function (errors) {
1513
+ return "Bugsnag configuration error\n" + __map_4(errors, function (err) {
1514
+ return "\"" + err.key + "\" " + err.message + " \n got " + stringify(err.value);
1515
+ }).join('\n\n');
1516
+ };
1517
+
1518
+ var generateNotifyUsageMessage = function (actual) {
1519
+ return "notify() expected error/opts parameters, got " + actual;
1520
+ };
1521
+
1522
+ var stringify = function (val) {
1523
+ return typeof val === 'object' ? JSON.stringify(val) : String(val);
1524
+ };
1525
+
1526
+ var _$BugsnagClient_4 = BugsnagClient;
1527
+
1528
+ var _$safeJsonStringify_19 = function (data, replacer, space, opts) {
1529
+ var filterKeys = opts && opts.filterKeys ? opts.filterKeys : [];
1530
+ var filterPaths = opts && opts.filterPaths ? opts.filterPaths : [];
1531
+ return JSON.stringify(prepareObjForSerialization(data, filterKeys, filterPaths), replacer, space);
1532
+ };
1533
+
1534
+ var MAX_DEPTH = 20;
1535
+ var MAX_EDGES = 25000;
1536
+ var MIN_PRESERVED_DEPTH = 8;
1537
+ var REPLACEMENT_NODE = '...';
1538
+
1539
+ function __isError_19(o) {
1540
+ return o instanceof Error || /^\[object (Error|(Dom)?Exception)\]$/.test(Object.prototype.toString.call(o));
1541
+ }
1542
+
1543
+ function throwsMessage(err) {
1544
+ return '[Throws: ' + (err ? err.message : '?') + ']';
1545
+ }
1546
+
1547
+ function find(haystack, needle) {
1548
+ for (var i = 0, len = haystack.length; i < len; i++) {
1549
+ if (haystack[i] === needle) return true;
1550
+ }
1551
+
1552
+ return false;
1553
+ } // returns true if the string `path` starts with any of the provided `paths`
1554
+
1555
+
1556
+ function isDescendent(paths, path) {
1557
+ for (var i = 0, len = paths.length; i < len; i++) {
1558
+ if (path.indexOf(paths[i]) === 0) return true;
1559
+ }
1560
+
1561
+ return false;
1562
+ }
1563
+
1564
+ function shouldFilter(patterns, key) {
1565
+ for (var i = 0, len = patterns.length; i < len; i++) {
1566
+ if (typeof patterns[i] === 'string' && patterns[i] === key) return true;
1567
+ if (patterns[i] && typeof patterns[i].test === 'function' && patterns[i].test(key)) return true;
1568
+ }
1569
+
1570
+ return false;
1571
+ }
1572
+
1573
+ function __isArray_19(obj) {
1574
+ return Object.prototype.toString.call(obj) === '[object Array]';
1575
+ }
1576
+
1577
+ function safelyGetProp(obj, prop) {
1578
+ try {
1579
+ return obj[prop];
1580
+ } catch (err) {
1581
+ return throwsMessage(err);
1582
+ }
1583
+ }
1584
+
1585
+ function prepareObjForSerialization(obj, filterKeys, filterPaths) {
1586
+ var seen = []; // store references to objects we have seen before
1587
+
1588
+ var edges = 0;
1589
+
1590
+ function visit(obj, path) {
1591
+ function edgesExceeded() {
1592
+ return path.length > MIN_PRESERVED_DEPTH && edges > MAX_EDGES;
1593
+ }
1594
+
1595
+ edges++;
1596
+ if (path.length > MAX_DEPTH) return REPLACEMENT_NODE;
1597
+ if (edgesExceeded()) return REPLACEMENT_NODE;
1598
+ if (obj === null || typeof obj !== 'object') return obj;
1599
+ if (find(seen, obj)) return '[Circular]';
1600
+ seen.push(obj);
1601
+
1602
+ if (typeof obj.toJSON === 'function') {
1603
+ try {
1604
+ // we're not going to count this as an edge because it
1605
+ // replaces the value of the currently visited object
1606
+ edges--;
1607
+ var fResult = visit(obj.toJSON(), path);
1608
+ seen.pop();
1609
+ return fResult;
1610
+ } catch (err) {
1611
+ return throwsMessage(err);
1612
+ }
1613
+ }
1614
+
1615
+ var er = __isError_19(obj);
1616
+
1617
+ if (er) {
1618
+ edges--;
1619
+ var eResult = visit({
1620
+ name: obj.name,
1621
+ message: obj.message
1622
+ }, path);
1623
+ seen.pop();
1624
+ return eResult;
1625
+ }
1626
+
1627
+ if (__isArray_19(obj)) {
1628
+ var aResult = [];
1629
+
1630
+ for (var i = 0, len = obj.length; i < len; i++) {
1631
+ if (edgesExceeded()) {
1632
+ aResult.push(REPLACEMENT_NODE);
1633
+ break;
1634
+ }
1635
+
1636
+ aResult.push(visit(obj[i], path.concat('[]')));
1637
+ }
1638
+
1639
+ seen.pop();
1640
+ return aResult;
1641
+ }
1642
+
1643
+ var result = {};
1644
+
1645
+ try {
1646
+ for (var prop in obj) {
1647
+ if (!Object.prototype.hasOwnProperty.call(obj, prop)) continue;
1648
+
1649
+ if (isDescendent(filterPaths, path.join('.')) && shouldFilter(filterKeys, prop)) {
1650
+ result[prop] = '[Filtered]';
1651
+ continue;
1652
+ }
1653
+
1654
+ if (edgesExceeded()) {
1655
+ result[prop] = REPLACEMENT_NODE;
1656
+ break;
1657
+ }
1658
+
1659
+ result[prop] = visit(safelyGetProp(obj, prop), path.concat(prop));
1660
+ }
1661
+ } catch (e) {}
1662
+
1663
+ seen.pop();
1664
+ return result;
1665
+ }
1666
+
1667
+ return visit(obj, []);
1668
+ }
1669
+
1670
+ var _$jsonPayload_13 = {};
1671
+ /* removed: var _$safeJsonStringify_19 = require('@bugsnag/safe-json-stringify'); */;
1672
+
1673
+ var REPORT_FILTER_PATHS = ['events.[].app', 'events.[].metaData', 'events.[].user', 'events.[].breadcrumbs', 'events.[].request', 'events.[].device'];
1674
+ var SESSION_FILTER_PATHS = ['device', 'app', 'user'];
1675
+
1676
+ _$jsonPayload_13.report = function (report, filterKeys) {
1677
+ var payload = _$safeJsonStringify_19(report, null, null, {
1678
+ filterPaths: REPORT_FILTER_PATHS,
1679
+ filterKeys: filterKeys
1680
+ });
1681
+
1682
+ if (payload.length > 10e5) {
1683
+ delete report.events[0].metaData;
1684
+ report.events[0].metaData = {
1685
+ notifier: "WARNING!\nSerialized payload was " + payload.length / 10e5 + "MB (limit = 1MB)\nmetaData was removed"
1686
+ };
1687
+ payload = _$safeJsonStringify_19(report, null, null, {
1688
+ filterPaths: REPORT_FILTER_PATHS,
1689
+ filterKeys: filterKeys
1690
+ });
1691
+ if (payload.length > 10e5) throw new Error('payload exceeded 1MB limit');
1692
+ }
1693
+
1694
+ return payload;
1695
+ };
1696
+
1697
+ _$jsonPayload_13.session = function (report, filterKeys) {
1698
+ var payload = _$safeJsonStringify_19(report, null, null, {
1699
+ filterPaths: SESSION_FILTER_PATHS,
1700
+ filterKeys: filterKeys
1701
+ });
1702
+ if (payload.length > 10e5) throw new Error('payload exceeded 1MB limit');
1703
+ return payload;
1704
+ };
1705
+
1706
+ var _$delivery_26 = {};
1707
+ var _this = this;
1708
+
1709
+ /* removed: var _$jsonPayload_13 = require('@bugsnag/core/lib/json-payload'); */;
1710
+
1711
+ var __isoDate_26 = _$esUtils_8.isoDate;
1712
+
1713
+ _$delivery_26 = function (client, win) {
1714
+ if (win === void 0) {
1715
+ win = window;
1716
+ }
1717
+
1718
+ return {
1719
+ sendReport: function (report, cb) {
1720
+ if (cb === void 0) {
1721
+ cb = function () {};
1722
+ }
1723
+
1724
+ var url = getApiUrl(client.config, 'notify', '4', win);
1725
+ var req = new win.XDomainRequest();
1726
+
1727
+ req.onload = function () {
1728
+ cb(null);
1729
+ };
1730
+
1731
+ req.open('POST', url);
1732
+ setTimeout(function () {
1733
+ try {
1734
+ req.send(_$jsonPayload_13.report(report, client.config.filters));
1735
+ } catch (e) {
1736
+ client._logger.error(e);
1737
+
1738
+ cb(e);
1739
+ }
1740
+ }, 0);
1741
+ },
1742
+ sendSession: function (session, cb) {
1743
+ if (cb === void 0) {
1744
+ cb = function () {};
1745
+ }
1746
+
1747
+ var url = getApiUrl(client.config, 'sessions', '1', win);
1748
+ var req = new win.XDomainRequest();
1749
+
1750
+ req.onload = function () {
1751
+ cb(null);
1752
+ };
1753
+
1754
+ req.open('POST', url);
1755
+ setTimeout(function () {
1756
+ try {
1757
+ req.send(_$jsonPayload_13.session(session, client.config.filters));
1758
+ } catch (e) {
1759
+ _this._logger.error(e);
1760
+
1761
+ cb(e);
1762
+ }
1763
+ }, 0);
1764
+ }
1765
+ };
1766
+ };
1767
+
1768
+ var getApiUrl = function (config, endpoint, version, win) {
1769
+ return matchPageProtocol(config.endpoints[endpoint], win.location.protocol) + "?apiKey=" + encodeURIComponent(config.apiKey) + "&payloadVersion=" + version + "&sentAt=" + encodeURIComponent(__isoDate_26());
1770
+ };
1771
+
1772
+ var matchPageProtocol = _$delivery_26._matchPageProtocol = function (endpoint, pageProtocol) {
1773
+ return pageProtocol === 'http:' ? endpoint.replace(/^https:/, 'http:') : endpoint;
1774
+ };
1775
+
1776
+ /* removed: var _$jsonPayload_13 = require('@bugsnag/core/lib/json-payload'); */;
1777
+
1778
+ var __isoDate_27 = _$esUtils_8.isoDate;
1779
+
1780
+ var _$delivery_27 = function (client, win) {
1781
+ if (win === void 0) {
1782
+ win = window;
1783
+ }
1784
+
1785
+ return {
1786
+ sendReport: function (report, cb) {
1787
+ if (cb === void 0) {
1788
+ cb = function () {};
1789
+ }
1790
+
1791
+ try {
1792
+ var url = client.config.endpoints.notify;
1793
+ var req = new win.XMLHttpRequest();
1794
+
1795
+ req.onreadystatechange = function () {
1796
+ if (req.readyState === win.XMLHttpRequest.DONE) cb(null);
1797
+ };
1798
+
1799
+ req.open('POST', url);
1800
+ req.setRequestHeader('Content-Type', 'application/json');
1801
+ req.setRequestHeader('Bugsnag-Api-Key', report.apiKey || client.config.apiKey);
1802
+ req.setRequestHeader('Bugsnag-Payload-Version', '4');
1803
+ req.setRequestHeader('Bugsnag-Sent-At', __isoDate_27());
1804
+ req.send(_$jsonPayload_13.report(report, client.config.filters));
1805
+ } catch (e) {
1806
+ client._logger.error(e);
1807
+ }
1808
+ },
1809
+ sendSession: function (session, cb) {
1810
+ if (cb === void 0) {
1811
+ cb = function () {};
1812
+ }
1813
+
1814
+ try {
1815
+ var url = client.config.endpoints.sessions;
1816
+ var req = new win.XMLHttpRequest();
1817
+
1818
+ req.onreadystatechange = function () {
1819
+ if (req.readyState === win.XMLHttpRequest.DONE) cb(null);
1820
+ };
1821
+
1822
+ req.open('POST', url);
1823
+ req.setRequestHeader('Content-Type', 'application/json');
1824
+ req.setRequestHeader('Bugsnag-Api-Key', client.config.apiKey);
1825
+ req.setRequestHeader('Bugsnag-Payload-Version', '1');
1826
+ req.setRequestHeader('Bugsnag-Sent-At', __isoDate_27());
1827
+ req.send(_$jsonPayload_13.session(session, client.config.filters));
1828
+ } catch (e) {
1829
+ client._logger.error(e);
1830
+ }
1831
+ }
1832
+ };
1833
+ };
1834
+
1835
+ /*
1836
+ * Sets the default context to be the current URL
1837
+ */
1838
+ var _$context_28 = {
1839
+ init: function (client, win) {
1840
+ if (win === void 0) {
1841
+ win = window;
1842
+ }
1843
+
1844
+ client.config.beforeSend.unshift(function (report) {
1845
+ if (report.context) return;
1846
+ report.context = win.location.pathname;
1847
+ });
1848
+ }
1849
+ };
1850
+
1851
+ function ___extends_29() { ___extends_29 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_29.apply(this, arguments); }
1852
+
1853
+ var __isoDate_29 = _$esUtils_8.isoDate;
1854
+ /*
1855
+ * Automatically detects browser device details
1856
+ */
1857
+
1858
+
1859
+ var _$device_29 = {
1860
+ init: function (client, nav) {
1861
+ if (nav === void 0) {
1862
+ nav = navigator;
1863
+ }
1864
+
1865
+ var device = {
1866
+ locale: nav.browserLanguage || nav.systemLanguage || nav.userLanguage || nav.language,
1867
+ userAgent: nav.userAgent // merge with anything already set on the client
1868
+
1869
+ };
1870
+ client.device = ___extends_29({}, device, client.device); // add time just as the report is sent
1871
+
1872
+ client.config.beforeSend.unshift(function (report) {
1873
+ report.device = ___extends_29({}, report.device, {
1874
+ time: __isoDate_29()
1875
+ });
1876
+ });
1877
+ }
1878
+ };
1879
+
1880
+ function ___extends_30() { ___extends_30 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_30.apply(this, arguments); }
1881
+
1882
+ /*
1883
+ * Sets the report request: { url } to be the current href
1884
+ */
1885
+ var _$request_30 = {
1886
+ init: function (client, win) {
1887
+ if (win === void 0) {
1888
+ win = window;
1889
+ }
1890
+
1891
+ client.config.beforeSend.unshift(function (report) {
1892
+ if (report.request && report.request.url) return;
1893
+ report.request = ___extends_30({}, report.request, {
1894
+ url: win.location.href
1895
+ });
1896
+ });
1897
+ }
1898
+ };
1899
+
1900
+ function ___extends_31() { ___extends_31 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_31.apply(this, arguments); }
1901
+
1902
+ var __isArray_31 = _$esUtils_8.isArray,
1903
+ __includes_31 = _$esUtils_8.includes;
1904
+
1905
+ /* removed: var _$inferReleaseStage_10 = require('@bugsnag/core/lib/infer-release-stage'); */;
1906
+
1907
+ var _$session_31 = {
1908
+ init: function (client) {
1909
+ return client.sessionDelegate(sessionDelegate);
1910
+ }
1911
+ };
1912
+ var sessionDelegate = {
1913
+ startSession: function (client) {
1914
+ var sessionClient = client;
1915
+ sessionClient._session = new client.BugsnagSession();
1916
+ var releaseStage = _$inferReleaseStage_10(sessionClient); // exit early if the reports should not be sent on the current releaseStage
1917
+
1918
+ if (__isArray_31(sessionClient.config.notifyReleaseStages) && !__includes_31(sessionClient.config.notifyReleaseStages, releaseStage)) {
1919
+ sessionClient._logger.warn("Session not sent due to releaseStage/notifyReleaseStages configuration");
1920
+
1921
+ return sessionClient;
1922
+ }
1923
+
1924
+ if (!sessionClient.config.endpoints.sessions) {
1925
+ sessionClient._logger.warn("Session not sent due to missing endpoints.sessions configuration");
1926
+
1927
+ return sessionClient;
1928
+ }
1929
+
1930
+ sessionClient._delivery.sendSession({
1931
+ notifier: sessionClient.notifier,
1932
+ device: sessionClient.device,
1933
+ app: ___extends_31({}, {
1934
+ releaseStage: releaseStage
1935
+ }, sessionClient.app),
1936
+ sessions: [{
1937
+ id: sessionClient._session.id,
1938
+ startedAt: sessionClient._session.startedAt,
1939
+ user: sessionClient.user
1940
+ }]
1941
+ });
1942
+
1943
+ return sessionClient;
1944
+ }
1945
+ };
1946
+
1947
+ function ___extends_32() { ___extends_32 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_32.apply(this, arguments); }
1948
+
1949
+ /*
1950
+ * Prevent collection of user IPs
1951
+ */
1952
+ var _$clientIp_32 = {
1953
+ init: function (client) {
1954
+ if (client.config.collectUserIp) return;
1955
+ client.config.beforeSend.push(function (report) {
1956
+ // If user.id is explicitly undefined, it will be missing from the payload. It needs
1957
+ // removing so that the following line replaces it
1958
+ if (report.user && typeof report.user.id === 'undefined') delete report.user.id;
1959
+ report.user = ___extends_32({
1960
+ id: '[NOT COLLECTED]'
1961
+ }, report.user);
1962
+ report.request = ___extends_32({
1963
+ clientIp: '[NOT COLLECTED]'
1964
+ }, report.request);
1965
+ });
1966
+ },
1967
+ configSchema: {
1968
+ collectUserIp: {
1969
+ defaultValue: function () {
1970
+ return true;
1971
+ },
1972
+ message: 'should be true|false',
1973
+ validate: function (value) {
1974
+ return value === true || value === false;
1975
+ }
1976
+ }
1977
+ }
1978
+ };
1979
+
1980
+ var _$consoleBreadcrumbs_33 = {};
1981
+ var __map_33 = _$esUtils_8.map,
1982
+ __reduce_33 = _$esUtils_8.reduce,
1983
+ __filter_33 = _$esUtils_8.filter;
1984
+ /*
1985
+ * Leaves breadcrumbs when console log methods are called
1986
+ */
1987
+
1988
+
1989
+ _$consoleBreadcrumbs_33.init = function (client) {
1990
+ var isDev = /^dev(elopment)?$/.test(client.config.releaseStage);
1991
+ var explicitlyDisabled = client.config.consoleBreadcrumbsEnabled === false;
1992
+ var implicitlyDisabled = (client.config.autoBreadcrumbs === false || isDev) && client.config.consoleBreadcrumbsEnabled !== true;
1993
+ if (explicitlyDisabled || implicitlyDisabled) return;
1994
+ __map_33(CONSOLE_LOG_METHODS, function (method) {
1995
+ var original = console[method];
1996
+
1997
+ console[method] = function () {
1998
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1999
+ args[_key] = arguments[_key];
2000
+ }
2001
+
2002
+ client.leaveBreadcrumb('Console output', __reduce_33(args, function (accum, arg, i) {
2003
+ // do the best/simplest stringification of each argument
2004
+ var stringified = '[Unknown value]'; // this may fail if the input is:
2005
+ // - an object whose [[Prototype]] is null (no toString)
2006
+ // - an object with a broken toString or @@toPrimitive implementation
2007
+
2008
+ try {
2009
+ stringified = String(arg);
2010
+ } catch (e) {} // if it stringifies to [object Object] attempt to JSON stringify
2011
+
2012
+
2013
+ if (stringified === '[object Object]') {
2014
+ // catch stringify errors and fallback to [object Object]
2015
+ try {
2016
+ stringified = JSON.stringify(arg);
2017
+ } catch (e) {}
2018
+ }
2019
+
2020
+ accum["[" + i + "]"] = stringified;
2021
+ return accum;
2022
+ }, {
2023
+ severity: method.indexOf('group') === 0 ? 'log' : method
2024
+ }), 'log');
2025
+ original.apply(console, args);
2026
+ };
2027
+
2028
+ console[method]._restore = function () {
2029
+ console[method] = original;
2030
+ };
2031
+ });
2032
+ };
2033
+
2034
+ _$consoleBreadcrumbs_33.configSchema = {
2035
+ consoleBreadcrumbsEnabled: {
2036
+ defaultValue: function () {
2037
+ return undefined;
2038
+ },
2039
+ validate: function (value) {
2040
+ return value === true || value === false || value === undefined;
2041
+ },
2042
+ message: 'should be true|false'
2043
+ }
2044
+ };
2045
+
2046
+ if ("production" !== 'production') {
2047
+ _$consoleBreadcrumbs_33.destroy = function () {
2048
+ return CONSOLE_LOG_METHODS.forEach(function (method) {
2049
+ if (typeof console[method]._restore === 'function') console[method]._restore();
2050
+ });
2051
+ };
2052
+ }
2053
+
2054
+ var CONSOLE_LOG_METHODS = __filter_33(['log', 'debug', 'info', 'warn', 'error'], function (method) {
2055
+ return typeof console !== 'undefined' && typeof console[method] === 'function';
2056
+ });
2057
+
2058
+ var _$inlineScriptContent_34 = {};
2059
+ var __reduce_34 = _$esUtils_8.reduce;
2060
+
2061
+ _$inlineScriptContent_34 = {
2062
+ init: function (client, doc, win) {
2063
+ if (doc === void 0) {
2064
+ doc = document;
2065
+ }
2066
+
2067
+ if (win === void 0) {
2068
+ win = window;
2069
+ }
2070
+
2071
+ var html = '';
2072
+ var DOMContentLoaded = false;
2073
+
2074
+ var getHtml = function () {
2075
+ return doc.documentElement.outerHTML;
2076
+ };
2077
+
2078
+ var originalLocation = win.location.href;
2079
+
2080
+ var addInlineContent = function (report) {
2081
+ var frame = report.stacktrace[0];
2082
+ if (!frame || !frame.file || !frame.lineNumber) return frame;
2083
+ if (frame.file.replace(/#.*$/, '') !== originalLocation.replace(/#.*$/, '')) return frame;
2084
+ if (!DOMContentLoaded || !html) html = getHtml();
2085
+ var htmlLines = ['<!-- DOC START -->'].concat(html.split('\n'));
2086
+
2087
+ var _extractScriptContent = extractScriptContent(htmlLines, frame.lineNumber - 1),
2088
+ script = _extractScriptContent.script,
2089
+ start = _extractScriptContent.start;
2090
+
2091
+ var code = __reduce_34(script, function (accum, line, i) {
2092
+ if (Math.abs(start + i + 1 - frame.lineNumber) > 10) return accum;
2093
+ accum["" + (start + i + 1)] = line;
2094
+ return accum;
2095
+ }, {});
2096
+ frame.code = code;
2097
+ report.updateMetaData('script', {
2098
+ content: script.join('\n')
2099
+ });
2100
+ }; // get whatever HTML exists at this point in time
2101
+
2102
+
2103
+ html = getHtml();
2104
+ var prev = doc.onreadystatechange; // then update it when the DOM content has loaded
2105
+
2106
+ doc.onreadystatechange = function () {
2107
+ // IE8 compatible alternative to document#DOMContentLoaded
2108
+ if (doc.readyState === 'interactive') {
2109
+ html = getHtml();
2110
+ DOMContentLoaded = true;
2111
+ }
2112
+
2113
+ if (typeof prev === 'function') prev.apply(this, arguments);
2114
+ };
2115
+
2116
+ client.config.beforeSend.unshift(addInlineContent);
2117
+ }
2118
+ };
2119
+ var scriptStartRe = /^.*<script.*?>/;
2120
+ var scriptEndRe = /<\/script>.*$/;
2121
+
2122
+ var extractScriptContent = _$inlineScriptContent_34.extractScriptContent = function (lines, startLine) {
2123
+ // search down for </script>
2124
+ var line = startLine;
2125
+
2126
+ while (line < lines.length && !scriptEndRe.test(lines[line])) {
2127
+ line++;
2128
+ } // search up for <script>
2129
+
2130
+
2131
+ var end = line;
2132
+
2133
+ while (line > 0 && !scriptStartRe.test(lines[line])) {
2134
+ line--;
2135
+ }
2136
+
2137
+ var start = line; // strip <script> tags so that lines just contain js content
2138
+
2139
+ var script = lines.slice(start, end + 1);
2140
+ script[0] = script[0].replace(scriptStartRe, '');
2141
+ script[script.length - 1] = script[script.length - 1].replace(scriptEndRe, ''); // return the array of lines, and the line number the script started at
2142
+
2143
+ return {
2144
+ script: script,
2145
+ start: start
2146
+ };
2147
+ };
2148
+
2149
+ /*
2150
+ * Leaves breadcrumbs when the user interacts with the DOM
2151
+ */
2152
+ var _$interactionBreadcrumbs_35 = {
2153
+ init: function (client, win) {
2154
+ if (win === void 0) {
2155
+ win = window;
2156
+ }
2157
+
2158
+ if (!('addEventListener' in win)) return;
2159
+ var explicitlyDisabled = client.config.interactionBreadcrumbsEnabled === false;
2160
+ var implicitlyDisabled = client.config.autoBreadcrumbs === false && client.config.interactionBreadcrumbsEnabled !== true;
2161
+ if (explicitlyDisabled || implicitlyDisabled) return;
2162
+ win.addEventListener('click', function (event) {
2163
+ var targetText, targetSelector;
2164
+
2165
+ try {
2166
+ targetText = getNodeText(event.target);
2167
+ targetSelector = getNodeSelector(event.target, win);
2168
+ } catch (e) {
2169
+ targetText = '[hidden]';
2170
+ targetSelector = '[hidden]';
2171
+
2172
+ client._logger.error('Cross domain error when tracking click event. See docs: https://tinyurl.com/y94fq5zm');
2173
+ }
2174
+
2175
+ client.leaveBreadcrumb('UI click', {
2176
+ targetText: targetText,
2177
+ targetSelector: targetSelector
2178
+ }, 'user');
2179
+ }, true);
2180
+ },
2181
+ configSchema: {
2182
+ interactionBreadcrumbsEnabled: {
2183
+ defaultValue: function () {
2184
+ return undefined;
2185
+ },
2186
+ validate: function (value) {
2187
+ return value === true || value === false || value === undefined;
2188
+ },
2189
+ message: 'should be true|false'
2190
+ }
2191
+ } // extract text content from a element
2192
+
2193
+ };
2194
+
2195
+ var getNodeText = function (el) {
2196
+ var text = el.textContent || el.innerText || '';
2197
+ if (!text && (el.type === 'submit' || el.type === 'button')) text = el.value;
2198
+ text = text.replace(/^\s+|\s+$/g, ''); // trim whitespace
2199
+
2200
+ return truncate(text, 140);
2201
+ }; // Create a label from tagname, id and css class of the element
2202
+
2203
+
2204
+ function getNodeSelector(el, win) {
2205
+ var parts = [el.tagName];
2206
+ if (el.id) parts.push('#' + el.id);
2207
+ if (el.className && el.className.length) parts.push("." + el.className.split(' ').join('.')); // Can't get much more advanced with the current browser
2208
+
2209
+ if (!win.document.querySelectorAll || !Array.prototype.indexOf) return parts.join('');
2210
+
2211
+ try {
2212
+ if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join('');
2213
+ } catch (e) {
2214
+ // Sometimes the query selector can be invalid just return it as-is
2215
+ return parts.join('');
2216
+ } // try to get a more specific selector if this one matches more than one element
2217
+
2218
+
2219
+ if (el.parentNode.childNodes.length > 1) {
2220
+ var index = Array.prototype.indexOf.call(el.parentNode.childNodes, el) + 1;
2221
+ parts.push(":nth-child(" + index + ")");
2222
+ }
2223
+
2224
+ if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join(''); // try prepending the parent node selector
2225
+
2226
+ if (el.parentNode) return getNodeSelector(el.parentNode, win) + " > " + parts.join('');
2227
+ return parts.join('');
2228
+ }
2229
+
2230
+ function truncate(value, length) {
2231
+ var ommision = '(...)';
2232
+ if (value && value.length <= length) return value;
2233
+ return value.slice(0, length - ommision.length) + ommision;
2234
+ }
2235
+
2236
+ var _$navigationBreadcrumbs_36 = {};
2237
+ /*
2238
+ * Leaves breadcrumbs when navigation methods are called or events are emitted
2239
+ */
2240
+ _$navigationBreadcrumbs_36.init = function (client, win) {
2241
+ if (win === void 0) {
2242
+ win = window;
2243
+ }
2244
+
2245
+ if (!('addEventListener' in win)) return;
2246
+ var explicitlyDisabled = client.config.navigationBreadcrumbsEnabled === false;
2247
+ var implicitlyDisabled = client.config.autoBreadcrumbs === false && client.config.navigationBreadcrumbsEnabled !== true;
2248
+ if (explicitlyDisabled || implicitlyDisabled) return; // returns a function that will drop a breadcrumb with a given name
2249
+
2250
+ var drop = function (name) {
2251
+ return function () {
2252
+ return client.leaveBreadcrumb(name, {}, 'navigation');
2253
+ };
2254
+ }; // simple drops – just names, no meta
2255
+
2256
+
2257
+ win.addEventListener('pagehide', drop('Page hidden'), true);
2258
+ win.addEventListener('pageshow', drop('Page shown'), true);
2259
+ win.addEventListener('load', drop('Page loaded'), true);
2260
+ win.document.addEventListener('DOMContentLoaded', drop('DOMContentLoaded'), true); // some browsers like to emit popstate when the page loads, so only add the popstate listener after that
2261
+
2262
+ win.addEventListener('load', function () {
2263
+ return win.addEventListener('popstate', drop('Navigated back'), true);
2264
+ }); // hashchange has some metaData that we care about
2265
+
2266
+ win.addEventListener('hashchange', function (event) {
2267
+ var metaData = event.oldURL ? {
2268
+ from: relativeLocation(event.oldURL, win),
2269
+ to: relativeLocation(event.newURL, win),
2270
+ state: getCurrentState(win)
2271
+ } : {
2272
+ to: relativeLocation(win.location.href, win)
2273
+ };
2274
+ client.leaveBreadcrumb('Hash changed', metaData, 'navigation');
2275
+ }, true); // the only way to know about replaceState/pushState is to wrap them… >_<
2276
+
2277
+ if (win.history.replaceState) wrapHistoryFn(client, win.history, 'replaceState', win);
2278
+ if (win.history.pushState) wrapHistoryFn(client, win.history, 'pushState', win);
2279
+ client.leaveBreadcrumb('Bugsnag loaded', {}, 'navigation');
2280
+ };
2281
+
2282
+ _$navigationBreadcrumbs_36.configSchema = {
2283
+ navigationBreadcrumbsEnabled: {
2284
+ defaultValue: function () {
2285
+ return undefined;
2286
+ },
2287
+ validate: function (value) {
2288
+ return value === true || value === false || value === undefined;
2289
+ },
2290
+ message: 'should be true|false'
2291
+ }
2292
+ };
2293
+
2294
+ if ("production" !== 'production') {
2295
+ _$navigationBreadcrumbs_36.destroy = function (win) {
2296
+ if (win === void 0) {
2297
+ win = window;
2298
+ }
2299
+
2300
+ win.history.replaceState._restore();
2301
+
2302
+ win.history.pushState._restore();
2303
+ };
2304
+ } // takes a full url like http://foo.com:1234/pages/01.html?yes=no#section-2 and returns
2305
+ // just the path and hash parts, e.g. /pages/01.html?yes=no#section-2
2306
+
2307
+
2308
+ var relativeLocation = function (url, win) {
2309
+ var a = win.document.createElement('A');
2310
+ a.href = url;
2311
+ return "" + a.pathname + a.search + a.hash;
2312
+ };
2313
+
2314
+ var stateChangeToMetaData = function (win, state, title, url) {
2315
+ var currentPath = relativeLocation(win.location.href, win);
2316
+ return {
2317
+ title: title,
2318
+ state: state,
2319
+ prevState: getCurrentState(win),
2320
+ to: url || currentPath,
2321
+ from: currentPath
2322
+ };
2323
+ };
2324
+
2325
+ var wrapHistoryFn = function (client, target, fn, win) {
2326
+ var orig = target[fn];
2327
+
2328
+ target[fn] = function (state, title, url) {
2329
+ client.leaveBreadcrumb("History " + fn, stateChangeToMetaData(win, state, title, url), 'navigation'); // if throttle plugin is in use, refresh the event sent count
2330
+
2331
+ if (typeof client.refresh === 'function') client.refresh(); // if the client is operating in auto session-mode, a new route should trigger a new session
2332
+
2333
+ if (client.config.autoCaptureSessions) client.startSession(); // Internet Explorer will convert `undefined` to a string when passed, causing an unintended redirect
2334
+ // to '/undefined'. therefore we only pass the url if it's not undefined.
2335
+
2336
+ orig.apply(target, [state, title].concat(url !== undefined ? url : []));
2337
+ };
2338
+
2339
+ target[fn]._restore = function () {
2340
+ target[fn] = orig;
2341
+ };
2342
+ };
2343
+
2344
+ var getCurrentState = function (win) {
2345
+ try {
2346
+ return win.history.state;
2347
+ } catch (e) {}
2348
+ };
2349
+
2350
+ var _$networkBreadcrumbs_37 = {};
2351
+ var BREADCRUMB_TYPE = 'request'; // keys to safely store metadata on the request object
2352
+
2353
+ var REQUEST_SETUP_KEY = 'BS~~S';
2354
+ var REQUEST_URL_KEY = 'BS~~U';
2355
+ var REQUEST_METHOD_KEY = 'BS~~M';
2356
+
2357
+ var __includes_37 = _$esUtils_8.includes;
2358
+
2359
+ var restoreFunctions = [];
2360
+ var client;
2361
+ var win;
2362
+ var getIgnoredUrls;
2363
+
2364
+ var defaultIgnoredUrls = function () {
2365
+ return [client.config.endpoints.notify, client.config.endpoints.sessions];
2366
+ };
2367
+ /*
2368
+ * Leaves breadcrumbs when network requests occur
2369
+ */
2370
+
2371
+
2372
+ _$networkBreadcrumbs_37.name = 'networkBreadcrumbs';
2373
+
2374
+ _$networkBreadcrumbs_37.init = function (_client, _getIgnoredUrls, _win) {
2375
+ if (_getIgnoredUrls === void 0) {
2376
+ _getIgnoredUrls = defaultIgnoredUrls;
2377
+ }
2378
+
2379
+ if (_win === void 0) {
2380
+ _win = window;
2381
+ }
2382
+
2383
+ var explicitlyDisabled = _client.config.networkBreadcrumbsEnabled === false;
2384
+ var implicitlyDisabled = _client.config.autoBreadcrumbs === false && _client.config.networkBreadcrumbsEnabled !== true;
2385
+ if (explicitlyDisabled || implicitlyDisabled) return;
2386
+ client = _client;
2387
+ win = _win;
2388
+ getIgnoredUrls = _getIgnoredUrls;
2389
+ monkeyPatchXMLHttpRequest();
2390
+ monkeyPatchFetch();
2391
+ };
2392
+
2393
+ _$networkBreadcrumbs_37.configSchema = {
2394
+ networkBreadcrumbsEnabled: {
2395
+ defaultValue: function () {
2396
+ return undefined;
2397
+ },
2398
+ validate: function (value) {
2399
+ return value === true || value === false || value === undefined;
2400
+ },
2401
+ message: 'should be true|false'
2402
+ }
2403
+ };
2404
+
2405
+ if ("production" !== 'production') {
2406
+ _$networkBreadcrumbs_37.destroy = function () {
2407
+ restoreFunctions.forEach(function (fn) {
2408
+ return fn();
2409
+ });
2410
+ restoreFunctions = [];
2411
+ };
2412
+ } // XMLHttpRequest monkey patch
2413
+
2414
+
2415
+ var monkeyPatchXMLHttpRequest = function () {
2416
+ if (!('addEventListener' in win.XMLHttpRequest.prototype)) return;
2417
+ var nativeOpen = win.XMLHttpRequest.prototype.open; // override native open()
2418
+
2419
+ win.XMLHttpRequest.prototype.open = function open(method, url) {
2420
+ // store url and HTTP method for later
2421
+ this[REQUEST_URL_KEY] = url;
2422
+ this[REQUEST_METHOD_KEY] = method; // if we have already setup listeners, it means open() was called twice, we need to remove
2423
+ // the listeners and recreate them
2424
+
2425
+ if (this[REQUEST_SETUP_KEY]) {
2426
+ this.removeEventListener('load', handleXHRLoad);
2427
+ this.removeEventListener('error', handleXHRError);
2428
+ } // attach load event listener
2429
+
2430
+
2431
+ this.addEventListener('load', handleXHRLoad); // attach error event listener
2432
+
2433
+ this.addEventListener('error', handleXHRError);
2434
+ this[REQUEST_SETUP_KEY] = true;
2435
+ nativeOpen.apply(this, arguments);
2436
+ };
2437
+
2438
+ if ("production" !== 'production') {
2439
+ restoreFunctions.push(function () {
2440
+ win.XMLHttpRequest.prototype.open = nativeOpen;
2441
+ });
2442
+ }
2443
+ };
2444
+
2445
+ function handleXHRLoad() {
2446
+ if (__includes_37(getIgnoredUrls(), this[REQUEST_URL_KEY])) {
2447
+ // don't leave a network breadcrumb from bugsnag notify calls
2448
+ return;
2449
+ }
2450
+
2451
+ var metaData = {
2452
+ status: this.status,
2453
+ request: this[REQUEST_METHOD_KEY] + " " + this[REQUEST_URL_KEY]
2454
+ };
2455
+
2456
+ if (this.status >= 400) {
2457
+ // contacted server but got an error response
2458
+ client.leaveBreadcrumb('XMLHttpRequest failed', metaData, BREADCRUMB_TYPE);
2459
+ } else {
2460
+ client.leaveBreadcrumb('XMLHttpRequest succeeded', metaData, BREADCRUMB_TYPE);
2461
+ }
2462
+ }
2463
+
2464
+ function handleXHRError() {
2465
+ if (__includes_37(getIgnoredUrls, this[REQUEST_URL_KEY])) {
2466
+ // don't leave a network breadcrumb from bugsnag notify calls
2467
+ return;
2468
+ } // failed to contact server
2469
+
2470
+
2471
+ client.leaveBreadcrumb('XMLHttpRequest error', {
2472
+ request: this[REQUEST_METHOD_KEY] + " " + this[REQUEST_URL_KEY]
2473
+ }, BREADCRUMB_TYPE);
2474
+ } // window.fetch monkey patch
2475
+
2476
+
2477
+ var monkeyPatchFetch = function () {
2478
+ // only patch it if it exists and if it is not a polyfill (patching a polyfilled
2479
+ // fetch() results in duplicate breadcrumbs for the same request because the
2480
+ // implementation uses XMLHttpRequest which is also patched)
2481
+ if (!('fetch' in win) || win.fetch.polyfill) return;
2482
+ var oldFetch = win.fetch;
2483
+
2484
+ win.fetch = function fetch() {
2485
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2486
+ args[_key] = arguments[_key];
2487
+ }
2488
+
2489
+ var url = args[0],
2490
+ options = args[1];
2491
+ var method = 'GET';
2492
+
2493
+ if (options && options.method) {
2494
+ method = options.method;
2495
+ }
2496
+
2497
+ return new Promise(function (resolve, reject) {
2498
+ // pass through to native fetch
2499
+ oldFetch.apply(void 0, args).then(function (response) {
2500
+ handleFetchSuccess(response, method, url);
2501
+ resolve(response);
2502
+ })["catch"](function (error) {
2503
+ handleFetchError(method, url);
2504
+ reject(error);
2505
+ });
2506
+ });
2507
+ };
2508
+
2509
+ if ("production" !== 'production') {
2510
+ restoreFunctions.push(function () {
2511
+ win.fetch = oldFetch;
2512
+ });
2513
+ }
2514
+ };
2515
+
2516
+ var handleFetchSuccess = function (response, method, url) {
2517
+ var metaData = {
2518
+ status: response.status,
2519
+ request: method + " " + url
2520
+ };
2521
+
2522
+ if (response.status >= 400) {
2523
+ // when the request comes back with a 4xx or 5xx status it does not reject the fetch promise,
2524
+ client.leaveBreadcrumb('fetch() failed', metaData, BREADCRUMB_TYPE);
2525
+ } else {
2526
+ client.leaveBreadcrumb('fetch() succeeded', metaData, BREADCRUMB_TYPE);
2527
+ }
2528
+ };
2529
+
2530
+ var handleFetchError = function (method, url) {
2531
+ client.leaveBreadcrumb('fetch() error', {
2532
+ request: method + " " + url
2533
+ }, BREADCRUMB_TYPE);
2534
+ };
2535
+
2536
+ var __intRange_38 = _$validators_15.intRange;
2537
+ /*
2538
+ * Throttles and dedupes error reports
2539
+ */
2540
+
2541
+
2542
+ var _$throttle_38 = {
2543
+ init: function (client) {
2544
+ // track sent events for each init of the plugin
2545
+ var n = 0; // add beforeSend hook
2546
+
2547
+ client.config.beforeSend.push(function (report) {
2548
+ // have max events been sent already?
2549
+ if (n >= client.config.maxEvents) return report.ignore();
2550
+ n++;
2551
+ });
2552
+
2553
+ client.refresh = function () {
2554
+ n = 0;
2555
+ };
2556
+ },
2557
+ configSchema: {
2558
+ maxEvents: {
2559
+ defaultValue: function () {
2560
+ return 10;
2561
+ },
2562
+ message: 'should be a positive integer ≤100',
2563
+ validate: function (val) {
2564
+ return __intRange_38(1, 100)(val);
2565
+ }
2566
+ }
2567
+ }
2568
+ };
2569
+
2570
+ var _$stripQueryString_39 = {};
2571
+ function ___extends_39() { ___extends_39 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_39.apply(this, arguments); }
2572
+
2573
+ /*
2574
+ * Remove query strings (and fragments) from stacktraces
2575
+ */
2576
+ var __map_39 = _$esUtils_8.map;
2577
+
2578
+ _$stripQueryString_39 = {
2579
+ init: function (client) {
2580
+ client.config.beforeSend.push(function (report) {
2581
+ report.stacktrace = __map_39(report.stacktrace, function (frame) {
2582
+ return ___extends_39({}, frame, {
2583
+ file: strip(frame.file)
2584
+ });
2585
+ });
2586
+ });
2587
+ }
2588
+ };
2589
+
2590
+ var strip = _$stripQueryString_39._strip = function (str) {
2591
+ return typeof str === 'string' ? str.replace(/\?.*$/, '').replace(/#.*$/, '') : str;
2592
+ };
2593
+
2594
+ /*
2595
+ * Automatically notifies Bugsnag when window.onerror is called
2596
+ */
2597
+ var _$onerror_40 = {
2598
+ init: function (client, win) {
2599
+ if (win === void 0) {
2600
+ win = window;
2601
+ }
2602
+
2603
+ function onerror(messageOrEvent, url, lineNo, charNo, error) {
2604
+ // Ignore errors with no info due to CORS settings
2605
+ if (lineNo === 0 && /Script error\.?/.test(messageOrEvent)) {
2606
+ client._logger.warn('Ignoring cross-domain or eval script error. See docs: https://tinyurl.com/y94fq5zm');
2607
+ } else {
2608
+ // any error sent to window.onerror is unhandled and has severity=error
2609
+ var handledState = {
2610
+ severity: 'error',
2611
+ unhandled: true,
2612
+ severityReason: {
2613
+ type: 'unhandledException'
2614
+ }
2615
+ };
2616
+ var report; // window.onerror can be called in a number of ways. This big if-else is how we
2617
+ // figure out which arguments were supplied, and what kind of values it received.
2618
+
2619
+ if (error) {
2620
+ // if the last parameter (error) was supplied, this is a modern browser's
2621
+ // way of saying "this value was thrown and not caught"
2622
+ if (error.name && error.message) {
2623
+ // if it looks like an error, construct a report object using its stack
2624
+ report = new client.BugsnagReport(error.name, error.message, decorateStack(client.BugsnagReport.getStacktrace(error), url, lineNo, charNo), handledState, error);
2625
+ } else {
2626
+ // otherwise, for non error values that were thrown, stringify it for
2627
+ // use as the error message and get/generate a stacktrace
2628
+ report = new client.BugsnagReport('window.onerror', String(error), decorateStack(client.BugsnagReport.getStacktrace(error, 1), url, lineNo, charNo), handledState, error); // include the raw input as metadata
2629
+
2630
+ report.updateMetaData('window onerror', {
2631
+ error: error
2632
+ });
2633
+ }
2634
+ } else if ( // This complex case detects "error" events that are typically synthesised
2635
+ // by jquery's trigger method (although can be created in other ways). In
2636
+ // order to detect this:
2637
+ // - the first argument (message) must exist and be an object (most likely it's a jQuery event)
2638
+ // - the second argument (url) must either not exist or be something other than a string (if it
2639
+ // exists and is not a string, it'll be the extraParameters argument from jQuery's trigger()
2640
+ // function)
2641
+ // - the third, fourth and fifth arguments must not exist (lineNo, charNo and error)
2642
+ typeof messageOrEvent === 'object' && messageOrEvent !== null && (!url || typeof url !== 'string') && !lineNo && !charNo && !error) {
2643
+ // The jQuery event may have a "type" property, if so use it as part of the error message
2644
+ var name = messageOrEvent.type ? "Event: " + messageOrEvent.type : 'window.onerror'; // attempt to find a message from one of the conventional properties, but
2645
+ // default to empty string (the report will fill it with a placeholder)
2646
+
2647
+ var message = messageOrEvent.message || messageOrEvent.detail || '';
2648
+ report = new client.BugsnagReport(name, message, client.BugsnagReport.getStacktrace(new Error(), 1).slice(1), handledState, messageOrEvent); // include the raw input as metadata – it might contain more info than we extracted
2649
+
2650
+ report.updateMetaData('window onerror', {
2651
+ event: messageOrEvent,
2652
+ extraParameters: url
2653
+ });
2654
+ } else {
2655
+ // Lastly, if there was no "error" parameter this event was probably from an old
2656
+ // browser that doesn't support that. Instead we need to generate a stacktrace.
2657
+ report = new client.BugsnagReport('window.onerror', String(messageOrEvent), decorateStack(client.BugsnagReport.getStacktrace(error, 1), url, lineNo, charNo), handledState, messageOrEvent); // include the raw input as metadata – it might contain more info than we extracted
2658
+
2659
+ report.updateMetaData('window onerror', {
2660
+ event: messageOrEvent
2661
+ });
2662
+ }
2663
+
2664
+ client.notify(report);
2665
+ }
2666
+
2667
+ if (typeof prevOnError === 'function') prevOnError.apply(this, arguments);
2668
+ }
2669
+
2670
+ var prevOnError = win.onerror;
2671
+ win.onerror = onerror;
2672
+ } // Sometimes the stacktrace has less information than was passed to window.onerror.
2673
+ // This function will augment the first stackframe with any useful info that was
2674
+ // received as arguments to the onerror callback.
2675
+
2676
+ };
2677
+
2678
+ var decorateStack = function (stack, url, lineNo, charNo) {
2679
+ var culprit = stack[0];
2680
+ if (!culprit) return stack;
2681
+ if (!culprit.fileName && typeof url === 'string') culprit.setFileName(url);
2682
+ if (!culprit.lineNumber && isActualNumber(lineNo)) culprit.setLineNumber(lineNo);
2683
+
2684
+ if (!culprit.columnNumber) {
2685
+ if (isActualNumber(charNo)) {
2686
+ culprit.setColumnNumber(charNo);
2687
+ } else if (window.event && isActualNumber(window.event.errorCharacter)) {
2688
+ culprit.setColumnNumber(window.event.errorCharacter);
2689
+ }
2690
+ }
2691
+
2692
+ return stack;
2693
+ };
2694
+
2695
+ var isActualNumber = function (n) {
2696
+ return typeof n === 'number' && String.call(n) !== 'NaN';
2697
+ };
2698
+
2699
+ var _$unhandledRejection_41 = {};
2700
+ /* removed: var _$hasStack_9 = require('@bugsnag/core/lib/has-stack'); */;
2701
+
2702
+ var __reduce_41 = _$esUtils_8.reduce;
2703
+
2704
+ /* removed: var _$errorStackParser_7 = require('@bugsnag/core/lib/error-stack-parser'); */;
2705
+
2706
+ /* removed: var _$iserror_11 = require('@bugsnag/core/lib/iserror'); */;
2707
+ /*
2708
+ * Automatically notifies Bugsnag when window.onunhandledrejection is called
2709
+ */
2710
+
2711
+
2712
+ var _listener;
2713
+
2714
+ _$unhandledRejection_41.init = function (client, win) {
2715
+ if (win === void 0) {
2716
+ win = window;
2717
+ }
2718
+
2719
+ var listener = function (event) {
2720
+ var error = event.reason;
2721
+ var isBluebird = false; // accessing properties on event.detail can throw errors (see #394)
2722
+
2723
+ try {
2724
+ if (event.detail && event.detail.reason) {
2725
+ error = event.detail.reason;
2726
+ isBluebird = true;
2727
+ }
2728
+ } catch (e) {}
2729
+
2730
+ var handledState = {
2731
+ severity: 'error',
2732
+ unhandled: true,
2733
+ severityReason: {
2734
+ type: 'unhandledPromiseRejection'
2735
+ }
2736
+ };
2737
+ var report;
2738
+
2739
+ if (error && _$hasStack_9(error)) {
2740
+ // if it quacks like an Error…
2741
+ report = new client.BugsnagReport(error.name, error.message, _$errorStackParser_7.parse(error), handledState, error);
2742
+
2743
+ if (isBluebird) {
2744
+ report.stacktrace = __reduce_41(report.stacktrace, fixBluebirdStacktrace(error), []);
2745
+ }
2746
+ } else {
2747
+ // if it doesn't…
2748
+ var msg = 'Rejection reason was not an Error. See "Promise" tab for more detail.';
2749
+ report = new client.BugsnagReport(error && error.name ? error.name : 'UnhandledRejection', error && error.message ? error.message : msg, [], handledState, error); // stuff the rejection reason into metaData, it could be useful
2750
+
2751
+ report.updateMetaData('promise', 'rejection reason', serializableReason(error));
2752
+ }
2753
+
2754
+ client.notify(report);
2755
+ };
2756
+
2757
+ if ('addEventListener' in win) {
2758
+ win.addEventListener('unhandledrejection', listener);
2759
+ } else {
2760
+ win.onunhandledrejection = function (reason, promise) {
2761
+ listener({
2762
+ detail: {
2763
+ reason: reason,
2764
+ promise: promise
2765
+ }
2766
+ });
2767
+ };
2768
+ }
2769
+
2770
+ _listener = listener;
2771
+ };
2772
+
2773
+ if ("production" !== 'production') {
2774
+ _$unhandledRejection_41.destroy = function (win) {
2775
+ if (win === void 0) {
2776
+ win = window;
2777
+ }
2778
+
2779
+ if (_listener) {
2780
+ if ('addEventListener' in win) {
2781
+ win.removeEventListener('unhandledrejection', _listener);
2782
+ } else {
2783
+ win.onunhandledrejection = null;
2784
+ }
2785
+ }
2786
+
2787
+ _listener = null;
2788
+ };
2789
+ }
2790
+
2791
+ var serializableReason = function (err) {
2792
+ if (err === null || err === undefined) {
2793
+ return 'undefined (or null)';
2794
+ } else if (_$iserror_11(err)) {
2795
+ var _ref;
2796
+
2797
+ return _ref = {}, _ref[Object.prototype.toString.call(err)] = {
2798
+ name: err.name,
2799
+ message: err.message,
2800
+ code: err.code,
2801
+ stack: err.stack
2802
+ }, _ref;
2803
+ } else {
2804
+ return err;
2805
+ }
2806
+ }; // The stack parser on bluebird stacks in FF get a suprious first frame:
2807
+ //
2808
+ // Error: derp
2809
+ // b@http://localhost:5000/bluebird.html:22:24
2810
+ // a@http://localhost:5000/bluebird.html:18:9
2811
+ // @http://localhost:5000/bluebird.html:14:9
2812
+ //
2813
+ // results in
2814
+ // […]
2815
+ // 0: Object { file: "Error: derp", method: undefined, lineNumber: undefined, … }
2816
+ // 1: Object { file: "http://localhost:5000/bluebird.html", method: "b", lineNumber: 22, … }
2817
+ // 2: Object { file: "http://localhost:5000/bluebird.html", method: "a", lineNumber: 18, … }
2818
+ // 3: Object { file: "http://localhost:5000/bluebird.html", lineNumber: 14, columnNumber: 9, … }
2819
+ //
2820
+ // so the following reduce/accumulator function removes such frames
2821
+ //
2822
+ // Bluebird pads method names with spaces so trim that too…
2823
+ // https://github.com/petkaantonov/bluebird/blob/b7f21399816d02f979fe434585334ce901dcaf44/src/debuggability.js#L568-L571
2824
+
2825
+
2826
+ var fixBluebirdStacktrace = function (error) {
2827
+ return function (accum, frame) {
2828
+ if (frame.file === error.toString()) return accum;
2829
+
2830
+ if (frame.method) {
2831
+ frame.method = frame.method.replace(/^\s+/, '');
2832
+ }
2833
+
2834
+ return accum.concat(frame);
2835
+ };
2836
+ };
2837
+
2838
+ var _$notifier_2 = {};
2839
+ function ___extends_2() { ___extends_2 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return ___extends_2.apply(this, arguments); }
2840
+
2841
+ var name = 'Bugsnag JavaScript';
2842
+ var version = '6.2.0';
2843
+ var url = 'https://github.com/bugsnag/bugsnag-js';
2844
+
2845
+ /* removed: var _$BugsnagClient_4 = require('@bugsnag/core/client'); */;
2846
+
2847
+ /* removed: var _$BugsnagReport_24 = require('@bugsnag/core/report'); */;
2848
+
2849
+ /* removed: var _$Session_25 = require('@bugsnag/core/session'); */;
2850
+
2851
+ /* removed: var _$BugsnagBreadcrumb_3 = require('@bugsnag/core/breadcrumb'); */;
2852
+
2853
+ var __map_2 = _$esUtils_8.map; // extend the base config schema with some browser-specific options
2854
+
2855
+
2856
+ var __schema_2 = ___extends_2({}, _$config_5.schema, _$config_1);
2857
+
2858
+ /* removed: var _$onerror_40 = require('@bugsnag/plugin-window-onerror'); */;
2859
+
2860
+ /* removed: var _$unhandledRejection_41 = require('@bugsnag/plugin-window-unhandled-rejection'); */;
2861
+
2862
+ /* removed: var _$device_29 = require('@bugsnag/plugin-browser-device'); */;
2863
+
2864
+ /* removed: var _$context_28 = require('@bugsnag/plugin-browser-context'); */;
2865
+
2866
+ /* removed: var _$request_30 = require('@bugsnag/plugin-browser-request'); */;
2867
+
2868
+ /* removed: var _$throttle_38 = require('@bugsnag/plugin-simple-throttle'); */;
2869
+
2870
+ /* removed: var _$consoleBreadcrumbs_33 = require('@bugsnag/plugin-console-breadcrumbs'); */;
2871
+
2872
+ /* removed: var _$networkBreadcrumbs_37 = require('@bugsnag/plugin-network-breadcrumbs'); */;
2873
+
2874
+ /* removed: var _$navigationBreadcrumbs_36 = require('@bugsnag/plugin-navigation-breadcrumbs'); */;
2875
+
2876
+ /* removed: var _$interactionBreadcrumbs_35 = require('@bugsnag/plugin-interaction-breadcrumbs'); */;
2877
+
2878
+ /* removed: var _$inlineScriptContent_34 = require('@bugsnag/plugin-inline-script-content'); */;
2879
+
2880
+ /* removed: var _$session_31 = require('@bugsnag/plugin-browser-session'); */;
2881
+
2882
+ /* removed: var _$clientIp_32 = require('@bugsnag/plugin-client-ip'); */;
2883
+
2884
+ /* removed: var _$stripQueryString_39 = require('@bugsnag/plugin-strip-query-string'); */; // delivery mechanisms
2885
+
2886
+
2887
+ /* removed: var _$delivery_26 = require('@bugsnag/delivery-x-domain-request'); */;
2888
+
2889
+ /* removed: var _$delivery_27 = require('@bugsnag/delivery-xml-http-request'); */;
2890
+
2891
+ _$notifier_2 = function (opts) {
2892
+ // handle very simple use case where user supplies just the api key as a string
2893
+ if (typeof opts === 'string') opts = {
2894
+ apiKey: opts // support renamed/deprecated options
2895
+
2896
+ };
2897
+ var warnings = [];
2898
+
2899
+ if (opts.sessionTrackingEnabled) {
2900
+ warnings.push('deprecated option sessionTrackingEnabled is now called autoCaptureSessions');
2901
+ opts.autoCaptureSessions = opts.sessionTrackingEnabled;
2902
+ }
2903
+
2904
+ if ((opts.endpoint || opts.sessionEndpoint) && !opts.endpoints) {
2905
+ warnings.push('deprecated options endpoint/sessionEndpoint are now configured in the endpoints object');
2906
+ opts.endpoints = {
2907
+ notify: opts.endpoint,
2908
+ sessions: opts.sessionEndpoint
2909
+ };
2910
+ }
2911
+
2912
+ if (opts.endpoints && opts.endpoints.notify && !opts.endpoints.sessions) {
2913
+ warnings.push('notify endpoint is set but sessions endpoint is not. No sessions will be sent.');
2914
+ }
2915
+
2916
+ var bugsnag = new _$BugsnagClient_4({
2917
+ name: name,
2918
+ version: version,
2919
+ url: url
2920
+ });
2921
+ bugsnag.setOptions(opts); // set delivery based on browser capability (IE 8+9 have an XDomainRequest object)
2922
+
2923
+ bugsnag.delivery(window.XDomainRequest ? _$delivery_26 : _$delivery_27); // configure with user supplied options
2924
+ // errors can be thrown here that prevent the lib from being in a useable state
2925
+
2926
+ bugsnag.configure(__schema_2);
2927
+ __map_2(warnings, function (w) {
2928
+ return bugsnag._logger.warn(w);
2929
+ }); // always-on browser-specific plugins
2930
+
2931
+ bugsnag.use(_$device_29);
2932
+ bugsnag.use(_$context_28);
2933
+ bugsnag.use(_$request_30);
2934
+ bugsnag.use(_$inlineScriptContent_34);
2935
+ bugsnag.use(_$throttle_38);
2936
+ bugsnag.use(_$session_31);
2937
+ bugsnag.use(_$clientIp_32);
2938
+ bugsnag.use(_$stripQueryString_39); // optional browser-specific plugins
2939
+
2940
+ if (bugsnag.config.autoNotify !== false) {
2941
+ bugsnag.use(_$onerror_40);
2942
+ bugsnag.use(_$unhandledRejection_41);
2943
+ }
2944
+
2945
+ bugsnag.use(_$navigationBreadcrumbs_36);
2946
+ bugsnag.use(_$interactionBreadcrumbs_35);
2947
+ bugsnag.use(_$networkBreadcrumbs_37);
2948
+ bugsnag.use(_$consoleBreadcrumbs_33);
2949
+
2950
+ bugsnag._logger.debug("Loaded!");
2951
+
2952
+ return bugsnag.config.autoCaptureSessions ? bugsnag.startSession() : bugsnag;
2953
+ }; // Stub this value because this is what the type interface looks like
2954
+ // (types/bugsnag.d.ts). This is only an issue in Angular's development
2955
+ // mode as its TS/DI thingy attempts to use this value at runtime.
2956
+ // In most other situations, TS only uses the types at compile time.
2957
+
2958
+
2959
+ _$notifier_2.Bugsnag = {
2960
+ Client: _$BugsnagClient_4,
2961
+ Report: _$BugsnagReport_24,
2962
+ Session: _$Session_25,
2963
+ Breadcrumb: _$BugsnagBreadcrumb_3 // Export a "default" property for compatibility with ESM imports
2964
+
2965
+ };
2966
+ _$notifier_2['default'] = _$notifier_2;
2967
+
2968
+ return _$notifier_2;
2969
+
2970
+ });