diff options
Diffstat (limited to 'demo/dist/demo.min.js.map')
-rw-r--r-- | demo/dist/demo.min.js.map | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map index 82bac9b4..b6db3b14 100644 --- a/demo/dist/demo.min.js.map +++ b/demo/dist/demo.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsErrorEvent","ErrorEvent","e","supportsFetch","Headers","Request","Response","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isFunction","isEmptyObject","_","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","undefined","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","charAt","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","wrapMethod","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","unhandledPromiseRejection","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","port","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","function","prefixedMessage","culprit","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_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","onload","open","setRequestHeader","send","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","Client","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\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;\n\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}\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\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\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\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\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\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 ({}.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}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\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\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}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\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\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\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}\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}\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}\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\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}\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 <a/> 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\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\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\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\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\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 (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\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\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\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\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\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\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\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\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 (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n 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\n var output = [];\n\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\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;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\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]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\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\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\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\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\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\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\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};\n","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 =\n typeof window !== 'undefined'\n ? window\n : 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): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\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.<string, *>} 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\n if (exception) {\n throw exception;\n }\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\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\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\n var name = undefined;\n var groups;\n\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\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\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\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\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\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.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[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+))?(?::(\\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\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\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\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.<string, *>} 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\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\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 (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\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.<string, *>} 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\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\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\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\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\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\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\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\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\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\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\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\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\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\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\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}\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}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n '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};\n\nmodule.exports = {\n wrapMethod: wrapMethod\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');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\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;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\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 =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\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 keepalive: true,\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.24.2',\n\n debug: false,\n\n TraceKit: TraceKit, // 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\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\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\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\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // 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\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\n var instrumentDefaults = {\n tryCatch: true\n };\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\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\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\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\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\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\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n 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 /*\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 = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\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} func 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\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\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\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\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\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\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 extra: {\n unhandledPromiseRejection: true\n }\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 &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\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({trimHeadFrames: 0}, options ? options : {});\n\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 (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 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(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\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\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\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 (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\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\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\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\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)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\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\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\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\n return this;\n },\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\n return this;\n },\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\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\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 /*\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\n return this;\n },\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\n return this;\n },\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 /*\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 /*\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 /**\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\n return this;\n },\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 /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\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\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\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\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\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\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\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\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\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 /**\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\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 = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\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 (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n 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 /**\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)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\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\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 /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\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(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\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(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\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\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\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);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n 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 },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\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 = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\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\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n 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\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\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\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\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\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\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\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n 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\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\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\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\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\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\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 =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n 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\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\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 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\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\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\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\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\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\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\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\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\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\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\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !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 );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\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 = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\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\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\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\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\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\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\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\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\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\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\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\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 }\n\n return true;\n },\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\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\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\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\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\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\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\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\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\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\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 (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\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\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\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\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\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\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\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\n if (error.request) {\n self._setBackoffState(error.request);\n }\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\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\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .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 })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\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\n if (!hasCORS) return;\n\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\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\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\n return evaluated;\n },\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 (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\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;\n\nmodule.exports = Raven;\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 =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\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};\n\nRaven.afterLoad();\n\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;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]}
\ No newline at end of file +{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsErrorEvent","ErrorEvent","e","supportsFetch","Headers","Request","Response","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isFunction","isEmptyObject","_","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","undefined","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","charAt","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","unhandledPromiseRejection","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","port","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","function","prefixedMessage","culprit","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_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","onload","open","setRequestHeader","send","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","Client","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"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","file":"demo.min.js","sourcesContent":["/*\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;\n\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}\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\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\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\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\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\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 ({}.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}\n\nfunction isErrorEvent(value) {\n return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\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\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}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\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\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\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}\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}\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}\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\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}\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 <a/> 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\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\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\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\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\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 (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\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\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\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\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\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\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\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\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 (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n 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\n var output = [];\n\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\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;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\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]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\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\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\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\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\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\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\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};\n","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 =\n typeof window !== 'undefined'\n ? window\n : 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): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\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.<string, *>} 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\n if (exception) {\n throw exception;\n }\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\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\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\n var name = undefined;\n var groups;\n\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\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\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\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\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\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.<string, *>} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[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+))?(?::(\\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\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\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\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.<string, *>} 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\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\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 (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\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.<string, *>} 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\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\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\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\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\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\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\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\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\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\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\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\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\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\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\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}\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}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n '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};\n\nmodule.exports = {\n wrapMethod: wrapMethod\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');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isErrorEvent = utils.isErrorEvent;\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;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\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 =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\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 keepalive: true,\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.24.2',\n\n debug: false,\n\n TraceKit: TraceKit, // 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\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\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\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\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // 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\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\n var instrumentDefaults = {\n tryCatch: true\n };\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\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\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\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\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\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\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n 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 /*\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 = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\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} func 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\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\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\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\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\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\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 extra: {\n unhandledPromiseRejection: true\n }\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 &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\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({trimHeadFrames: 0}, options ? options : {});\n\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 (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 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(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\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\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\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 (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\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\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\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\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)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\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\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\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\n return this;\n },\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\n return this;\n },\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\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\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 /*\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\n return this;\n },\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\n return this;\n },\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 /*\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 /*\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 /**\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\n return this;\n },\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 /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\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\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\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\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\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\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\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\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\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 /**\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\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 = '<unknown>';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\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 (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n 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 /**\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)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\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\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 /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\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(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\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(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\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\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\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);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n 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 },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\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 = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\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\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n 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\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\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\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\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\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\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\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n 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\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\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\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\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\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\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 =\n !isChromePackagedApp &&\n _window.history &&\n history.pushState &&\n 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\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\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 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\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\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\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\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\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\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\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\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\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\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\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !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 );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\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 = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n culprit: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\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\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\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\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\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\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\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\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\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\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\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.culprit !== last.culprit // defined for captureException/onerror\n )\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 }\n\n return true;\n },\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\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\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\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\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\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\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\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\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\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\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 (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\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\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\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\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\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\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\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\n if (error.request) {\n self._setBackoffState(error.request);\n }\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\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\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .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 })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\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\n if (!hasCORS) return;\n\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\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\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\n return evaluated;\n },\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 (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\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;\n\nmodule.exports = Raven;\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 =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\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};\n\nRaven.afterLoad();\n\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;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]}
\ No newline at end of file |