{"version":3,"sources":["../../node_modules/browser-pack-flat/_prelude","../core/lib/breadcrumb-types.js","../core/lib/es-utils/reduce.js","../core/lib/es-utils/filter.js","../core/lib/es-utils/includes.js","../core/lib/es-utils/is-array.js","../core/lib/es-utils/keys.js","../core/lib/validators/int-range.js","../core/lib/validators/list-of-functions.js","../core/lib/validators/string-with-length.js","../core/config.js","../core/lib/es-utils/assign.js","../core/lib/es-utils/map.js","src/config.js","../core/breadcrumb.js","../core/node_modules/stackframe/stackframe.js","../core/node_modules/error-stack-parser/error-stack-parser.js","../core/lib/error-stack-parser.js","../core/lib/has-stack.js","../core/lib/iserror.js","../core/node_modules/iserror/index.js","../core/lib/metadata-delegate.js","../core/node_modules/stack-generator/stack-generator.js","../core/event.js","../core/lib/js-runtime.js","../core/lib/sync-callback-runner.js","../core/node_modules/@bugsnag/cuid/lib/pad.js","../core/node_modules/@bugsnag/cuid/lib/fingerprint.browser.js","../core/node_modules/@bugsnag/cuid/index.js","../core/session.js","../core/client.js","../core/lib/callback-runner.js","../core/lib/async-every.js","../core/node_modules/@bugsnag/safe-json-stringify/index.js","../core/lib/json-payload.js","../delivery-x-domain-request/delivery.js","../delivery-xml-http-request/delivery.js","../plugin-app-duration/app.js","../plugin-browser-device/device.js","../plugin-browser-session/session.js","../plugin-client-ip/client-ip.js","../plugin-console-breadcrumbs/console-breadcrumbs.js","../plugin-inline-script-content/inline-script-content.js","../plugin-interaction-breadcrumbs/interaction-breadcrumbs.js","../plugin-navigation-breadcrumbs/navigation-breadcrumbs.js","../plugin-network-breadcrumbs/network-breadcrumbs.js","../plugin-simple-throttle/throttle.js","../plugin-strip-query-string/strip-query-string.js","../plugin-window-onerror/onerror.js","../plugin-window-unhandled-rejection/unhandled-rejection.js","src/notifier.js","../plugin-browser-request/request.js","../plugin-browser-context/context.js","../../node_modules/browser-pack-flat/_postlude"],"names":["f","exports","module","define","amd","window","global","self","this","Bugsnag","_$breadcrumbTypes_8","_$reduce_17","arr","fn","accum","val","i","len","length","_$filter_12","item","concat","_$includes_13","x","_$isArray_14","obj","Object","prototype","toString","call","_hasDontEnumBug","propertyIsEnumerable","_dontEnums","_$keys_15","prop","result","hasOwnProperty","push","_$intRange_24","min","max","Infinity","value","parseInt","_$listOfFunctions_25","_$stringWithLength_26","_$config_5","schema","apiKey","defaultValue","message","validate","appVersion","undefined","appType","autoDetectErrors","enabledErrorTypes","unhandledExceptions","unhandledRejections","allowPartialObject","providedKeys","defaultKeys","k","onError","onSession","onBreadcrumb","endpoints","notify","sessions","autoTrackSessions","enabledReleaseStages","releaseStage","maxBreadcrumbs","enabledBreadcrumbTypes","join","maybeType","context","user","key","metadata","logger","method","redactedKeys","s","test","plugins","p","load","_$assign_11","target","arguments","source","_$map_16","_$config_1","location","host","console","debug","getPrefixedConsole","consoleLog","log","consoleMethod","bind","_$Breadcrumb_3","Breadcrumb","type","timestamp","Date","toJSON","name","metaData","root","factory","_$stackframe_34","StackFrame","_isNumber","n","isNaN","parseFloat","isFinite","_capitalize","str","charAt","toUpperCase","substring","_getter","booleanProps","numericProps","stringProps","props","getArgs","args","setArgs","v","TypeError","getEvalOrigin","evalOrigin","setEvalOrigin","getFunctionName","getFileName","getLineNumber","getColumnNumber","Boolean","j","Number","String","_$errorStackParser_31","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parse","error","stacktrace","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","Error","extractLocation","urlLike","indexOf","parts","exec","replace","split","filter","line","map","sanitizedLine","tokens","slice","locationParts","pop","functionName","fileName","lineNumber","columnNumber","functionNameRegex","matches","e","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","_$errorStackParser_10","_$hasStack_18","err","_$iserror_19","isError","clear","state","section","_$metadataDelegate_22","add","keyOrObj","maybeVal","_updates","updates","get","_$stackGenerator_33","StackGenerator","backtrace","opts","maxStackSize","curr","callee","Array","RegExp","$1","caller","Event","errorClass","errorMessage","handledState","originalError","defaultHandledState","groupingHash","_handledState","severity","unhandled","app","device","request","breadcrumbs","threads","_metadata","_user","_session","errors","ensureString","frame","formatStackframe","JSON","stringify","addMetadata","getMetadata","clearMetadata","getUser","setUser","id","email","payloadVersion","exceptions","er","severityReason","session","file","normaliseFunctionName","code","inProject","getStacktrace","errorFramesToSkip","backtraceFramesToSkip","create","maybeError","tolerateNonErrors","component","event","_normaliseError","normaliseError","internalFrames","makeSerialisable","createAndLogInputError","reason","warn","hasNecessaryFields","_$Event_6","_$syncCallbackRunner_23","callbacks","callbackArg","callbackType","ignore","cbs","_$pad_29","num","size","substr","env","globalCount","mimeTypesLength","navigator","mimeTypes","clientId","userAgent","_$fingerprint_28","c","blockSize","base","discreteValues","Math","pow","randomBlock","random","cuid","getTime","safeCounter","fingerprint","_$cuid_27","_$Session_35","Session","startedAt","_handled","_unhandled","events","handled","_track","noop","Client","configuration","internalPlugins","notifier","_this","_notifier","_config","_schema","_delivery","sendSession","sendEvent","_logger","info","_plugins","_breadcrumbs","_context","_cbs","sp","b","_configure","pl","_loadPlugin","_depth","apply","getContext","setContext","plugin","configSchema","_reduce","config","generateConfigErrorMessage","getPlugin","_setDelivery","d","startSession","version","_sessionDelegate","addOnError","front","removeOnError","_addOnSessionPayload","addOnSession","removeOnSession","addOnBreadcrumb","removeOnBreadcrumb","pauseSession","resumeSession","leaveBreadcrumb","crumb","cb","_notify","_this2","onCallbackError","index","next","originalSeverity","ret","then","setTimeout","shouldSend","unhandledOverridden","rawInput","_$Client_4","_$safeJsonStringify_30","data","replacer","space","redactedPaths","prepareObjForSerialization","seen","edges","visit","path","edgesExceeded","MIN_PRESERVED_DEPTH","MAX_EDGES","MAX_DEPTH","REPLACEMENT_NODE","find","fResult","throwsMessage","o","eResult","aResult","isDescendent","shouldRedact","safelyGetProp","haystack","needle","paths","patterns","toLowerCase","EVENT_REDACTION_PATHS","_$jsonPayload_21","payload","_$delivery_36","client","win","url","getApiUrl","req","XDomainRequest","onload","open","send","endpoint","isoDate","matchPageProtocol","protocol","encodeURIComponent","_matchPageProtocol","pageProtocol","_$delivery_37","XMLHttpRequest","onreadystatechange","readyState","DONE","setRequestHeader","toISOString","appStart","_$app_38","now","duration","BUGSNAG_ANONYMOUS_ID_KEY","_$device_40","nav","screen","locale","browserLanguage","systemLanguage","userLanguage","language","orientation","document","documentElement","clientWidth","clientHeight","generateAnonymousId","storage","localStorage","getItem","_$cuid_41","setItem","getDeviceId","time","_$session_45","sessionDelegate","sessionClient","_pausedSession","_$clientIp_46","collectUserIp","clientIp","isDev","CONSOLE_LOG_METHODS","original","_len","_key","arg","stringified","_restore","_$inlineScriptContent_48","doc","trackInlineScripts","originalLocation","href","html","DOMContentLoaded","getHtml","outerHTML","prev","_lastScript","updateLastScript","script","getCurrentScript","currentScript","scripts","getElementsByTagName","content","innerHTML","htmlLines","zeroBasedLine","start","end","addSurroundingCode","_setTimeout","__proxy","__traceOriginalScript","eventTargetCallbackAccessor","callbackAccessor","alsoCallOriginal","cba","__trace__","replacement","isEventHandlerObj","handleEvent","_$interactionBreadcrumbs_49","addEventListener","targetText","targetSelector","getNodeText","getNodeSelector","el","tagName","className","querySelectorAll","parentNode","childNodes","text","textContent","innerText","truncate","_$navigationBreadcrumbs_50","drop","oldURL","from","relativeLocation","to","newURL","getCurrentState","history","replaceState","wrapHistoryFn","pushState","a","createElement","pathname","search","hash","orig","title","currentPath","prevState","resetEventCount","BREADCRUMB_TYPE","REQUEST_URL_KEY","REQUEST_METHOD_KEY","_$throttle_52","maxEvents","strip","_$stripQueryString_53","allFrames","_strip","decorateStack","lineNo","charNo","culprit","isActualNumber","errorCharacter","fixBluebirdStacktrace","__schema_2","_client","createClient","prevOnError","onerror","messageOrEvent","detail","extraParameters","listener","evt","isBluebird","_event$addMetadata","onunhandledrejection","promise","_$unhandledRejection_55","_ignoredUrls","ignoredUrls","monkeyPatchXMLHttpRequest","nativeOpen","removeEventListener","handleXHRLoad","handleXHRError","monkeyPatchFetch","fetch","polyfill","oldFetch","_arguments","urlOrRequest","options","Promise","resolve","reject","response","handleFetchSuccess","handleFetchError","status","_$networkBreadcrumbs_51","_$consoleBreadcrumbs_47","bugsnag","m","_$notifier_2"],"mappings":"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","sourcesContent":["(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;\n","module.exports = ['navigation', 'request', 'process', 'log', 'user', 'state', 'error', 'manual']\n","// Array#reduce\nmodule.exports = (arr, fn, accum) => {\n let val = accum\n for (let i = 0, len = arr.length; i < len; i++) val = fn(val, arr[i], i, arr)\n return val\n}\n","const reduce = require('./reduce')\n\n// Array#filter\nmodule.exports = (arr, fn) =>\n reduce(arr, (accum, item, i, arr) => !fn(item, i, arr) ? accum : accum.concat(item), [])\n","const reduce = require('./reduce')\n// Array#includes\nmodule.exports = (arr, x) =>\n reduce(arr, (accum, item, i, arr) => accum === true || item === x, false)\n","// Array#isArray\nmodule.exports = obj => Object.prototype.toString.call(obj) === '[object Array]'\n","/* eslint-disable-next-line no-prototype-builtins */\nconst _hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString')\nconst _dontEnums = [\n 'toString', 'toLocaleString', 'valueOf', 'hasOwnProperty',\n 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'\n]\n\n// Object#keys\nmodule.exports = obj => {\n // stripped down version of\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/Keys\n const result = []\n let prop\n for (prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) result.push(prop)\n }\n if (!_hasDontEnumBug) return result\n for (let i = 0, len = _dontEnums.length; i < len; i++) {\n if (Object.prototype.hasOwnProperty.call(obj, _dontEnums[i])) result.push(_dontEnums[i])\n }\n return result\n}\n","module.exports = (min = 1, max = Infinity) => value =>\n typeof value === 'number' &&\n parseInt('' + value, 10) === value &&\n value >= min && value <= max\n","const filter = require('../es-utils/filter')\nconst isArray = require('../es-utils/is-array')\n\nmodule.exports = value => typeof value === 'function' || (isArray(value) && filter(value, f => typeof f === 'function').length === value.length)\n","module.exports = value => typeof value === 'string' && !!value.length\n","const filter = require('./lib/es-utils/filter')\nconst reduce = require('./lib/es-utils/reduce')\nconst keys = require('./lib/es-utils/keys')\nconst isArray = require('./lib/es-utils/is-array')\nconst includes = require('./lib/es-utils/includes')\nconst intRange = require('./lib/validators/int-range')\nconst stringWithLength = require('./lib/validators/string-with-length')\nconst listOfFunctions = require('./lib/validators/list-of-functions')\n\nconst BREADCRUMB_TYPES = require('./lib/breadcrumb-types')\nconst defaultErrorTypes = () => ({ unhandledExceptions: true, unhandledRejections: true })\n\nmodule.exports.schema = {\n apiKey: {\n defaultValue: () => null,\n message: 'is required',\n validate: stringWithLength\n },\n appVersion: {\n defaultValue: () => undefined,\n message: 'should be a string',\n validate: value => value === undefined || stringWithLength(value)\n },\n appType: {\n defaultValue: () => undefined,\n message: 'should be a string',\n validate: value => value === undefined || stringWithLength(value)\n },\n autoDetectErrors: {\n defaultValue: () => true,\n message: 'should be true|false',\n validate: value => value === true || value === false\n },\n enabledErrorTypes: {\n defaultValue: () => defaultErrorTypes(),\n message: 'should be an object containing the flags { unhandledExceptions:true|false, unhandledRejections:true|false }',\n allowPartialObject: true,\n validate: value => {\n // ensure we have an object\n if (typeof value !== 'object' || !value) return false\n const providedKeys = keys(value)\n const defaultKeys = keys(defaultErrorTypes())\n // ensure it only has a subset of the allowed keys\n if (filter(providedKeys, k => includes(defaultKeys, k)).length < providedKeys.length) return false\n // ensure all of the values are boolean\n if (filter(keys(value), k => typeof value[k] !== 'boolean').length > 0) return false\n return true\n }\n },\n onError: {\n defaultValue: () => [],\n message: 'should be a function or array of functions',\n validate: listOfFunctions\n },\n onSession: {\n defaultValue: () => [],\n message: 'should be a function or array of functions',\n validate: listOfFunctions\n },\n onBreadcrumb: {\n defaultValue: () => [],\n message: 'should be a function or array of functions',\n validate: listOfFunctions\n },\n endpoints: {\n defaultValue: () => ({\n notify: 'https://notify.bugsnag.com',\n sessions: 'https://sessions.bugsnag.com'\n }),\n message: 'should be an object containing endpoint URLs { notify, sessions }',\n validate: val =>\n // first, ensure it's an object\n (val && typeof val === 'object') &&\n (\n // notify and sessions must always be set\n stringWithLength(val.notify) && stringWithLength(val.sessions)\n ) &&\n // ensure no keys other than notify/session are set on endpoints object\n filter(keys(val), k => !includes(['notify', 'sessions'], k)).length === 0\n },\n autoTrackSessions: {\n defaultValue: val => true,\n message: 'should be true|false',\n validate: val => val === true || val === false\n },\n enabledReleaseStages: {\n defaultValue: () => null,\n message: 'should be an array of strings',\n validate: value => value === null || (isArray(value) && filter(value, f => typeof f === 'string').length === value.length)\n },\n releaseStage: {\n defaultValue: () => 'production',\n message: 'should be a string',\n validate: value => typeof value === 'string' && value.length\n },\n maxBreadcrumbs: {\n defaultValue: () => 25,\n message: 'should be a number ≤100',\n validate: value => intRange(0, 100)(value)\n },\n enabledBreadcrumbTypes: {\n defaultValue: () => BREADCRUMB_TYPES,\n message: `should be null or a list of available breadcrumb types (${BREADCRUMB_TYPES.join(',')})`,\n validate: value => value === null || (isArray(value) && reduce(value, (accum, maybeType) => {\n if (accum === false) return accum\n return includes(BREADCRUMB_TYPES, maybeType)\n }, true))\n },\n context: {\n defaultValue: () => undefined,\n message: 'should be a string',\n validate: value => value === undefined || typeof value === 'string'\n },\n user: {\n defaultValue: () => ({}),\n message: 'should be an object with { id, email, name } properties',\n validate: value =>\n (value === null) ||\n (value && reduce(\n keys(value),\n (accum, key) => accum && includes(['id', 'email', 'name'], key),\n true\n ))\n },\n metadata: {\n defaultValue: () => ({}),\n message: 'should be an object',\n validate: (value) => typeof value === 'object' && value !== null\n },\n logger: {\n defaultValue: () => undefined,\n message: 'should be null or an object with methods { debug, info, warn, error }',\n validate: value =>\n (!value) ||\n (value && reduce(\n ['debug', 'info', 'warn', 'error'],\n (accum, method) => accum && typeof value[method] === 'function',\n true\n ))\n },\n redactedKeys: {\n defaultValue: () => ['password'],\n message: 'should be an array of strings|regexes',\n validate: value =>\n isArray(value) && value.length === filter(value, s =>\n (typeof s === 'string' || (s && typeof s.test === 'function'))\n ).length\n },\n plugins: {\n defaultValue: () => ([]),\n message: 'should be an array of plugin objects',\n validate: value =>\n isArray(value) && value.length === filter(value, p =>\n (p && typeof p === 'object' && typeof p.load === 'function')\n ).length\n }\n}\n","// extends helper from babel\n// https://github.com/babel/babel/blob/916429b516e6466fd06588ee820e40e025d7f3a3/packages/babel-helpers/src/helpers.js#L377-L393\nmodule.exports = function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i]\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n return target\n}\n","const reduce = require('./reduce')\n\n// Array#map\nmodule.exports = (arr, fn) =>\n reduce(arr, (accum, item, i, arr) => accum.concat(fn(item, i, arr)), [])\n","const { schema } = require('@bugsnag/core/config')\nconst map = require('@bugsnag/core/lib/es-utils/map')\nconst assign = require('@bugsnag/core/lib/es-utils/assign')\n\nmodule.exports = {\n releaseStage: assign({}, schema.releaseStage, {\n defaultValue: () => {\n if (/^localhost(:\\d+)?$/.test(window.location.host)) return 'development'\n return 'production'\n }\n }),\n logger: assign({}, schema.logger, {\n defaultValue: () =>\n // set logger based on browser capability\n (typeof console !== 'undefined' && typeof console.debug === 'function')\n ? getPrefixedConsole()\n : undefined\n })\n}\n\nconst getPrefixedConsole = () => {\n const logger = {}\n const consoleLog = console.log\n map(['debug', 'info', 'warn', 'error'], (method) => {\n const consoleMethod = console[method]\n logger[method] = typeof consoleMethod === 'function'\n ? consoleMethod.bind(console, '[bugsnag]')\n : consoleLog.bind(console, '[bugsnag]')\n })\n return logger\n}\n","class Breadcrumb {\n constructor (message, metadata, type, timestamp = new Date()) {\n this.type = type\n this.message = message\n this.metadata = metadata\n this.timestamp = timestamp\n }\n\n toJSON () {\n return {\n type: this.type,\n name: this.message,\n timestamp: this.timestamp,\n metaData: this.metadata\n }\n }\n}\n\nmodule.exports = Breadcrumb\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps);\n\n function StackFrame(obj) {\n if (obj instanceof Object) {\n for (var i = 0; i < props.length; i++) {\n if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n // if a location was matched, pass it to extractLocation() otherwise pop the last token\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n","module.exports = require('error-stack-parser')\n","// Given `err` which may be an error, does it have a stack property which is a string?\nmodule.exports = err =>\n !!err &&\n (!!err.stack || !!err.stacktrace || !!err['opera#sourceloc']) &&\n typeof (err.stack || err.stacktrace || err['opera#sourceloc']) === 'string' &&\n err.stack !== `${err.name}: ${err.message}`\n","module.exports = require('iserror')\n","\n/**\n * Expose `isError`.\n */\n\nmodule.exports = isError;\n\n/**\n * Test whether `value` is error object.\n *\n * @param {*} value\n * @returns {boolean}\n */\n\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]': return true;\n case '[object Exception]': return true;\n case '[object DOMException]': return true;\n default: return value instanceof Error;\n }\n}\n","const assign = require('./es-utils/assign')\n\nconst add = (state, section, keyOrObj, maybeVal) => {\n if (!section) return\n let updates\n\n // addMetadata(\"section\", null) -> clears section\n if (keyOrObj === null) return clear(state, section)\n\n // normalise the two supported input types into object form\n if (typeof keyOrObj === 'object') updates = keyOrObj\n if (typeof keyOrObj === 'string') updates = { [keyOrObj]: maybeVal }\n\n // exit if we don't have an updates object at this point\n if (!updates) return\n\n // ensure a section with this name exists\n if (!state[section]) state[section] = {}\n\n // merge the updates with the existing section\n state[section] = assign({}, state[section], updates)\n}\n\nconst get = (state, section, key) => {\n if (typeof section !== 'string') return undefined\n if (!key) {\n return state[section]\n }\n if (state[section]) {\n return state[section][key]\n }\n return undefined\n}\n\nconst clear = (state, section, key) => {\n if (typeof section !== 'string') return\n\n // clear an entire section\n if (!key) {\n delete state[section]\n return\n }\n\n // clear a single value from a section\n if (state[section]) {\n delete state[section][key]\n }\n}\n\nmodule.exports = { add, get, clear }\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function(StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize && curr['arguments']) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args}));\n } else {\n stack.push(new StackFrame({args: args}));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","const ErrorStackParser = require('./lib/error-stack-parser')\nconst StackGenerator = require('stack-generator')\nconst hasStack = require('./lib/has-stack')\nconst map = require('./lib/es-utils/map')\nconst reduce = require('./lib/es-utils/reduce')\nconst filter = require('./lib/es-utils/filter')\nconst assign = require('./lib/es-utils/assign')\nconst jsRuntime = require('./lib/js-runtime')\nconst metadataDelegate = require('./lib/metadata-delegate')\nconst isError = require('./lib/iserror')\n\nclass Event {\n constructor (errorClass, errorMessage, stacktrace = [], handledState = defaultHandledState(), originalError) {\n this.apiKey = undefined\n this.context = undefined\n this.groupingHash = undefined\n this.originalError = originalError\n\n this._handledState = handledState\n this.severity = this._handledState.severity\n this.unhandled = this._handledState.unhandled\n\n this.app = {}\n this.device = {}\n this.request = {}\n\n this.breadcrumbs = []\n this.threads = []\n\n this._metadata = {}\n this._user = {}\n this._session = undefined\n\n this.errors = [\n {\n errorClass: ensureString(errorClass),\n errorMessage: ensureString(errorMessage),\n type: jsRuntime,\n stacktrace: reduce(stacktrace, (accum, frame) => {\n const f = formatStackframe(frame)\n // don't include a stackframe if none of its properties are defined\n try {\n if (JSON.stringify(f) === '{}') return accum\n return accum.concat(f)\n } catch (e) {\n return accum\n }\n }, [])\n }\n ]\n\n // Flags.\n // Note these are not initialised unless they are used\n // to save unnecessary bytes in the browser bundle\n\n /* this.attemptImmediateDelivery, default: true */\n }\n\n addMetadata (section, keyOrObj, maybeVal) {\n return metadataDelegate.add(this._metadata, section, keyOrObj, maybeVal)\n }\n\n getMetadata (section, key) {\n return metadataDelegate.get(this._metadata, section, key)\n }\n\n clearMetadata (section, key) {\n return metadataDelegate.clear(this._metadata, section, key)\n }\n\n getUser () {\n return this._user\n }\n\n setUser (id, email, name) {\n this._user = { id, email, name }\n }\n\n toJSON () {\n return {\n payloadVersion: '4',\n exceptions: map(this.errors, er => assign({}, er, { message: er.errorMessage })),\n severity: this.severity,\n unhandled: this._handledState.unhandled,\n severityReason: this._handledState.severityReason,\n app: this.app,\n device: this.device,\n request: this.request,\n breadcrumbs: this.breadcrumbs,\n context: this.context,\n groupingHash: this.groupingHash,\n metaData: this._metadata,\n user: this._user,\n session: this._session\n }\n }\n}\n\n// takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)\n// and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)\nconst formatStackframe = frame => {\n const f = {\n file: frame.fileName,\n method: normaliseFunctionName(frame.functionName),\n lineNumber: frame.lineNumber,\n columnNumber: frame.columnNumber,\n code: undefined,\n inProject: undefined\n }\n // Some instances result in no file:\n // - calling notify() from chrome's terminal results in no file/method.\n // - non-error exception thrown from global code in FF\n // This adds one.\n if (f.lineNumber > -1 && !f.file && !f.method) {\n f.file = 'global code'\n }\n return f\n}\n\nconst normaliseFunctionName = name => /^global code$/i.test(name) ? 'global code' : name\n\nconst defaultHandledState = () => ({\n unhandled: false,\n severity: 'warning',\n severityReason: { type: 'handledException' }\n})\n\nconst ensureString = (str) => typeof str === 'string' ? str : ''\n\n// Helpers\n\nEvent.getStacktrace = function (error, errorFramesToSkip, backtraceFramesToSkip) {\n if (hasStack(error)) return ErrorStackParser.parse(error).slice(errorFramesToSkip)\n // error wasn't provided or didn't have a stacktrace so try to walk the callstack\n try {\n return filter(StackGenerator.backtrace(), frame =>\n (frame.functionName || '').indexOf('StackGenerator$$') === -1\n ).slice(1 + backtraceFramesToSkip)\n } catch (e) {\n return []\n }\n}\n\nEvent.create = function (maybeError, tolerateNonErrors, handledState, component, errorFramesToSkip = 0, logger) {\n const [error, internalFrames] = normaliseError(maybeError, tolerateNonErrors, component, logger)\n let event\n try {\n const stacktrace = Event.getStacktrace(\n error,\n // if an error was created/throw in the normaliseError() function, we need to\n // tell the getStacktrace() function to skip the number of frames we know will\n // be from our own functions. This is added to the number of frames deep we\n // were told about\n internalFrames > 0 ? 1 + internalFrames + errorFramesToSkip : 0,\n // if there's no stacktrace, the callstack may be walked to generated one.\n // this is how many frames should be removed because they come from our library\n 1 + errorFramesToSkip\n )\n event = new Event(error.name, error.message, stacktrace, handledState, maybeError)\n } catch (e) {\n event = new Event(error.name, error.message, [], handledState, maybeError)\n }\n if (error.name === 'InvalidError') {\n event.addMetadata(`${component}`, 'non-error parameter', makeSerialisable(maybeError))\n }\n return event\n}\n\nconst makeSerialisable = (err) => {\n if (err === null) return 'null'\n if (err === undefined) return 'undefined'\n return err\n}\n\nconst normaliseError = (maybeError, tolerateNonErrors, component, logger) => {\n let error\n let internalFrames = 0\n\n const createAndLogInputError = (reason) => {\n if (logger) logger.warn(`${component} received a non-error: \"${reason}\"`)\n const err = new Error(`${component} received a non-error. See \"${component}\" tab for more detail.`)\n err.name = 'InvalidError'\n return err\n }\n\n // In some cases:\n //\n // - the promise rejection handler (both in the browser and node)\n // - the node uncaughtException handler\n //\n // We are really limited in what we can do to get a stacktrace. So we use the\n // tolerateNonErrors option to ensure that the resulting error communicates as\n // such.\n if (!tolerateNonErrors) {\n if (isError(maybeError)) {\n error = maybeError\n } else {\n error = createAndLogInputError(typeof maybeError)\n internalFrames += 2\n }\n } else {\n switch (typeof maybeError) {\n case 'string':\n case 'number':\n case 'boolean':\n error = new Error(String(maybeError))\n internalFrames += 1\n break\n case 'function':\n error = createAndLogInputError('function')\n internalFrames += 2\n break\n case 'object':\n if (maybeError !== null && isError(maybeError)) {\n error = maybeError\n } else if (maybeError !== null && hasNecessaryFields(maybeError)) {\n error = new Error(maybeError.message || maybeError.errorMessage)\n error.name = maybeError.name || maybeError.errorClass\n internalFrames += 1\n } else {\n error = createAndLogInputError(maybeError === null ? 'null' : 'unsupported object')\n internalFrames += 2\n }\n break\n default:\n error = createAndLogInputError('nothing')\n internalFrames += 2\n }\n }\n\n if (!hasStack(error)) {\n // in IE10/11 a new Error() doesn't have a stacktrace until you throw it, so try that here\n try {\n throw error\n } catch (e) {\n if (hasStack(e)) {\n error = e\n // if the error only got a stacktrace after we threw it here, we know it\n // will only have one extra internal frame from this function, regardless\n // of whether it went through createAndLogInputError() or not\n internalFrames = 1\n }\n }\n }\n\n return [error, internalFrames]\n}\n\nconst hasNecessaryFields = error =>\n (typeof error.name === 'string' || typeof error.errorClass === 'string') &&\n (typeof error.message === 'string' || typeof error.errorMessage === 'string')\n\nmodule.exports = Event\n","module.exports = process.env.IS_BROWSER\n ? 'browserjs'\n : ((typeof navigator !== 'undefined' && navigator.product === 'ReactNative')\n ? (typeof Expo !== 'undefined' ? 'expojs' : 'reactnativejs')\n : 'nodejs')\n","module.exports = (callbacks, callbackArg, callbackType, logger) => {\n let ignore = false\n const cbs = callbacks.slice()\n while (!ignore) {\n if (!cbs.length) break\n try {\n ignore = cbs.pop()(callbackArg) === false\n } catch (e) {\n logger.error(`Error occurred in ${callbackType} callback, continuing anyway…`)\n logger.error(e)\n }\n }\n return ignore\n}\n","module.exports = function pad (num, size) {\n var s = '000000000' + num;\n return s.substr(s.length - size);\n};\n","var pad = require('./pad.js');\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = 0;\nfor (var prop in env) {\n if (Object.hasOwnProperty.call(env, prop)) globalCount++;\n}\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = pad((mimeTypesLength +\n navigator.userAgent.length).toString(36) +\n globalCount.toString(36), 4);\n\nmodule.exports = function fingerprint () {\n return clientId;\n};\n","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nvar fingerprint = require('./lib/fingerprint.js');\nvar pad = require('./lib/pad.js');\n\nvar c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock () {\n return pad((Math.random() *\n discreteValues << 0)\n .toString(base), blockSize);\n}\n\nfunction safeCounter () {\n c = c < discreteValues ? c : 0;\n c++; // this is not subliminal\n return c - 1;\n}\n\nfunction cuid () {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c', // hard-coded allows for sequential access\n\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = (new Date().getTime()).toString(base),\n\n // Prevent same-machine collisions.\n counter = pad(safeCounter().toString(base), blockSize),\n\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n print = fingerprint(),\n\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n\n return letter + timestamp + counter + print + random;\n}\n\ncuid.fingerprint = fingerprint;\n\nmodule.exports = cuid;\n","const cuid = require('@bugsnag/cuid')\n\nclass Session {\n constructor () {\n this.id = cuid()\n this.startedAt = new Date()\n this._handled = 0\n this._unhandled = 0\n this._user = {}\n this.app = {}\n this.device = {}\n }\n\n getUser () {\n return this._user\n }\n\n setUser (id, email, name) {\n this._user = { id, email, name }\n }\n\n toJSON () {\n return {\n id: this.id,\n startedAt: this.startedAt,\n events: { handled: this._handled, unhandled: this._unhandled }\n }\n }\n\n _track (event) {\n this[event._handledState.unhandled ? '_unhandled' : '_handled'] += 1\n }\n}\n\nmodule.exports = Session\n","const config = require('./config')\nconst Event = require('./event')\nconst Breadcrumb = require('./breadcrumb')\nconst Session = require('./session')\nconst map = require('./lib/es-utils/map')\nconst includes = require('./lib/es-utils/includes')\nconst filter = require('./lib/es-utils/filter')\nconst reduce = require('./lib/es-utils/reduce')\nconst keys = require('./lib/es-utils/keys')\nconst assign = require('./lib/es-utils/assign')\nconst runCallbacks = require('./lib/callback-runner')\nconst metadataDelegate = require('./lib/metadata-delegate')\nconst runSyncCallbacks = require('./lib/sync-callback-runner')\nconst BREADCRUMB_TYPES = require('./lib/breadcrumb-types')\n\nconst noop = () => {}\n\nclass Client {\n constructor (configuration, schema = config.schema, internalPlugins = [], notifier) {\n // notifier id\n this._notifier = notifier\n\n // intialise opts and config\n this._config = {}\n this._schema = schema\n\n // i/o\n this._delivery = { sendSession: noop, sendEvent: noop }\n this._logger = { debug: noop, info: noop, warn: noop, error: noop }\n\n // plugins\n this._plugins = {}\n\n // state\n this._breadcrumbs = []\n this._session = null\n this._metadata = {}\n this._context = undefined\n this._user = {}\n\n // callbacks:\n // e: onError\n // s: onSession\n // sp: onSessionPayload\n // b: onBreadcrumb\n // (note these names are minified by hand because object\n // properties are not safe to minify automatically)\n this._cbs = {\n e: [],\n s: [],\n sp: [],\n b: []\n }\n\n // expose internal constructors\n this.Client = Client\n this.Event = Event\n this.Breadcrumb = Breadcrumb\n this.Session = Session\n\n this._config = this._configure(configuration, internalPlugins)\n map(internalPlugins.concat(this._config.plugins), pl => {\n if (pl) this._loadPlugin(pl)\n })\n\n // when notify() is called we need to know how many frames are from our own source\n // this inital value is 1 not 0 because we wrap notify() to ensure it is always\n // bound to have the client as its `this` value – see below.\n this._depth = 1\n\n const self = this\n const notify = this.notify\n this.notify = function () {\n return notify.apply(self, arguments)\n }\n }\n\n addMetadata (section, keyOrObj, maybeVal) {\n return metadataDelegate.add(this._metadata, section, keyOrObj, maybeVal)\n }\n\n getMetadata (section, key) {\n return metadataDelegate.get(this._metadata, section, key)\n }\n\n clearMetadata (section, key) {\n return metadataDelegate.clear(this._metadata, section, key)\n }\n\n getContext () {\n return this._context\n }\n\n setContext (c) {\n this._context = c\n }\n\n _configure (opts, internalPlugins) {\n const schema = reduce(internalPlugins, (schema, plugin) => {\n if (plugin && plugin.configSchema) return assign({}, schema, plugin.configSchema)\n return schema\n }, this._schema)\n\n // accumulate configuration and error messages\n const { errors, config } = reduce(keys(schema), (accum, key) => {\n const defaultValue = schema[key].defaultValue(opts[key])\n\n if (opts[key] !== undefined) {\n const valid = schema[key].validate(opts[key])\n if (!valid) {\n accum.errors[key] = schema[key].message\n accum.config[key] = defaultValue\n } else {\n if (schema[key].allowPartialObject) {\n accum.config[key] = assign(defaultValue, opts[key])\n } else {\n accum.config[key] = opts[key]\n }\n }\n } else {\n accum.config[key] = defaultValue\n }\n\n return accum\n }, { errors: {}, config: {} })\n\n if (schema.apiKey) {\n // missing api key is the only fatal error\n if (!config.apiKey) throw new Error('No Bugsnag API Key set')\n // warn about an apikey that is not of the expected format\n if (!/^[0-9a-f]{32}$/i.test(config.apiKey)) errors.apiKey = 'should be a string of 32 hexadecimal characters'\n }\n\n // update and elevate some options\n this._metadata = assign({}, config.metadata)\n this._user = assign({}, config.user)\n this._context = config.context\n if (config.logger) this._logger = config.logger\n\n // add callbacks\n if (config.onError) this._cbs.e = this._cbs.e.concat(config.onError)\n if (config.onBreadcrumb) this._cbs.b = this._cbs.b.concat(config.onBreadcrumb)\n if (config.onSession) this._cbs.s = this._cbs.s.concat(config.onSession)\n\n // finally warn about any invalid config where we fell back to the default\n if (keys(errors).length) {\n this._logger.warn(generateConfigErrorMessage(errors, opts))\n }\n\n return config\n }\n\n getUser () {\n return this._user\n }\n\n setUser (id, email, name) {\n this._user = { id, email, name }\n }\n\n _loadPlugin (plugin) {\n const result = plugin.load(this)\n // JS objects are not the safest way to store arbitrarily keyed values,\n // so bookend the key with some characters that prevent tampering with\n // stuff like __proto__ etc. (only store the result if the plugin had a\n // name)\n if (plugin.name) this._plugins[`~${plugin.name}~`] = result\n return this\n }\n\n getPlugin (name) {\n return this._plugins[`~${name}~`]\n }\n\n _setDelivery (d) {\n this._delivery = d(this)\n }\n\n startSession () {\n const session = new Session()\n\n session.app.releaseStage = this._config.releaseStage\n session.app.version = this._config.appVersion\n session.app.type = this._config.appType\n\n session._user = assign({}, this._user)\n\n // run onSession callbacks\n const ignore = runSyncCallbacks(this._cbs.s, session, 'onSession', this._logger)\n\n if (ignore) {\n this._logger.debug('Session not started due to onSession callback')\n return this\n }\n return this._sessionDelegate.startSession(this, session)\n }\n\n addOnError (fn, front = false) {\n this._cbs.e[front ? 'unshift' : 'push'](fn)\n }\n\n removeOnError (fn) {\n this._cbs.e = filter(this._cbs.e, f => f !== fn)\n }\n\n _addOnSessionPayload (fn) {\n this._cbs.sp.push(fn)\n }\n\n addOnSession (fn) {\n this._cbs.s.push(fn)\n }\n\n removeOnSession (fn) {\n this._cbs.s = filter(this._cbs.s, f => f !== fn)\n }\n\n addOnBreadcrumb (fn, front = false) {\n this._cbs.b[front ? 'unshift' : 'push'](fn)\n }\n\n removeOnBreadcrumb (fn) {\n this._cbs.b = filter(this._cbs.b, f => f !== fn)\n }\n\n pauseSession () {\n return this._sessionDelegate.pauseSession(this)\n }\n\n resumeSession () {\n return this._sessionDelegate.resumeSession(this)\n }\n\n leaveBreadcrumb (message, metadata, type) {\n // coerce bad values so that the defaults get set\n message = typeof message === 'string' ? message : ''\n type = (typeof type === 'string' && includes(BREADCRUMB_TYPES, type)) ? type : 'manual'\n metadata = typeof metadata === 'object' && metadata !== null ? metadata : {}\n\n // if no message, discard\n if (!message) return\n\n const crumb = new Breadcrumb(message, metadata, type)\n\n // run onBreadcrumb callbacks\n const ignore = runSyncCallbacks(this._cbs.b, crumb, 'onBreadcrumb', this._logger)\n\n if (ignore) {\n this._logger.debug('Breadcrumb not attached due to onBreadcrumb callback')\n return\n }\n\n // push the valid crumb onto the queue and maintain the length\n this._breadcrumbs.push(crumb)\n if (this._breadcrumbs.length > this._config.maxBreadcrumbs) {\n this._breadcrumbs = this._breadcrumbs.slice(this._breadcrumbs.length - this._config.maxBreadcrumbs)\n }\n }\n\n notify (maybeError, onError, cb = noop) {\n const event = Event.create(maybeError, true, undefined, 'notify()', this._depth + 1, this._logger)\n this._notify(event, onError, cb)\n }\n\n _notify (event, onError, cb = noop) {\n event.app = assign({}, event.app, {\n releaseStage: this._config.releaseStage,\n version: this._config.appVersion,\n type: this._config.appType\n })\n event.context = event.context || this._context\n event._metadata = assign({}, event._metadata, this._metadata)\n event._user = assign({}, event._user, this._user)\n event.breadcrumbs = this._breadcrumbs.slice()\n\n // exit early if events should not be sent on the current releaseStage\n if (this._config.enabledReleaseStages !== null && !includes(this._config.enabledReleaseStages, this._config.releaseStage)) {\n this._logger.warn('Event not sent due to releaseStage/enabledReleaseStages configuration')\n return cb(null, event)\n }\n\n const originalSeverity = event.severity\n\n const onCallbackError = err => {\n // errors in callbacks are tolerated but we want to log them out\n this._logger.error('Error occurred in onError callback, continuing anyway…')\n this._logger.error(err)\n }\n\n const callbacks = [].concat(this._cbs.e).concat(onError)\n runCallbacks(callbacks, event, onCallbackError, (err, shouldSend) => {\n if (err) onCallbackError(err)\n\n if (!shouldSend) {\n this._logger.debug('Event not sent due to onError callback')\n return cb(null, event)\n }\n\n if (includes(this._config.enabledBreadcrumbTypes, 'error')) {\n // only leave a crumb for the error if actually got sent\n Client.prototype.leaveBreadcrumb.call(this, event.errors[0].errorClass, {\n errorClass: event.errors[0].errorClass,\n errorMessage: event.errors[0].errorMessage,\n severity: event.severity\n }, 'error')\n }\n\n if (originalSeverity !== event.severity) {\n event._handledState.severityReason = { type: 'userCallbackSetSeverity' }\n }\n\n if (event.unhandled !== event._handledState.unhandled) {\n event._handledState.severityReason.unhandledOverridden = true\n event._handledState.unhandled = event.unhandled\n }\n\n if (this._session) {\n this._session._track(event)\n event._session = this._session\n }\n\n this._delivery.sendEvent({\n apiKey: event.apiKey || this._config.apiKey,\n notifier: this._notifier,\n events: [event]\n }, (err) => cb(err, event))\n })\n }\n}\n\nconst generateConfigErrorMessage = (errors, rawInput) => {\n const er = new Error(\n `Invalid configuration\\n${map(keys(errors), key => ` - ${key} ${errors[key]}, got ${stringify(rawInput[key])}`).join('\\n\\n')}`)\n return er\n}\n\nconst stringify = val => {\n switch (typeof val) {\n case 'string':\n case 'number':\n case 'object':\n return JSON.stringify(val)\n default: return String(val)\n }\n}\n\nmodule.exports = Client\n","const some = require('./async-every')\n\nmodule.exports = (callbacks, event, onCallbackError, cb) => {\n // This function is how we support different kinds of callback:\n // - synchronous - return value\n // - node-style async with callback - cb(err, value)\n // - promise/thenable - resolve(value)\n // It normalises each of these into the lowest common denominator – a node-style callback\n const runMaybeAsyncCallback = (fn, cb) => {\n if (typeof fn !== 'function') return cb(null)\n try {\n // if function appears sync…\n if (fn.length !== 2) {\n const ret = fn(event)\n // check if it returned a \"thenable\" (promise)\n if (ret && typeof ret.then === 'function') {\n return ret.then(\n // resolve\n val => setTimeout(() => cb(null, val)),\n // reject\n err => {\n setTimeout(() => {\n onCallbackError(err)\n return cb(null, true)\n })\n }\n )\n }\n return cb(null, ret)\n }\n // if function is async…\n fn(event, (err, result) => {\n if (err) {\n onCallbackError(err)\n return cb(null)\n }\n cb(null, result)\n })\n } catch (e) {\n onCallbackError(e)\n cb(null)\n }\n }\n\n some(callbacks, runMaybeAsyncCallback, cb)\n}\n","// This is a heavily modified/simplified version of\n// https://github.com/othiym23/async-some\n// with the logic flipped so that it is akin to the\n// synchronous \"every\" method instead of \"some\".\n\n// run the asynchronous test function (fn) over each item in the array (arr)\n// in series until:\n// - fn(item, cb) => calls cb(null, false)\n// - or the end of the array is reached\n// the callback (cb) will be passed (null, false) if any of the items in arr\n// caused fn to call back with false, otherwise it will be passed (null, true)\nmodule.exports = (arr, fn, cb) => {\n let index = 0\n\n const next = () => {\n if (index >= arr.length) return cb(null, true)\n fn(arr[index], (err, result) => {\n if (err) return cb(err)\n if (result === false) return cb(null, false)\n index++\n next()\n })\n }\n\n next()\n}\n","module.exports = function (data, replacer, space, opts) {\n var redactedKeys = opts && opts.redactedKeys ? opts.redactedKeys : []\n var redactedPaths = opts && opts.redactedPaths ? opts.redactedPaths : []\n return JSON.stringify(\n prepareObjForSerialization(data, redactedKeys, redactedPaths),\n replacer,\n space\n )\n}\n\nvar MAX_DEPTH = 20\nvar MAX_EDGES = 25000\nvar MIN_PRESERVED_DEPTH = 8\n\nvar REPLACEMENT_NODE = '...'\n\nfunction isError (o) {\n return o instanceof Error ||\n /^\\[object (Error|(Dom)?Exception)\\]$/.test(Object.prototype.toString.call(o))\n}\n\nfunction throwsMessage (err) {\n return '[Throws: ' + (err ? err.message : '?') + ']'\n}\n\nfunction find (haystack, needle) {\n for (var i = 0, len = haystack.length; i < len; i++) {\n if (haystack[i] === needle) return true\n }\n return false\n}\n\n// returns true if the string `path` starts with any of the provided `paths`\nfunction isDescendent (paths, path) {\n for (var i = 0, len = paths.length; i < len; i++) {\n if (path.indexOf(paths[i]) === 0) return true\n }\n return false\n}\n\nfunction shouldRedact (patterns, key) {\n for (var i = 0, len = patterns.length; i < len; i++) {\n if (typeof patterns[i] === 'string' && patterns[i].toLowerCase() === key.toLowerCase()) return true\n if (patterns[i] && typeof patterns[i].test === 'function' && patterns[i].test(key)) return true\n }\n return false\n}\n\nfunction isArray (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]'\n}\n\nfunction safelyGetProp (obj, prop) {\n try {\n return obj[prop]\n } catch (err) {\n return throwsMessage(err)\n }\n}\n\nfunction prepareObjForSerialization (obj, redactedKeys, redactedPaths) {\n var seen = [] // store references to objects we have seen before\n var edges = 0\n\n function visit (obj, path) {\n function edgesExceeded () {\n return path.length > MIN_PRESERVED_DEPTH && edges > MAX_EDGES\n }\n\n edges++\n\n if (path.length > MAX_DEPTH) return REPLACEMENT_NODE\n if (edgesExceeded()) return REPLACEMENT_NODE\n if (obj === null || typeof obj !== 'object') return obj\n if (find(seen, obj)) return '[Circular]'\n\n seen.push(obj)\n\n if (typeof obj.toJSON === 'function') {\n try {\n // we're not going to count this as an edge because it\n // replaces the value of the currently visited object\n edges--\n var fResult = visit(obj.toJSON(), path)\n seen.pop()\n return fResult\n } catch (err) {\n return throwsMessage(err)\n }\n }\n\n var er = isError(obj)\n if (er) {\n edges--\n var eResult = visit({ name: obj.name, message: obj.message }, path)\n seen.pop()\n return eResult\n }\n\n if (isArray(obj)) {\n var aResult = []\n for (var i = 0, len = obj.length; i < len; i++) {\n if (edgesExceeded()) {\n aResult.push(REPLACEMENT_NODE)\n break\n }\n aResult.push(visit(obj[i], path.concat('[]')))\n }\n seen.pop()\n return aResult\n }\n\n var result = {}\n try {\n for (var prop in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) continue\n if (isDescendent(redactedPaths, path.join('.')) && shouldRedact(redactedKeys, prop)) {\n result[prop] = '[REDACTED]'\n continue\n }\n if (edgesExceeded()) {\n result[prop] = REPLACEMENT_NODE\n break\n }\n result[prop] = visit(safelyGetProp(obj, prop), path.concat(prop))\n }\n } catch (e) {}\n seen.pop()\n return result\n }\n\n return visit(obj, [])\n}\n","const jsonStringify = require('@bugsnag/safe-json-stringify')\nconst EVENT_REDACTION_PATHS = [\n 'events.[].metaData',\n 'events.[].breadcrumbs.[].metaData',\n 'events.[].request'\n]\n\nmodule.exports.event = (event, redactedKeys) => {\n let payload = jsonStringify(event, null, null, { redactedPaths: EVENT_REDACTION_PATHS, redactedKeys })\n if (payload.length > 10e5) {\n event.events[0]._metadata = {\n notifier:\n`WARNING!\nSerialized payload was ${payload.length / 10e5}MB (limit = 1MB)\nmetadata was removed`\n }\n payload = jsonStringify(event, null, null, { redactedPaths: EVENT_REDACTION_PATHS, redactedKeys })\n if (payload.length > 10e5) throw new Error('payload exceeded 1MB limit')\n }\n return payload\n}\n\nmodule.exports.session = (event, redactedKeys) => {\n const payload = jsonStringify(event, null, null)\n if (payload.length > 10e5) throw new Error('payload exceeded 1MB limit')\n return payload\n}\n","const payload = require('@bugsnag/core/lib/json-payload')\n\nmodule.exports = (client, win = window) => ({\n sendEvent: (event, cb = () => {}) => {\n const url = getApiUrl(client._config, 'notify', '4', win)\n const req = new win.XDomainRequest()\n req.onload = function () {\n cb(null)\n }\n req.open('POST', url)\n setTimeout(() => {\n try {\n req.send(payload.event(event, client._config.redactedKeys))\n } catch (e) {\n client._logger.error(e)\n cb(e)\n }\n }, 0)\n },\n sendSession: (session, cb = () => {}) => {\n const url = getApiUrl(client._config, 'sessions', '1', win)\n const req = new win.XDomainRequest()\n req.onload = function () {\n cb(null)\n }\n req.open('POST', url)\n setTimeout(() => {\n try {\n req.send(payload.session(session, client._config.redactedKeys))\n } catch (e) {\n client._logger.error(e)\n cb(e)\n }\n }, 0)\n }\n})\n\nconst getApiUrl = (config, endpoint, version, win) => {\n // IE8 doesn't support Date.prototype.toISOstring(), but it does convert a date\n // to an ISO string when you use JSON stringify. Simply parsing the result of\n // JSON.stringify is smaller than using a toISOstring() polyfill.\n const isoDate = JSON.parse(JSON.stringify(new Date()))\n const url = matchPageProtocol(config.endpoints[endpoint], win.location.protocol)\n return `${url}?apiKey=${encodeURIComponent(config.apiKey)}&payloadVersion=${version}&sentAt=${encodeURIComponent(isoDate)}`\n}\n\nconst matchPageProtocol = module.exports._matchPageProtocol = (endpoint, pageProtocol) =>\n pageProtocol === 'http:'\n ? endpoint.replace(/^https:/, 'http:')\n : endpoint\n","const payload = require('@bugsnag/core/lib/json-payload')\n\nmodule.exports = (client, win = window) => ({\n sendEvent: (event, cb = () => {}) => {\n try {\n const url = client._config.endpoints.notify\n const req = new win.XMLHttpRequest()\n req.onreadystatechange = function () {\n if (req.readyState === win.XMLHttpRequest.DONE) cb(null)\n }\n req.open('POST', url)\n req.setRequestHeader('Content-Type', 'application/json')\n req.setRequestHeader('Bugsnag-Api-Key', event.apiKey || client._config.apiKey)\n req.setRequestHeader('Bugsnag-Payload-Version', '4')\n req.setRequestHeader('Bugsnag-Sent-At', (new Date()).toISOString())\n req.send(payload.event(event, client._config.redactedKeys))\n } catch (e) {\n client._logger.error(e)\n }\n },\n sendSession: (session, cb = () => {}) => {\n try {\n const url = client._config.endpoints.sessions\n const req = new win.XMLHttpRequest()\n req.onreadystatechange = function () {\n if (req.readyState === win.XMLHttpRequest.DONE) cb(null)\n }\n req.open('POST', url)\n req.setRequestHeader('Content-Type', 'application/json')\n req.setRequestHeader('Bugsnag-Api-Key', client._config.apiKey)\n req.setRequestHeader('Bugsnag-Payload-Version', '1')\n req.setRequestHeader('Bugsnag-Sent-At', (new Date()).toISOString())\n req.send(payload.session(session, client._config.redactedKeys))\n } catch (e) {\n client._logger.error(e)\n }\n }\n})\n","const appStart = new Date()\n\nmodule.exports = {\n load: client => {\n client.addOnError(event => {\n const now = new Date()\n\n event.app.duration = now - appStart\n }, true)\n }\n}\n","const cuid = require('@bugsnag/cuid')\nconst assign = require('@bugsnag/core/lib/es-utils/assign')\nconst BUGSNAG_ANONYMOUS_ID_KEY = 'bugsnag-anonymous-id'\n\nconst getDeviceId = () => {\n try {\n const storage = window.localStorage\n\n let id = storage.getItem(BUGSNAG_ANONYMOUS_ID_KEY)\n\n // If we get an ID, make sure it looks like a valid cuid. The length can\n // fluctuate slightly, so some leeway is built in\n if (id && /^c[a-z0-9]{20,32}$/.test(id)) {\n return id\n }\n\n id = cuid()\n\n storage.setItem(BUGSNAG_ANONYMOUS_ID_KEY, id)\n\n return id\n } catch (err) {\n // If localStorage is not available (e.g. because it's disabled) then give up\n }\n}\n\n/*\n * Automatically detects browser device details\n */\nmodule.exports = (nav = navigator, screen = window.screen) => ({\n load: (client) => {\n const device = {\n locale: nav.browserLanguage || nav.systemLanguage || nav.userLanguage || nav.language,\n userAgent: nav.userAgent\n }\n\n if (screen && screen.orientation && screen.orientation.type) {\n device.orientation = screen.orientation.type\n } else {\n device.orientation =\n document.documentElement.clientWidth > document.documentElement.clientHeight\n ? 'landscape'\n : 'portrait'\n }\n\n if (client._config.generateAnonymousId) {\n device.id = getDeviceId()\n }\n\n client.addOnSession(session => {\n session.device = assign({}, session.device, device)\n })\n\n // add time just as the event is sent\n client.addOnError((event) => {\n event.device = assign({},\n event.device,\n device,\n { time: new Date() }\n )\n }, true)\n },\n configSchema: {\n generateAnonymousId: {\n validate: value => value === true || value === false,\n defaultValue: () => true,\n message: 'should be true|false'\n }\n }\n})\n","const includes = require('@bugsnag/core/lib/es-utils/includes')\n\nmodule.exports = {\n load: client => { client._sessionDelegate = sessionDelegate }\n}\n\nconst sessionDelegate = {\n startSession: (client, session) => {\n const sessionClient = client\n sessionClient._session = session\n sessionClient._pausedSession = null\n\n // exit early if the current releaseStage is not enabled\n if (sessionClient._config.enabledReleaseStages !== null && !includes(sessionClient._config.enabledReleaseStages, sessionClient._config.releaseStage)) {\n sessionClient._logger.warn('Session not sent due to releaseStage/enabledReleaseStages configuration')\n return sessionClient\n }\n\n sessionClient._delivery.sendSession({\n notifier: sessionClient._notifier,\n device: session.device,\n app: session.app,\n sessions: [\n {\n id: session.id,\n startedAt: session.startedAt,\n user: session._user\n }\n ]\n })\n return sessionClient\n },\n resumeSession: (client) => {\n if (client._pausedSession) {\n client._session = client._pausedSession\n client._pausedSession = null\n return client\n } else {\n return client.startSession()\n }\n },\n pauseSession: (client) => {\n client._pausedSession = client._session\n client._session = null\n }\n}\n","const assign = require('@bugsnag/core/lib/es-utils/assign')\n\n/*\n * Prevent collection of user IPs\n */\nmodule.exports = {\n load: (client) => {\n if (client._config.collectUserIp) return\n\n client.addOnError(event => {\n // If user.id is explicitly undefined, it will be missing from the payload. It needs\n // removing so that the following line replaces it\n if (event._user && typeof event._user.id === 'undefined') delete event._user.id\n event._user = assign({ id: '[REDACTED]' }, event._user)\n event.request = assign({ clientIp: '[REDACTED]' }, event.request)\n })\n },\n configSchema: {\n collectUserIp: {\n defaultValue: () => true,\n message: 'should be true|false',\n validate: value => value === true || value === false\n }\n }\n}\n","const map = require('@bugsnag/core/lib/es-utils/map')\nconst reduce = require('@bugsnag/core/lib/es-utils/reduce')\nconst filter = require('@bugsnag/core/lib/es-utils/filter')\nconst includes = require('@bugsnag/core/lib/es-utils/includes')\n\n/*\n * Leaves breadcrumbs when console log methods are called\n */\nexports.load = (client) => {\n const isDev = /^dev(elopment)?$/.test(client._config.releaseStage)\n\n if (!client._config.enabledBreadcrumbTypes || !includes(client._config.enabledBreadcrumbTypes, 'log') || isDev) return\n\n map(CONSOLE_LOG_METHODS, method => {\n const original = console[method]\n console[method] = (...args) => {\n client.leaveBreadcrumb('Console output', reduce(args, (accum, arg, i) => {\n // do the best/simplest stringification of each argument\n let stringified = '[Unknown value]'\n // this may fail if the input is:\n // - an object whose [[Prototype]] is null (no toString)\n // - an object with a broken toString or @@toPrimitive implementation\n try { stringified = String(arg) } catch (e) {}\n // if it stringifies to [object Object] attempt to JSON stringify\n if (stringified === '[object Object]') {\n // catch stringify errors and fallback to [object Object]\n try { stringified = JSON.stringify(arg) } catch (e) {}\n }\n accum[`[${i}]`] = stringified\n return accum\n }, {\n severity: method.indexOf('group') === 0 ? 'log' : method\n }), 'log')\n original.apply(console, args)\n }\n console[method]._restore = () => { console[method] = original }\n })\n}\n\nif (process.env.NODE_ENV !== 'production') {\n exports.destroy = () => CONSOLE_LOG_METHODS.forEach(method => {\n if (typeof console[method]._restore === 'function') console[method]._restore()\n })\n}\n\nconst CONSOLE_LOG_METHODS = filter(['log', 'debug', 'info', 'warn', 'error'], method =>\n typeof console !== 'undefined' && typeof console[method] === 'function'\n)\n","const map = require('@bugsnag/core/lib/es-utils/map')\nconst reduce = require('@bugsnag/core/lib/es-utils/reduce')\nconst filter = require('@bugsnag/core/lib/es-utils/filter')\n\nconst MAX_LINE_LENGTH = 200\nconst MAX_SCRIPT_LENGTH = 500000\n\nmodule.exports = (doc = document, win = window) => ({\n load: (client) => {\n if (!client._config.trackInlineScripts) return\n\n const originalLocation = win.location.href\n let html = ''\n let DOMContentLoaded = false\n const getHtml = () => doc.documentElement.outerHTML\n\n // get whatever HTML exists at this point in time\n html = getHtml()\n const prev = doc.onreadystatechange\n // then update it when the DOM content has loaded\n doc.onreadystatechange = function () {\n // IE8 compatible alternative to document#DOMContentLoaded\n if (doc.readyState === 'interactive') {\n html = getHtml()\n DOMContentLoaded = true\n }\n try { prev.apply(this, arguments) } catch (e) {}\n }\n\n let _lastScript = null\n const updateLastScript = script => {\n _lastScript = script\n }\n\n const getCurrentScript = () => {\n let script = doc.currentScript || _lastScript\n if (!script && !DOMContentLoaded) {\n const scripts = doc.scripts || doc.getElementsByTagName('script')\n script = scripts[scripts.length - 1]\n }\n return script\n }\n\n const addSurroundingCode = lineNumber => {\n // get whatever html has rendered at this point\n if (!DOMContentLoaded || !html) html = getHtml()\n // simulate the raw html\n const htmlLines = [''].concat(html.split('\\n'))\n const zeroBasedLine = lineNumber - 1\n const start = Math.max(zeroBasedLine - 3, 0)\n const end = Math.min(zeroBasedLine + 3, htmlLines.length)\n return reduce(htmlLines.slice(start, end), (accum, line, i) => {\n accum[start + 1 + i] = line.length <= MAX_LINE_LENGTH ? line : line.substr(0, MAX_LINE_LENGTH)\n return accum\n }, {})\n }\n\n client.addOnError(event => {\n // remove any of our own frames that may be part the stack this\n // happens before the inline script check as it happens for all errors\n event.errors[0].stacktrace = filter(event.errors[0].stacktrace, f => !(/__trace__$/.test(f.method)))\n\n const frame = event.errors[0].stacktrace[0]\n\n // if frame.file exists and is not the original location of the page, this can't be an inline script\n if (frame && frame.file && frame.file.replace(/#.*$/, '') !== originalLocation.replace(/#.*$/, '')) return\n\n // grab the last script known to have run\n const currentScript = getCurrentScript()\n if (currentScript) {\n const content = currentScript.innerHTML\n event.addMetadata(\n 'script',\n 'content',\n content.length <= MAX_SCRIPT_LENGTH ? content : content.substr(0, MAX_SCRIPT_LENGTH)\n )\n }\n\n // only attempt to grab some surrounding code if we have a line number\n if (!frame || !frame.lineNumber) return\n frame.code = addSurroundingCode(frame.lineNumber)\n }, true)\n\n // Proxy all the timer functions whose callback is their 0th argument.\n // Keep a reference to the original setTimeout because we need it later\n const [_setTimeout] = map([\n 'setTimeout',\n 'setInterval',\n 'setImmediate',\n 'requestAnimationFrame'\n ], fn =>\n __proxy(win, fn, original =>\n __traceOriginalScript(original, args => ({\n get: () => args[0],\n replace: fn => { args[0] = fn }\n }))\n )\n )\n\n // Proxy all the host objects whose prototypes have an addEventListener function\n map([\n 'EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode',\n 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase',\n 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow',\n 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList',\n 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'\n ], o => {\n if (!win[o] || !win[o].prototype || !Object.prototype.hasOwnProperty.call(win[o].prototype, 'addEventListener')) return\n __proxy(win[o].prototype, 'addEventListener', original =>\n __traceOriginalScript(original, eventTargetCallbackAccessor)\n )\n __proxy(win[o].prototype, 'removeEventListener', original =>\n __traceOriginalScript(original, eventTargetCallbackAccessor, true)\n )\n })\n\n function __traceOriginalScript (fn, callbackAccessor, alsoCallOriginal = false) {\n return function () {\n // this is required for removeEventListener to remove anything added with\n // addEventListener before the functions started being wrapped by Bugsnag\n const args = [].slice.call(arguments)\n try {\n const cba = callbackAccessor(args)\n const cb = cba.get()\n if (alsoCallOriginal) fn.apply(this, args)\n if (typeof cb !== 'function') return fn.apply(this, args)\n if (cb.__trace__) {\n cba.replace(cb.__trace__)\n } else {\n const script = getCurrentScript()\n // this function mustn't be annonymous due to a bug in the stack\n // generation logic, meaning it gets tripped up\n // see: https://github.com/stacktracejs/stack-generator/issues/6\n cb.__trace__ = function __trace__ () {\n // set the script that called this function\n updateLastScript(script)\n // immediately unset the currentScript synchronously below, however\n // if this cb throws an error the line after will not get run so schedule\n // an almost-immediate aysnc update too\n _setTimeout(function () { updateLastScript(null) }, 0)\n const ret = cb.apply(this, arguments)\n updateLastScript(null)\n return ret\n }\n cb.__trace__.__trace__ = cb.__trace__\n cba.replace(cb.__trace__)\n }\n } catch (e) {\n // swallow these errors on Selenium:\n // Permission denied to access property '__trace__'\n // WebDriverException: Message: Permission denied to access property \"handleEvent\"\n }\n // IE8 doesn't let you call .apply() on setTimeout/setInterval\n if (fn.apply) return fn.apply(this, args)\n switch (args.length) {\n case 1: return fn(args[0])\n case 2: return fn(args[0], args[1])\n default: return fn()\n }\n }\n }\n },\n configSchema: {\n trackInlineScripts: {\n validate: value => value === true || value === false,\n defaultValue: () => true,\n message: 'should be true|false'\n }\n }\n})\n\nfunction __proxy (host, name, replacer) {\n const original = host[name]\n if (!original) return original\n const replacement = replacer(original)\n host[name] = replacement\n return original\n}\n\nfunction eventTargetCallbackAccessor (args) {\n const isEventHandlerObj = !!args[1] && typeof args[1].handleEvent === 'function'\n return {\n get: function () {\n return isEventHandlerObj ? args[1].handleEvent : args[1]\n },\n replace: function (fn) {\n if (isEventHandlerObj) {\n args[1].handleEvent = fn\n } else {\n args[1] = fn\n }\n }\n }\n}\n","const includes = require('@bugsnag/core/lib/es-utils/includes')\n\n/*\n * Leaves breadcrumbs when the user interacts with the DOM\n */\nmodule.exports = (win = window) => ({\n load: (client) => {\n if (!('addEventListener' in win)) return\n\n if (!client._config.enabledBreadcrumbTypes || !includes(client._config.enabledBreadcrumbTypes, 'user')) return\n\n win.addEventListener('click', (event) => {\n let targetText, targetSelector\n try {\n targetText = getNodeText(event.target)\n targetSelector = getNodeSelector(event.target, win)\n } catch (e) {\n targetText = '[hidden]'\n targetSelector = '[hidden]'\n client._logger.error('Cross domain error when tracking click event. See docs: https://tinyurl.com/yy3rn63z')\n }\n client.leaveBreadcrumb('UI click', { targetText, targetSelector }, 'user')\n }, true)\n }\n})\n\n// extract text content from a element\nconst getNodeText = el => {\n let text = el.textContent || el.innerText || ''\n if (!text && (el.type === 'submit' || el.type === 'button')) text = el.value\n text = text.replace(/^\\s+|\\s+$/g, '') // trim whitespace\n return truncate(text, 140)\n}\n\n// Create a label from tagname, id and css class of the element\nfunction getNodeSelector (el, win) {\n const parts = [el.tagName]\n if (el.id) parts.push('#' + el.id)\n if (el.className && el.className.length) parts.push(`.${el.className.split(' ').join('.')}`)\n // Can't get much more advanced with the current browser\n if (!win.document.querySelectorAll || !Array.prototype.indexOf) return parts.join('')\n try {\n if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join('')\n } catch (e) {\n // Sometimes the query selector can be invalid just return it as-is\n return parts.join('')\n }\n // try to get a more specific selector if this one matches more than one element\n if (el.parentNode.childNodes.length > 1) {\n const index = Array.prototype.indexOf.call(el.parentNode.childNodes, el) + 1\n parts.push(`:nth-child(${index})`)\n }\n if (win.document.querySelectorAll(parts.join('')).length === 1) return parts.join('')\n // try prepending the parent node selector\n if (el.parentNode) return `${getNodeSelector(el.parentNode, win)} > ${parts.join('')}`\n return parts.join('')\n}\n\nfunction truncate (value, length) {\n const ommision = '(...)'\n if (value && value.length <= length) return value\n return value.slice(0, length - ommision.length) + ommision\n}\n","const includes = require('@bugsnag/core/lib/es-utils/includes')\n\n/*\n* Leaves breadcrumbs when navigation methods are called or events are emitted\n*/\nmodule.exports = (win = window) => {\n const plugin = {\n load: (client) => {\n if (!('addEventListener' in win)) return\n\n if (!client._config.enabledBreadcrumbTypes || !includes(client._config.enabledBreadcrumbTypes, 'navigation')) return\n\n // returns a function that will drop a breadcrumb with a given name\n const drop = name => () => client.leaveBreadcrumb(name, {}, 'navigation')\n\n // simple drops – just names, no meta\n win.addEventListener('pagehide', drop('Page hidden'), true)\n win.addEventListener('pageshow', drop('Page shown'), true)\n win.addEventListener('load', drop('Page loaded'), true)\n win.document.addEventListener('DOMContentLoaded', drop('DOMContentLoaded'), true)\n // some browsers like to emit popstate when the page loads, so only add the popstate listener after that\n win.addEventListener('load', () => win.addEventListener('popstate', drop('Navigated back'), true))\n\n // hashchange has some metadata that we care about\n win.addEventListener('hashchange', event => {\n const metadata = event.oldURL\n ? { from: relativeLocation(event.oldURL, win), to: relativeLocation(event.newURL, win), state: getCurrentState(win) }\n : { to: relativeLocation(win.location.href, win) }\n client.leaveBreadcrumb('Hash changed', metadata, 'navigation')\n }, true)\n\n // the only way to know about replaceState/pushState is to wrap them… >_<\n\n if (win.history.replaceState) wrapHistoryFn(client, win.history, 'replaceState', win)\n if (win.history.pushState) wrapHistoryFn(client, win.history, 'pushState', win)\n\n client.leaveBreadcrumb('Bugsnag loaded', {}, 'navigation')\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n plugin.destroy = (win = window) => {\n win.history.replaceState._restore()\n win.history.pushState._restore()\n }\n }\n\n return plugin\n}\n\nif (process.env.NODE_ENV !== 'production') {\n exports.destroy = (win = window) => {\n win.history.replaceState._restore()\n win.history.pushState._restore()\n }\n}\n\n// takes a full url like http://foo.com:1234/pages/01.html?yes=no#section-2 and returns\n// just the path and hash parts, e.g. /pages/01.html?yes=no#section-2\nconst relativeLocation = (url, win) => {\n const a = win.document.createElement('A')\n a.href = url\n return `${a.pathname}${a.search}${a.hash}`\n}\n\nconst stateChangeToMetadata = (win, state, title, url) => {\n const currentPath = relativeLocation(win.location.href, win)\n return { title, state, prevState: getCurrentState(win), to: url || currentPath, from: currentPath }\n}\n\nconst wrapHistoryFn = (client, target, fn, win) => {\n const orig = target[fn]\n target[fn] = (state, title, url) => {\n client.leaveBreadcrumb(`History ${fn}`, stateChangeToMetadata(win, state, title, url), 'navigation')\n // if throttle plugin is in use, reset the event sent count\n if (typeof client.resetEventCount === 'function') client.resetEventCount()\n // if the client is operating in auto session-mode, a new route should trigger a new session\n if (client._config.autoTrackSessions) client.startSession()\n // Internet Explorer will convert `undefined` to a string when passed, causing an unintended redirect\n // to '/undefined'. therefore we only pass the url if it's not undefined.\n orig.apply(target, [state, title].concat(url !== undefined ? url : []))\n }\n if (process.env.NODE_ENV !== 'production') {\n target[fn]._restore = () => { target[fn] = orig }\n }\n}\n\nconst getCurrentState = (win) => {\n try {\n return win.history.state\n } catch (e) {}\n}\n","const BREADCRUMB_TYPE = 'request'\n\n// keys to safely store metadata on the request object\nconst REQUEST_SETUP_KEY = 'BS~~S'\nconst REQUEST_URL_KEY = 'BS~~U'\nconst REQUEST_METHOD_KEY = 'BS~~M'\n\nconst includes = require('@bugsnag/core/lib/es-utils/includes')\n\n/*\n * Leaves breadcrumbs when network requests occur\n */\nmodule.exports = (_ignoredUrls = [], win = window) => {\n let restoreFunctions = []\n const plugin = {\n load: client => {\n if (!client._config.enabledBreadcrumbTypes || !includes(client._config.enabledBreadcrumbTypes, 'request')) return\n\n const ignoredUrls = [\n client._config.endpoints.notify,\n client._config.endpoints.sessions\n ].concat(_ignoredUrls)\n\n monkeyPatchXMLHttpRequest()\n monkeyPatchFetch()\n\n // XMLHttpRequest monkey patch\n function monkeyPatchXMLHttpRequest () {\n if (!('addEventListener' in win.XMLHttpRequest.prototype)) return\n const nativeOpen = win.XMLHttpRequest.prototype.open\n\n // override native open()\n win.XMLHttpRequest.prototype.open = function open (method, url) {\n // store url and HTTP method for later\n this[REQUEST_URL_KEY] = url\n this[REQUEST_METHOD_KEY] = method\n\n // if we have already setup listeners, it means open() was called twice, we need to remove\n // the listeners and recreate them\n if (this[REQUEST_SETUP_KEY]) {\n this.removeEventListener('load', handleXHRLoad)\n this.removeEventListener('error', handleXHRError)\n }\n\n // attach load event listener\n this.addEventListener('load', handleXHRLoad)\n // attach error event listener\n this.addEventListener('error', handleXHRError)\n\n this[REQUEST_SETUP_KEY] = true\n\n nativeOpen.apply(this, arguments)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n restoreFunctions.push(() => {\n win.XMLHttpRequest.prototype.open = nativeOpen\n })\n }\n }\n\n function handleXHRLoad () {\n if (includes(ignoredUrls, this[REQUEST_URL_KEY])) {\n // don't leave a network breadcrumb from bugsnag notify calls\n return\n }\n const metadata = {\n status: this.status,\n request: `${this[REQUEST_METHOD_KEY]} ${this[REQUEST_URL_KEY]}`\n }\n if (this.status >= 400) {\n // contacted server but got an error response\n client.leaveBreadcrumb('XMLHttpRequest failed', metadata, BREADCRUMB_TYPE)\n } else {\n client.leaveBreadcrumb('XMLHttpRequest succeeded', metadata, BREADCRUMB_TYPE)\n }\n }\n\n function handleXHRError () {\n if (includes(ignoredUrls, this[REQUEST_URL_KEY])) {\n // don't leave a network breadcrumb from bugsnag notify calls\n return\n }\n // failed to contact server\n client.leaveBreadcrumb('XMLHttpRequest error', {\n request: `${this[REQUEST_METHOD_KEY]} ${this[REQUEST_URL_KEY]}`\n }, BREADCRUMB_TYPE)\n }\n\n // window.fetch monkey patch\n function monkeyPatchFetch () {\n // only patch it if it exists and if it is not a polyfill (patching a polyfilled\n // fetch() results in duplicate breadcrumbs for the same request because the\n // implementation uses XMLHttpRequest which is also patched)\n if (!('fetch' in win) || win.fetch.polyfill) return\n\n const oldFetch = win.fetch\n win.fetch = function fetch () {\n const urlOrRequest = arguments[0]\n const options = arguments[1]\n\n let method\n let url = null\n\n if (urlOrRequest && typeof urlOrRequest === 'object') {\n url = urlOrRequest.url\n if (options && 'method' in options) {\n method = options.method\n } else if (urlOrRequest && 'method' in urlOrRequest) {\n method = urlOrRequest.method\n }\n } else {\n url = urlOrRequest\n if (options && 'method' in options) {\n method = options.method\n }\n }\n\n if (method === undefined) {\n method = 'GET'\n }\n\n return new Promise((resolve, reject) => {\n // pass through to native fetch\n oldFetch(...arguments)\n .then(response => {\n handleFetchSuccess(response, method, url)\n resolve(response)\n })\n .catch(error => {\n handleFetchError(method, url)\n reject(error)\n })\n })\n }\n\n if (process.env.NODE_ENV !== 'production') {\n restoreFunctions.push(() => {\n win.fetch = oldFetch\n })\n }\n }\n\n const handleFetchSuccess = (response, method, url) => {\n const metadata = {\n status: response.status,\n request: `${method} ${url}`\n }\n if (response.status >= 400) {\n // when the request comes back with a 4xx or 5xx status it does not reject the fetch promise,\n client.leaveBreadcrumb('fetch() failed', metadata, BREADCRUMB_TYPE)\n } else {\n client.leaveBreadcrumb('fetch() succeeded', metadata, BREADCRUMB_TYPE)\n }\n }\n\n const handleFetchError = (method, url) => {\n client.leaveBreadcrumb('fetch() error', { request: `${method} ${url}` }, BREADCRUMB_TYPE)\n }\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n plugin.destroy = () => {\n restoreFunctions.forEach(fn => fn())\n restoreFunctions = []\n }\n }\n\n return plugin\n}\n","const intRange = require('@bugsnag/core/lib/validators/int-range')\n\n/*\n * Throttles and dedupes events\n */\n\nmodule.exports = {\n load: (client) => {\n // track sent events for each init of the plugin\n let n = 0\n\n // add onError hook\n client.addOnError((event) => {\n // have max events been sent already?\n if (n >= client._config.maxEvents) return false\n n++\n })\n\n client.resetEventCount = () => { n = 0 }\n },\n configSchema: {\n maxEvents: {\n defaultValue: () => 10,\n message: 'should be a positive integer ≤100',\n validate: val => intRange(1, 100)(val)\n }\n }\n}\n","/*\n * Remove query strings (and fragments) from stacktraces\n */\nconst map = require('@bugsnag/core/lib/es-utils/map')\nconst reduce = require('@bugsnag/core/lib/es-utils/reduce')\n\nmodule.exports = {\n load: (client) => {\n client.addOnError(event => {\n const allFrames = reduce(event.errors, (accum, er) => accum.concat(er.stacktrace), [])\n map(allFrames, frame => {\n frame.file = strip(frame.file)\n })\n })\n }\n}\n\nconst strip = module.exports._strip = str =>\n typeof str === 'string'\n ? str.replace(/\\?.*$/, '').replace(/#.*$/, '')\n : str\n","/*\n * Automatically notifies Bugsnag when window.onerror is called\n */\n\nmodule.exports = (win = window) => ({\n load: (client) => {\n if (!client._config.autoDetectErrors) return\n if (!client._config.enabledErrorTypes.unhandledExceptions) return\n function onerror (messageOrEvent, url, lineNo, charNo, error) {\n // Ignore errors with no info due to CORS settings\n if (lineNo === 0 && /Script error\\.?/.test(messageOrEvent)) {\n client._logger.warn('Ignoring cross-domain or eval script error. See docs: https://tinyurl.com/yy3rn63z')\n } else {\n // any error sent to window.onerror is unhandled and has severity=error\n const handledState = { severity: 'error', unhandled: true, severityReason: { type: 'unhandledException' } }\n\n let event\n\n // window.onerror can be called in a number of ways. This big if-else is how we\n // figure out which arguments were supplied, and what kind of values it received.\n\n if (error) {\n // if the last parameter (error) was supplied, this is a modern browser's\n // way of saying \"this value was thrown and not caught\"\n event = client.Event.create(error, true, handledState, 'window onerror', 1)\n decorateStack(event.errors[0].stacktrace, url, lineNo, charNo)\n } else if (\n // This complex case detects \"error\" events that are typically synthesised\n // by jquery's trigger method (although can be created in other ways). In\n // order to detect this:\n // - the first argument (message) must exist and be an object (most likely it's a jQuery event)\n // - the second argument (url) must either not exist or be something other than a string (if it\n // exists and is not a string, it'll be the extraParameters argument from jQuery's trigger()\n // function)\n // - the third, fourth and fifth arguments must not exist (lineNo, charNo and error)\n (typeof messageOrEvent === 'object' && messageOrEvent !== null) &&\n (!url || typeof url !== 'string') &&\n !lineNo && !charNo && !error\n ) {\n // The jQuery event may have a \"type\" property, if so use it as part of the error message\n const name = messageOrEvent.type ? `Event: ${messageOrEvent.type}` : 'Error'\n // attempt to find a message from one of the conventional properties, but\n // default to empty string (the event will fill it with a placeholder)\n const message = messageOrEvent.message || messageOrEvent.detail || ''\n\n event = client.Event.create({ name, message }, true, handledState, 'window onerror', 1)\n\n // provide the original thing onerror received – not our error-like object we passed to _notify\n event.originalError = messageOrEvent\n\n // include the raw input as metadata – it might contain more info than we extracted\n event.addMetadata('window onerror', { event: messageOrEvent, extraParameters: url })\n } else {\n // Lastly, if there was no \"error\" parameter this event was probably from an old\n // browser that doesn't support that. Instead we need to generate a stacktrace.\n event = client.Event.create(messageOrEvent, true, handledState, 'window onerror', 1)\n decorateStack(event.errors[0].stacktrace, url, lineNo, charNo)\n }\n\n client._notify(event)\n }\n\n if (typeof prevOnError === 'function') prevOnError.apply(this, arguments)\n }\n\n const prevOnError = win.onerror\n win.onerror = onerror\n }\n})\n\n// Sometimes the stacktrace has less information than was passed to window.onerror.\n// This function will augment the first stackframe with any useful info that was\n// received as arguments to the onerror callback.\nconst decorateStack = (stack, url, lineNo, charNo) => {\n if (!stack[0]) stack.push({})\n const culprit = stack[0]\n if (!culprit.file && typeof url === 'string') culprit.file = url\n if (!culprit.lineNumber && isActualNumber(lineNo)) culprit.lineNumber = lineNo\n if (!culprit.columnNumber) {\n if (isActualNumber(charNo)) {\n culprit.columnNumber = charNo\n } else if (window.event && isActualNumber(window.event.errorCharacter)) {\n culprit.columnNumber = window.event.errorCharacter\n }\n }\n}\n\nconst isActualNumber = (n) => typeof n === 'number' && String.call(n) !== 'NaN'\n","const map = require('@bugsnag/core/lib/es-utils/map')\nconst isError = require('@bugsnag/core/lib/iserror')\n\nlet _listener\n/*\n * Automatically notifies Bugsnag when window.onunhandledrejection is called\n */\nmodule.exports = (win = window) => {\n const plugin = {\n load: (client) => {\n if (!client._config.autoDetectErrors || !client._config.enabledErrorTypes.unhandledRejections) return\n const listener = evt => {\n let error = evt.reason\n let isBluebird = false\n\n // accessing properties on evt.detail can throw errors (see #394)\n try {\n if (evt.detail && evt.detail.reason) {\n error = evt.detail.reason\n isBluebird = true\n }\n } catch (e) {}\n\n const event = client.Event.create(error, false, {\n severity: 'error',\n unhandled: true,\n severityReason: { type: 'unhandledPromiseRejection' }\n }, 'unhandledrejection handler', 1, client._logger)\n\n if (isBluebird) {\n map(event.errors[0].stacktrace, fixBluebirdStacktrace(error))\n }\n\n client._notify(event, (event) => {\n if (isError(event.originalError) && !event.originalError.stack) {\n event.addMetadata('unhandledRejection handler', {\n [Object.prototype.toString.call(event.originalError)]: {\n name: event.originalError.name,\n message: event.originalError.message,\n code: event.originalError.code\n }\n })\n }\n })\n }\n if ('addEventListener' in win) {\n win.addEventListener('unhandledrejection', listener)\n } else {\n win.onunhandledrejection = (reason, promise) => {\n listener({ detail: { reason, promise } })\n }\n }\n _listener = listener\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n plugin.destroy = (win = window) => {\n if (_listener) {\n if ('addEventListener' in win) {\n win.removeEventListener('unhandledrejection', _listener)\n } else {\n win.onunhandledrejection = null\n }\n }\n _listener = null\n }\n }\n\n return plugin\n}\n\n// The stack parser on bluebird stacks in FF get a suprious first frame:\n//\n// Error: derp\n// b@http://localhost:5000/bluebird.html:22:24\n// a@http://localhost:5000/bluebird.html:18:9\n// @http://localhost:5000/bluebird.html:14:9\n//\n// results in\n// […]\n// 0: Object { file: \"Error: derp\", method: undefined, lineNumber: undefined, … }\n// 1: Object { file: \"http://localhost:5000/bluebird.html\", method: \"b\", lineNumber: 22, … }\n// 2: Object { file: \"http://localhost:5000/bluebird.html\", method: \"a\", lineNumber: 18, … }\n// 3: Object { file: \"http://localhost:5000/bluebird.html\", lineNumber: 14, columnNumber: 9, … }\n//\n// so the following reduce/accumulator function removes such frames\n//\n// Bluebird pads method names with spaces so trim that too…\n// https://github.com/petkaantonov/bluebird/blob/b7f21399816d02f979fe434585334ce901dcaf44/src/debuggability.js#L568-L571\nconst fixBluebirdStacktrace = (error) => (frame) => {\n if (frame.file === error.toString()) return\n if (frame.method) {\n frame.method = frame.method.replace(/^\\s+/, '')\n }\n}\n","const name = 'Bugsnag JavaScript'\nconst version = '7.6.0'\nconst url = 'https://github.com/bugsnag/bugsnag-js'\n\nconst Client = require('@bugsnag/core/client')\nconst Event = require('@bugsnag/core/event')\nconst Session = require('@bugsnag/core/session')\nconst Breadcrumb = require('@bugsnag/core/breadcrumb')\n\nconst map = require('@bugsnag/core/lib/es-utils/map')\nconst keys = require('@bugsnag/core/lib/es-utils/keys')\nconst assign = require('@bugsnag/core/lib/es-utils/assign')\n\n// extend the base config schema with some browser-specific options\nconst schema = assign({}, require('@bugsnag/core/config').schema, require('./config'))\n\nconst pluginWindowOnerror = require('@bugsnag/plugin-window-onerror')\nconst pluginUnhandledRejection = require('@bugsnag/plugin-window-unhandled-rejection')\nconst pluginApp = require('@bugsnag/plugin-app-duration')\nconst pluginDevice = require('@bugsnag/plugin-browser-device')\nconst pluginContext = require('@bugsnag/plugin-browser-context')\nconst pluginRequest = require('@bugsnag/plugin-browser-request')\nconst pluginThrottle = require('@bugsnag/plugin-simple-throttle')\nconst pluginConsoleBreadcrumbs = require('@bugsnag/plugin-console-breadcrumbs')\nconst pluginNetworkBreadcrumbs = require('@bugsnag/plugin-network-breadcrumbs')\nconst pluginNavigationBreadcrumbs = require('@bugsnag/plugin-navigation-breadcrumbs')\nconst pluginInteractionBreadcrumbs = require('@bugsnag/plugin-interaction-breadcrumbs')\nconst pluginInlineScriptContent = require('@bugsnag/plugin-inline-script-content')\nconst pluginSession = require('@bugsnag/plugin-browser-session')\nconst pluginIp = require('@bugsnag/plugin-client-ip')\nconst pluginStripQueryString = require('@bugsnag/plugin-strip-query-string')\n\n// delivery mechanisms\nconst dXDomainRequest = require('@bugsnag/delivery-x-domain-request')\nconst dXMLHttpRequest = require('@bugsnag/delivery-xml-http-request')\n\nconst Bugsnag = {\n _client: null,\n createClient: (opts) => {\n // handle very simple use case where user supplies just the api key as a string\n if (typeof opts === 'string') opts = { apiKey: opts }\n if (!opts) opts = {}\n\n const internalPlugins = [\n // add browser-specific plugins\n pluginApp,\n pluginDevice(),\n pluginContext(),\n pluginRequest(),\n pluginThrottle,\n pluginSession,\n pluginIp,\n pluginStripQueryString,\n pluginWindowOnerror(),\n pluginUnhandledRejection(),\n pluginNavigationBreadcrumbs(),\n pluginInteractionBreadcrumbs(),\n pluginNetworkBreadcrumbs(),\n pluginConsoleBreadcrumbs,\n\n // this one added last to avoid wrapping functionality before bugsnag uses it\n pluginInlineScriptContent()\n ]\n\n // configure a client with user supplied options\n const bugsnag = new Client(opts, schema, internalPlugins, { name, version, url })\n\n // set delivery based on browser capability (IE 8+9 have an XDomainRequest object)\n bugsnag._setDelivery(window.XDomainRequest ? dXDomainRequest : dXMLHttpRequest)\n\n bugsnag._logger.debug('Loaded!')\n\n return bugsnag._config.autoTrackSessions\n ? bugsnag.startSession()\n : bugsnag\n },\n start: (opts) => {\n if (Bugsnag._client) {\n Bugsnag._client._logger.warn('Bugsnag.start() was called more than once. Ignoring.')\n return Bugsnag._client\n }\n Bugsnag._client = Bugsnag.createClient(opts)\n return Bugsnag._client\n }\n}\n\nmap(['resetEventCount'].concat(keys(Client.prototype)), (m) => {\n if (/^_/.test(m)) return\n Bugsnag[m] = function () {\n if (!Bugsnag._client) return console.log(`Bugsnag.${m}() was called before Bugsnag.start()`)\n Bugsnag._client._depth += 1\n const ret = Bugsnag._client[m].apply(Bugsnag._client, arguments)\n Bugsnag._client._depth -= 1\n return ret\n }\n})\n\nmodule.exports = Bugsnag\n\nmodule.exports.Client = Client\nmodule.exports.Event = Event\nmodule.exports.Session = Session\nmodule.exports.Breadcrumb = Breadcrumb\n\n// Export a \"default\" property for compatibility with ESM imports\nmodule.exports.default = Bugsnag\n","const assign = require('@bugsnag/core/lib/es-utils/assign')\n\n/*\n * Sets the event request: { url } to be the current href\n */\nmodule.exports = (win = window) => ({\n load: (client) => {\n client.addOnError(event => {\n if (event.request && event.request.url) return\n event.request = assign({}, event.request, { url: win.location.href })\n }, true)\n }\n})\n","/*\n * Sets the default context to be the current URL\n */\nmodule.exports = (win = window) => ({\n load: (client) => {\n client.addOnError(event => {\n if (event.context !== undefined) return\n event.context = win.location.pathname\n }, true)\n }\n})\n","\nreturn _$notifier_2;\n\n});\n"]}