{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack:///./node_modules/raven-js/src/singleton.js","webpack:///(webpack)/buildin/global.js","webpack:///./app/javascript/packs/raven.js","webpack:///./app/javascript/raven/index.js","webpack:///./node_modules/raven-js/src/raven.js","webpack:///./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack:///./node_modules/raven-js/vendor/md5/md5.js","webpack:///./node_modules/raven-js/src/configError.js","webpack:///./node_modules/raven-js/src/console.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/raven-js/src/utils.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","indexOf","haystack","needle","length","serializer","replacer","cycleReplacer","stack","keys","slice","join","thisPos","this","splice","push","Infinity","Error","err","message","stringifyError","obj","spaces","JSON","stringify","getSerialize","RavenConstructor","_window","window","global","self","_Raven","Raven","noConflict","afterLoad","Client","g","Function","e","require","config","process","env","SENTRY_DSN_PUBLIC","environment","shouldSendCallback","install","TraceKit","md5","RavenConfigError","utils","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","wrapConsoleMethod","wrapMethod","dsnKeys","split","dsnPattern","now","Date","_document","document","_navigator","navigator","keepOriginalCallback","original","callback","data","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","id","logger","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","referrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","console","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","location","_lastHref","href","_resetBackoff","VERSION","debug","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","toString","instrumentDefaults","tryCatch","isSetup","report","subscribe","_handleOnErrorStackInfo","apply","arguments","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","substr","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","args","wrap","_before","undefined","__raven__","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","type","handled","addEventListener","removeEventListener","ex","trimHeadFrames","error","captureMessage","stacktrace","_getCaptureExceptionOptionsFromPlainObject","computeStackTrace","_handleStackInfo","ex1","currentOptions","exKeys","sort","fingerprint","extra","__serialized__","msg","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","result","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","encodedOptions","email","globalServer","script","createElement","async","src","head","body","appendChild","setTimeout","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","tagName","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","orig","fn","Array","originalCallback","function","wrapEventTarget","proto","capture","secure","handleEvent","handler","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","level","attachEvent","chrome","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","_","builtin","installer","concat","str","exec","allowSecretKey","port","stackInfo","_processException","lineno","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","filename","line","colno","column","prefixedMessage","exception","values","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","Boolean","_setBackoffState","retry","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","replace","onload","onerror","open","setRequestHeader","send","hash","evaluated","setUser","setReleaseContext","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastExceptionStack","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","augmentStackTraceWithInitialElement","processLastException","groups","match","_lastExceptionStack","_lastArgs","rethrow","incomplete","installGlobalHandler","unsubscribe","uninstallGlobalHandler","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","columnNumber","source","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","initial","unshift","partial","computeStackTraceByWalkingCallerChain","depth","item","functionName","funcs","recursion","curr","caller","input","substring","sourceURL","fileName","lineNumber","description","safeAdd","x","y","lsw","md5cmn","q","a","b","num","cnt","md5ff","md5gg","md5hh","md5ii","binlMD5","len","olda","oldb","oldc","oldd","binl2rstr","output","length32","String","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","k","bkey","ipad","opad","rstrHMACMD5","string","raw","constructor","originalConsoleLevel","originalConsole","sentryLevel","safeJoin","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","array","noop","nextTick","title","browser","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","what","Headers","Response","patterns","pattern","sources","RegExp","htmlElementAsString","elem","className","classes","attr","out","attrWhitelist","getAttribute","isOnlyOneTruthy","stack1","stack2","frames1","frames2","jsonSize","encodeURI","utf8Length","serializeValue","serializeObject","reduce","acc","map","val","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","normalizedData","obj1","obj2","isFrozen","pairs","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","v","nextStr","height","sepLength","parentNode","ex2","query","fragment","replacement","track","delimiter","maxSize","serialized","maxLength","filter","usedKeys","safeInput","sanitizeRegExp","o_O","sanitizeWorker","workerInput"],"mappings":"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","file":"js/raven-fc059186bb9160272825.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1749);\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n return err;\n}\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n if (cycleReplacer == null) {\n cycleReplacer = function (key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n return function (key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n return replacer == null ? value instanceof Error ? stringifyError(value) : value : replacer.call(this, key, value);\n };\n}","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function () {\n _window.Raven = _Raven;\n return Raven;\n};\nRaven.afterLoad();\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;","var g;\n\n// This works in non-strict mode\ng = function () {\n return this;\n}();\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;","require('../raven');\n","\nimport Raven from 'raven-js';\n\nvar isDevelopmentEnvironment = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test';\nif (!isDevelopmentEnvironment){\n Raven.config(\n process.env.SENTRY_DSN_PUBLIC,\n {\n environment: process.env.NODE_ENV,\n shouldSendCallback: function () { return !(isDevelopmentEnvironment); }\n }\n ).install();\n}\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\nvar wrapConsoleMethod = require('./console').wrapMethod;\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback) ? function (data) {\n return callback(data, original);\n } : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.27.2',\n debug: false,\n TraceKit: TraceKit,\n // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function (dsn, options) {\n var self = this;\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function (key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length ? joinRegExp(globalOptions.ignoreUrls) : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length ? joinRegExp(globalOptions.whitelistUrls) : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(0, Math.min(globalOptions.maxBreadcrumbs || 100, 100)); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n var instrumentDefaults = {\n tryCatch: true\n };\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function () {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function () {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n self._patchFunctionToString();\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n self._isRavenInstalled = true;\n }\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function (dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n self._globalServer = self._getGlobalServer(uri);\n self._globalEndpoint = self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function (options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n return this.wrap(options, func).apply(this, args);\n },\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function (options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || options && options.deep !== false;\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n return wrapped;\n },\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function () {\n TraceKit.report.uninstall();\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n return this;\n },\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function (event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function () {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener && _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function () {\n _window.removeEventListener && _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function (ex, options) {\n options = objectMerge({\n trimHeadFrames: 0\n }, options ? options : {});\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n return this.captureMessage(message, objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n }));\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(ex, objectMerge(options, {\n stacktrace: true,\n // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n }));\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n return this;\n },\n _getCaptureExceptionOptionsFromPlainObject: function (currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message: 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n return options;\n },\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function (msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (!!this._globalOptions.ignoreErrors.test && this._globalOptions.ignoreErrors.test(msg)) {\n return;\n }\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge({\n message: msg\n }, options);\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n var fileurl = initialCall && initialCall.url || '';\n if (!!this._globalOptions.ignoreUrls.test && this._globalOptions.ignoreUrls.test(fileurl)) {\n return;\n }\n if (!!this._globalOptions.whitelistUrls.test && !this._globalOptions.whitelistUrls.test(fileurl)) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n options = objectMerge({\n trimHeadFrames: 0\n }, options);\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint) ? data.fingerprint : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n return this;\n },\n captureBreadcrumb: function (obj) {\n var crumb = objectMerge({\n timestamp: now() / 1000\n }, obj);\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n addPlugin: function (plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n return this;\n },\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function (user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n return this;\n },\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function (extra) {\n this._mergeContext('extra', extra);\n return this;\n },\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function (tags) {\n this._mergeContext('tags', tags);\n return this;\n },\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function () {\n this._globalContext = {};\n return this;\n },\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function () {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function (environment) {\n this._globalOptions.environment = environment;\n return this;\n },\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function (release) {\n this._globalOptions.release = release;\n return this;\n },\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function (callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function (callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function (callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function (transport) {\n this._globalOptions.transport = transport;\n return this;\n },\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function () {\n return this._lastCapturedException;\n },\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function () {\n return this._lastEventId;\n },\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function () {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n afterLoad: function () {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n showReportDialog: function (options) {\n if (!_document // doesn't work without a document (React native)\n ) return;\n options = objectMerge({\n eventId: this.lastEventId(),\n dsn: this._dsn,\n user: this._globalContext.user || {}\n }, options);\n if (!options.eventId) {\n throw new RavenConfigError('Missing eventId');\n }\n if (!options.dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n var encode = encodeURIComponent;\n var encodedOptions = [];\n for (var key in options) {\n if (key === 'user') {\n var user = options.user;\n if (user.name) encodedOptions.push('name=' + encode(user.name));\n if (user.email) encodedOptions.push('email=' + encode(user.email));\n } else {\n encodedOptions.push(encode(key) + '=' + encode(options[key]));\n }\n }\n var globalServer = this._getGlobalServer(this._parseDSN(options.dsn));\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/?' + encodedOptions.join('&');\n (_document.head || _document.body).appendChild(script);\n },\n /**** Private functions ****/\n _ignoreNextOnError: function () {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function () {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n _triggerEvent: function (eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n if (!this._hasDocument) return;\n options = options || {};\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n for (key in options) if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function (evtName) {\n var self = this;\n return function (evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n self.captureBreadcrumb({\n category: 'ui.' + evtName,\n // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function () {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function (evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (!tagName || tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function () {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function (from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) from = parsedFrom.relative;\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n _patchFunctionToString: function () {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function () {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n _unpatchFunctionToString: function () {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function () {\n var self = this;\n var wrappedBuiltIns = self._wrappedBuiltIns;\n function wrapTimeFn(orig) {\n return function (fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap({\n mechanism: {\n type: 'instrument',\n data: {\n function: orig.name || ''\n }\n }\n }, originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(proto, 'addEventListener', function (orig) {\n return function (evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap({\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: fn && fn.name || ''\n }\n }\n }, fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n if (autoBreadcrumbs && autoBreadcrumbs.dom && (global === 'EventTarget' || global === 'Node')) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function (evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(this, evtName, self.wrap({\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: fn && fn.name || ''\n }\n }\n }, fn, before), capture, secure);\n };\n }, wrappedBuiltIns);\n fill(proto, 'removeEventListener', function (orig) {\n return function (evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n }, wrappedBuiltIns);\n }\n }\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(_window, 'requestAnimationFrame', function (orig) {\n return function (cb) {\n return orig(self.wrap({\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: orig && orig.name || ''\n }\n }\n }, cb));\n };\n }, wrappedBuiltIns);\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function () {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n var wrappedBuiltIns = self._wrappedBuiltIns;\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function (orig) {\n return self.wrap({\n mechanism: {\n type: 'instrument',\n data: {\n function: prop,\n handler: orig && orig.name || ''\n }\n }\n }, orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(xhrproto, 'open', function (origOpen) {\n return function (method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n return origOpen.apply(this, arguments);\n };\n }, wrappedBuiltIns);\n fill(xhrproto, 'send', function (origSend) {\n return function () {\n // preserve arity\n var xhr = this;\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(xhr, 'onreadystatechange', function (orig) {\n return self.wrap({\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: orig && orig.name || ''\n }\n }\n }, orig, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */);\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return origSend.apply(this, arguments);\n };\n }, wrappedBuiltIns);\n }\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(_window, 'fetch', function (origFetch) {\n return function () {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n return origFetch.apply(this, args).then(function (response) {\n fetchData.status_code = response.status;\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n return response;\n })['catch'](function (err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n throw err;\n });\n };\n }, wrappedBuiltIns);\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState = !isChromePackagedApp && _window.history && _window.history.pushState && _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function () {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n var historyReplacementFunction = function (origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function /* state, title, url */\n () {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n return origHistFunction.apply(this, arguments);\n };\n };\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function (msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n each(['debug', 'info', 'warn', 'error', 'log'], function (_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n _restoreBuiltIns: function () {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n obj[name] = orig;\n }\n },\n _restoreConsole: function () {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n _drainPlugins: function () {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function (_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n _parseDSN: function (str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError('Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key');\n }\n return dsn;\n },\n _getGlobalServer: function (uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n _handleOnErrorStackInfo: function (stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n _handleStackInfo: function (stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n this._processException(stackInfo.name, stackInfo.message, stackInfo.url, stackInfo.lineno, frames, options);\n },\n _prepareFrames: function (stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function (i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n _normalizeFrame: function (frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n normalized.in_app = !(\n // determine if an exception came from outside of our app\n // first we check the global includePaths list.\n\n !!this._globalOptions.includePaths.test && !this._globalOptions.includePaths.test(normalized.filename) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename));\n return normalized;\n },\n _processException: function (type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (!!this._globalOptions.ignoreErrors.test && (this._globalOptions.ignoreErrors.test(message) || this._globalOptions.ignoreErrors.test(prefixedMessage))) {\n return;\n }\n var stacktrace;\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {\n frames: frames\n };\n } else if (fileurl) {\n stacktrace = {\n frames: [{\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }]\n };\n }\n if (!!this._globalOptions.ignoreUrls.test && this._globalOptions.ignoreUrls.test(fileurl)) {\n return;\n }\n if (!!this._globalOptions.whitelistUrls.test && !this._globalOptions.whitelistUrls.test(fileurl)) {\n return;\n }\n var data = objectMerge({\n // sentry.interfaces.Exception\n exception: {\n values: [{\n type: type,\n value: message,\n stacktrace: stacktrace\n }]\n },\n transaction: fileurl\n }, options);\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n data.exception.mechanism = objectMerge({\n type: 'generic',\n handled: true\n }, data.exception.mechanism || {});\n\n // Fire away!\n this._send(data);\n },\n _trimPacket: function (data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n if (data.breadcrumbs && data.breadcrumbs.values) this._trimBreadcrumbs(data.breadcrumbs);\n return data;\n },\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function (breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (!crumb.hasOwnProperty('data') || !isObject(crumb.data) || objectFrozen(crumb.data)) continue;\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n _getHttpData: function () {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n return httpData;\n },\n _resetBackoff: function () {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n _shouldBackoff: function () {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function (current) {\n var last = this._lastData;\n if (!last || current.message !== last.message ||\n // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n ) return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n } else if (current.fingerprint || last.fingerprint) {\n return Boolean(current.fingerprint && last.fingerprint) && JSON.stringify(current.fingerprint) === JSON.stringify(last.fingerprint);\n }\n return true;\n },\n _setBackoffState: function (request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n this._backoffDuration = retry ?\n // If Sentry server returned a Retry-After value, use it\n retry :\n // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n this._backoffStart = now();\n },\n _send: function (data) {\n var globalOptions = this._globalOptions;\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function (key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (isFunction(globalOptions.shouldSendCallback) && !globalOptions.shouldSendCallback(data)) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n _sanitizeData: function (data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n _getUuid: function () {\n return uuid4();\n },\n _sendProcessedPayload: function (data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n this._logDebug('debug', 'Raven about to send:', data);\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (this._globalOptions.autoBreadcrumbs && this._globalOptions.autoBreadcrumbs.sentry) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception ? (exception.type ? exception.type + ': ' : '') + exception.value : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n if (error.request) {\n self._setBackoffState(error.request);\n }\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n _makeRequest: function (opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n return _window.fetch(url, fetchOptions).then(function (response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })['catch'](function () {\n opts.onError && opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n if (!hasCORS) return;\n if ('withCredentials' in request) {\n request.onreadystatechange = function () {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function () {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n request.open('POST', url);\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function (key, value) {\n request.setRequestHeader(key, value);\n });\n }\n request.send(stringify(opts.data));\n },\n _evaluateHash: function (hash) {\n var evaluated = {};\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n return evaluated;\n },\n _logDebug: function (level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (this._originalConsoleMethods[level] && (this.debug || this._globalOptions.debug)) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(this._originalConsoleMethods[level], this._originalConsole, [].slice.call(arguments, 1));\n }\n },\n _mergeContext: function (key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\nmodule.exports = Raven;","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return document.location.protocol + '//' + document.location.hostname + (document.location.port ? ':' + document.location.port : '');\n }\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n if (exception) {\n throw exception;\n }\n }\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n var name = undefined;\n var groups;\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n location.func = UNKNOWN_FUNCTION;\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n return false;\n }\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function () {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n}();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js))(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n for (var i = 0, j = lines.length; i < j; ++i) {\n if (parts = chrome.exec(lines[i])) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if (parts = winjs.exec(lines[i])) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if (parts = gecko.exec(lines[i])) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n stack.push(element);\n }\n if (!stack.length) {\n return null;\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (!stackInfo.stack[0].line && stackInfo.stack[0].func === initial.func) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n for (var curr = computeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n if (curr.name) {\n item.func = curr.name;\n } else if (parts = functionName.exec(curr.toString())) {\n item.func = parts[1];\n }\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n stack.push(item);\n }\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(result, ex.sourceURL || ex.fileName, ex.line || ex.lineNumber, ex.message || ex.description);\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n return computeStackTrace;\n}();\nmodule.exports = TraceKit;","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[(len + 64 >>> 9 << 4) + 14] = len;\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\nmodule.exports = md5;","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\nmodule.exports = RavenConfigError;","var utils = require('./utils');\nvar wrapMethod = function (console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n if (!(level in console)) {\n return;\n }\n var sentryLevel = level === 'warn' ? 'warning' : level;\n console[level] = function () {\n var args = [].slice.call(arguments);\n var msg = utils.safeJoin(args, ' ');\n var data = {\n level: sentryLevel,\n logger: 'console',\n extra: {\n arguments: args\n }\n };\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg = 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\nmodule.exports = {\n wrapMethod: wrapMethod\n};","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\nfunction noop() {}\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\nprocess.listeners = function (name) {\n return [];\n};\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};","var stringify = require('../vendor/json-stringify-safe/stringify');\nvar _window = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\nfunction isUndefined(what) {\n return what === void 0;\n}\nfunction isFunction(what) {\n return typeof what === 'function';\n}\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n return dataCallback;\n}\nfunction each(obj, callback) {\n var i, j;\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function (key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\nfunction urlencode(o) {\n var pairs = [];\n each(o, function (key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = arr[3] & 0xfff | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = arr[4] & 0x3fff | 0x8000;\n var pad = function (num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n return pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]);\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0,\n v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) {\n break;\n }\n out.push(nextStr);\n len += nextStr.length;\n elem = elem.parentNode;\n }\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n if (!elem || !elem.tagName) {\n return '';\n }\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (a.filename !== b.filename || a.lineno !== b.lineno || a.colno !== b.colno || a['function'] !== b['function']) return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n var output = [];\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'undefined') {\n return value;\n }\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]') return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n return value;\n}\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function (acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function (val) {\n return serializeObject(val, depth - 1);\n });\n }\n return serializeValue(value);\n}\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n var serialized = serializeObject(ex, depth);\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n return serialized;\n}\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n keys = keys.filter(function (key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n return '';\n}\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || isArray(sanitizeKeys) && sanitizeKeys.length === 0) return input;\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function (val) {\n return sanitizeWorker(val);\n });\n }\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function (acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n return workerInput;\n }\n return sanitizeWorker(safeInput);\n}\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};"],"sourceRoot":""}