bugsnagjs-rails 6.2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+ });