{"version":3,"sources":["webpack://wp.[name]/webpack/bootstrap","webpack://wp.[name]/./src/constants/leadinConfig.js","webpack://wp.[name]/./node_modules/raven-js/src/utils.js","webpack://wp.[name]/./src/utils/appUtils.js","webpack://wp.[name]/./node_modules/raven-js/src/raven.js","webpack://wp.[name]/./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack://wp.[name]/./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack://wp.[name]/external \"jQuery\"","webpack://wp.[name]/./node_modules/raven-js/src/configError.js","webpack://wp.[name]/./node_modules/raven-js/src/console.js","webpack://wp.[name]/./src/lib/Raven.js","webpack://wp.[name]/./src/constants/selectors.js","webpack://wp.[name]/./node_modules/raven-js/src/singleton.js","webpack://wp.[name]/./src/feedback/ThickBoxModal.js","webpack://wp.[name]/./src/feedback/feedbackFormApi.js","webpack://wp.[name]/./src/entries/feedback.js","webpack://wp.[name]/(webpack)/buildin/global.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","leadinConfig","adminUrl","ajaxUrl","restUrl","backgroundIframeUrl","deviceId","didDisconnect","env","formsScript","formsScriptPayload","meetingsScript","hublet","hubspotBaseUrl","impactLink","leadinPluginVersion","loginUrl","pluginPath","ajaxNonce","restNonce","routeNonce","redirectNonce","plugins","phpVersion","portalId","portalEmail","iframeUrl","accountName","routes","reviewSkippedDate","theme","wpVersion","portalDomain","leadinQueryParamsKeys","oauth","trackConsent","connectionStatus","i18n","leadinI18n","global","self","isUndefined","what","isString","toString","supportsErrorEvent","ErrorEvent","e","each","obj","callback","j","length","hasKey","htmlElementAsString","elem","className","classes","attr","out","tagName","push","toLowerCase","id","split","attrWhitelist","getAttribute","join","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","isObject","isError","Error","isErrorEvent","isFunction","isEmptyObject","_","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","truncate","str","max","substr","objectFrozen","isFrozen","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","urlencode","pairs","encodeURIComponent","uuid4","crypto","_window","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","type","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","initApp","initFn","configureRaven","Raven","context","initAppOnReady","$","document","ready","TraceKit","stringify","RavenConfigError","utils","wrapConsoleMethod","wrapMethod","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","method","this","_hasJSON","JSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","logger","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","collectWindowErrors","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","console","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","location","_lastHref","href","_resetBackoff","VERSION","debug","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","dom","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","apply","arguments","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","args","undefined","wrap","_before","__raven__","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","__inner__","uninstall","_restoreBuiltIns","ex","isNotError","isNotErrorEvent","isErrorEventWithoutError","error","captureMessage","trimHeadFrames","stack","computeStackTrace","_handleStackInfo","msg","test","message","initialCall","fileurl","fingerprint","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","result","shift","addPlugin","plugin","pluginArgs","slice","setUserContext","setExtraContext","extra","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","release","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","setTimeout","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","wrappedBuiltIns","wrapTimeFn","fn","Array","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","addEventListener","attachEvent","chrome","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","level","builtin","installer","concat","exec","allowSecretKey","port","stackInfo","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","line","column","function","prefixedMessage","exception","culprit","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","headers","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","XDomainRequest","onload","onerror","open","send","Function","setUser","setReleaseContext","_slice","ERROR_TYPES_RE","getLocationHref","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastExceptionStack","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","augmentStackTraceWithInitialElement","processLastException","groups","_lastExceptionStack","_lastArgs","rethrow","incomplete","handler","installGlobalHandler","unsubscribe","splice","uninstallGlobalHandler","computeStackTraceFromStackProp","submatch","parts","element","gecko","winjs","geckoEval","chromeEval","lines","isNative","columnNumber","initial","unshift","partial","computeStackTraceByWalkingCallerChain","depth","item","functionName","funcs","recursion","curr","caller","input","substring","sourceURL","fileName","lineNumber","description","haystack","needle","serializer","replacer","cycleReplacer","keys","thisPos","Infinity","stringifyError","spaces","getSerialize","constructor","originalConsoleLevel","originalConsole","sentryLevel","php","wordpress","hub","map","Version","domElements","iframe","subMenu","subMenuLinks","subMenuButtons","deactivatePluginButton","deactivateFeedbackForm","deactivateFeedbackSubmit","deactivateFeedbackSkip","thickboxModalClose","thickboxModalWindow","thickboxModalContent","reviewBannerLeaveReviewLink","reviewBannerDismissButton","RavenConstructor","_Raven","noConflict","ThickBoxModal","openTriggerSelector","inlineContentId","windowCssClass","contentCssClass","click","init","tb_remove","tb_show","addClass","off","close","preventDefault","formSubmissionUrl","deactivatePlugin","submitAndDeactivate","formSelector","formSubmissionPayload","fields","serializeArray","skipValidation","Promise","resolve","reject","ajax","contentType","success","submit","g"],"mappings":"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","file":"feedback.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 79);\n","const {\n adminUrl,\n ajaxUrl,\n restUrl,\n backgroundIframeUrl,\n deviceId,\n didDisconnect,\n env,\n formsScript,\n formsScriptPayload,\n meetingsScript,\n hublet,\n hubspotBaseUrl,\n impactLink,\n leadinPluginVersion,\n loginUrl,\n pluginPath,\n ajaxNonce,\n restNonce,\n routeNonce,\n redirectNonce,\n plugins,\n phpVersion,\n portalId,\n portalEmail,\n iframeUrl,\n accountName,\n routes,\n reviewSkippedDate,\n theme,\n wpVersion,\n portalDomain,\n leadinQueryParamsKeys,\n oauth,\n trackConsent,\n connectionStatus,\n} = window.leadinConfig;\n\nconst i18n = window.leadinI18n;\n\nexport {\n adminUrl,\n ajaxUrl,\n restUrl,\n backgroundIframeUrl,\n deviceId,\n didDisconnect,\n env,\n formsScript,\n formsScriptPayload,\n meetingsScript,\n hublet,\n hubspotBaseUrl,\n i18n,\n impactLink,\n leadinPluginVersion,\n loginUrl,\n pluginPath,\n ajaxNonce,\n restNonce,\n routeNonce,\n redirectNonce,\n reviewSkippedDate,\n plugins,\n phpVersion,\n portalId,\n portalEmail,\n iframeUrl,\n accountName,\n routes,\n theme,\n wpVersion,\n portalDomain,\n leadinQueryParamsKeys,\n oauth,\n trackConsent,\n connectionStatus,\n};\n","var _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 isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\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 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 return !max || 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 href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) return {};\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 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 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 var orig = obj[name];\n obj[name] = replacement(orig);\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isString: isString,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\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};\n","import $ from 'jquery';\nimport Raven, { configureRaven } from '../lib/Raven';\n\nexport function initApp(initFn) {\n configureRaven();\n Raven.context(initFn);\n}\n\nexport function initAppOnReady(initFn) {\n function main() {\n $(document).ready(initFn);\n }\n initApp(main);\n}\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\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;\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 logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n collectWindowErrors: true,\n maxMessageLength: 0,\n\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 };\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.19.1',\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 };\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 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 already\n // for both debugging and to prevent it to being wrapped twice\n wrapped.__raven__ = true;\n wrapped.__inner__ = 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._restoreBuiltIns();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\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 // Cases for sending ex as a message, rather than an exception\n var isNotError = !isError(ex);\n var isNotErrorEvent = !isErrorEvent(ex);\n var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n return this.captureMessage(\n ex,\n objectMerge(\n {\n trimHeadFrames: 1,\n stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n },\n options\n )\n );\n }\n\n // Get actual Error from ErrorEvent\n if (isErrorEvent(ex)) ex = ex.error;\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 /*\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\n var data = objectMerge(\n {\n message: msg + '' // Make sure it's actually a string\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 = stack.stack[1];\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 options = objectMerge(\n {\n // fingerprint on msg, not stack trace (legacy behavior, could be\n // revisited)\n fingerprint: msg,\n // since we know this is a synthetic trace, the top N-most frames\n // MUST be from Raven.js, so mark them as in_app later by setting\n // trimHeadFrames\n trimHeadFrames: (options.trimHeadFrames || 0) + 1\n },\n options\n );\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 // 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 = '';\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 /**\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 = 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(data) {\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 && 'fetch' in _window) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\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\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 (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 self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return origFetch.apply(this, args).then(function(response) {\n fetchData.status_code = response.status;\n\n return response;\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 {\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 _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 if (this._hasDocument) {\n if (_document.location && _document.location.href) {\n httpData.url = _document.location.href;\n }\n if (_document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\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 retry = request.getResponseHeader('Retry-After');\n retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\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 there are no tags/extra, strip the key from the payload alltogther.\n if (isEmptyObject(data.tags)) delete data.tags;\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 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 _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 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 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 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 var url = opts.url;\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 // NOTE: auth is intentionally sent as part of query string (NOT as custom\n // HTTP header) so as to avoid preflight CORS requests\n request.open('POST', url + '?' + urlencode(opts.auth));\n request.send(stringify(opts.data));\n },\n\n _logDebug: function(level) {\n if (this._originalConsoleMethods[level] && this.debug) {\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","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.} 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} message 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(message, url, lineNo, colNo, ex) {\n var stack = null;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (ex && utils.isError(ex)) {\n // non-string `ex` 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(ex);\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 msg = message; // must be new var or will modify original `arguments`\n var groups;\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n msg = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: msg,\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.} 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||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n // Used to additionally parse URL/line/column from eval frames\n geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n lines = ex.stack.split('\\n'),\n stack = [],\n submatch,\n parts,\n element,\n 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.} 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.} 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 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","(function() { module.exports = window[\"jQuery\"]; }());","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 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 = '' + args.join(' ');\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 = 'Assertion failed: ' + (args.slice(1).join(' ') || '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","import Raven from 'raven-js';\nimport {\n hubspotBaseUrl,\n phpVersion,\n wpVersion,\n leadinPluginVersion,\n portalId,\n plugins,\n} from '../constants/leadinConfig';\n\nexport function configureRaven() {\n if (hubspotBaseUrl.indexOf('app.hubspot.com') === -1) {\n return;\n }\n\n Raven.config(\n 'https://e9b8f382cdd130c0d415cd977d2be56f@exceptions.hubspot.com/1',\n {\n instrument: {\n tryCatch: false,\n },\n collectWindowErrors: false,\n release: leadinPluginVersion,\n }\n ).install();\n\n Raven.setTagsContext({\n v: leadinPluginVersion,\n php: phpVersion,\n wordpress: wpVersion,\n });\n\n Raven.setUserContext({\n hub: portalId,\n plugins: Object.keys(plugins)\n .map(name => `${name}#${plugins[name].Version}`)\n .join(','),\n });\n}\n\nexport default Raven;\n","export const domElements = {\n iframe: '#leadin-iframe',\n subMenu: '.toplevel_page_leadin > ul',\n subMenuLinks: '.toplevel_page_leadin > ul a',\n subMenuButtons: '.toplevel_page_leadin > ul > li',\n deactivatePluginButton: '[data-slug=\"leadin\"] .deactivate a',\n deactivateFeedbackForm: 'form.leadin-deactivate-form',\n deactivateFeedbackSubmit: 'button#leadin-feedback-submit',\n deactivateFeedbackSkip: 'button#leadin-feedback-skip',\n thickboxModalClose: '.leadin-modal-close',\n thickboxModalWindow: 'div#TB_window.thickbox-loading',\n thickboxModalContent: 'div#TB_ajaxContent.TB_modal',\n reviewBannerLeaveReviewLink: 'a#leave-review-button',\n reviewBannerDismissButton: 'a#dismiss-review-banner-button',\n};\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\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","import $ from 'jquery';\nimport { domElements } from '../constants/selectors';\n\nexport default class ThickBoxModal {\n constructor(\n openTriggerSelector,\n inlineContentId,\n windowCssClass,\n contentCssClass\n ) {\n this.openTriggerSelector = openTriggerSelector;\n this.inlineContentId = inlineContentId;\n this.windowCssClass = windowCssClass;\n this.contentCssClass = contentCssClass;\n\n $(openTriggerSelector).click(this.init.bind(this));\n }\n\n close() {\n window.tb_remove();\n }\n\n init(e) {\n window.tb_show(\n '',\n `#TB_inline?inlineId=${this.inlineContentId}&modal=true`\n );\n // thickbox doesn't respect the width and height url parameters https://core.trac.wordpress.org/ticket/17249\n // We override thickboxes css with !important in the css\n $(domElements.thickboxModalWindow).addClass(this.windowCssClass);\n\n // have to modify the css of the thickbox content container as well\n $(domElements.thickboxModalContent).addClass(this.contentCssClass);\n\n // we unbind previous handlers because a thickbox modal is a single global object.\n // Everytime it is re-opened, it still has old handlers bound\n $(domElements.thickboxModalClose)\n .off('click')\n .click(this.close);\n\n e.preventDefault();\n }\n}\n","import $ from 'jquery';\n\nconst portalId = '6275621';\nconst formId = '0e8807f8-2ac3-4664-b742-44552bfa09e2';\nconst formSubmissionUrl = `https://api.hsforms.com/submissions/v3/integration/submit/${portalId}/${formId}`;\n\nexport function submitFeedbackForm(formSelector) {\n const formSubmissionPayload = {\n fields: $(formSelector).serializeArray(),\n skipValidation: true,\n };\n\n return new Promise((resolve, reject) => {\n $.ajax({\n type: 'POST',\n url: formSubmissionUrl,\n contentType: 'application/json',\n data: JSON.stringify(formSubmissionPayload),\n success: resolve,\n error: reject,\n });\n });\n}\n","import $ from 'jquery';\nimport Raven from '../lib/Raven';\nimport { domElements } from '../constants/selectors';\nimport ThickBoxModal from '../feedback/ThickBoxModal';\nimport { submitFeedbackForm } from '../feedback/feedbackFormApi';\nimport { initAppOnReady } from '../utils/appUtils';\n\nfunction deactivatePlugin() {\n window.location.href = $(domElements.deactivatePluginButton).attr('href');\n}\n\nfunction setLoadingState() {\n $(domElements.deactivateFeedbackSubmit).addClass('loading');\n}\n\nfunction submitAndDeactivate(e) {\n e.preventDefault();\n setLoadingState();\n\n submitFeedbackForm(domElements.deactivateFeedbackForm)\n .then(deactivatePlugin)\n .catch(err => {\n Raven.captureException(err);\n deactivatePlugin();\n });\n}\n\nfunction init() {\n // eslint-disable-next-line no-new\n new ThickBoxModal(\n domElements.deactivatePluginButton,\n 'leadin-feedback-container',\n 'leadin-feedback-window',\n 'leadin-feedback-content'\n );\n\n $(domElements.deactivateFeedbackForm)\n .off('submit')\n .submit(submitAndDeactivate);\n $(domElements.deactivateFeedbackSkip)\n .off('click')\n .click(deactivatePlugin);\n}\n\ninitAppOnReady(init);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n"],"sourceRoot":""}