{"version":3,"sources":["webpack://wp.[name]/webpack/bootstrap","webpack://wp.[name]/./src/constants/leadinConfig.js","webpack://wp.[name]/external \"jQuery\"","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]/(webpack)/buildin/global.js","webpack://wp.[name]/./src/utils/queryParams.js","webpack://wp.[name]/./src/api/wordpressApiClient.js","webpack://wp.[name]/./src/utils/sideNav.js","webpack://wp.[name]/./src/gutenberg/MeetingsBlock/MeetingGutenbergInterframe.js","webpack://wp.[name]/./node_modules/raven-js/src/utils.js","webpack://wp.[name]/./src/utils/appUtils.js","webpack://wp.[name]/./node_modules/penpal/lib/index.js","webpack://wp.[name]/./src/constants/urlsMap.js","webpack://wp.[name]/./src/navigation.js","webpack://wp.[name]/./src/api/wordpressAjaxClient.js","webpack://wp.[name]/./src/lib/Interframe.js","webpack://wp.[name]/./src/utils/portalInfo.js","webpack://wp.[name]/./src/iframe/iframe.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]/./node_modules/raven-js/src/configError.js","webpack://wp.[name]/./node_modules/raven-js/src/console.js","webpack://wp.[name]/./src/entries/app.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","configureRaven","indexOf","Raven","config","instrument","tryCatch","collectWindowErrors","release","install","setTagsContext","v","php","wordpress","setUserContext","hub","keys","map","Version","join","domElements","iframe","subMenu","subMenuLinks","subMenuButtons","deactivatePluginButton","deactivateFeedbackForm","deactivateFeedbackSubmit","deactivateFeedbackSkip","thickboxModalClose","thickboxModalWindow","thickboxModalContent","reviewBannerLeaveReviewLink","reviewBannerDismissButton","RavenConstructor","_window","global","self","_Raven","noConflict","afterLoad","g","this","Function","e","leadinClearQueryParam","currentWindowLocation","location","toString","substring","newWindowLocation","history","pushState","getQueryParam","vars","search","split","length","pair","decodeURIComponent","filterLeadinQueryParams","searchString","filteredSearch","slice","reduce","paramsMap","$","param","addQueryObjectToUrl","urlObject","queryParams","forEach","searchParams","append","makeRequest","method","path","data","restApiUrl","URL","Promise","resolve","reject","payload","url","contentType","beforeSend","xhr","setRequestHeader","success","error","response","captureMessage","status","responseText","fingerprint","JSON","stringify","ajax","makeProxyRequest","hubspotApiPath","queryParamsObject","proxyApiPath","proxyQueryParams","URLSearchParams","proxyUrl","fetchOAuthToken","err","message","makeInterframeProxyRequest","setLeadinUnAuthedNavigation","remove","setLeadinCookiesEnabledNavigation","addClass","setLeadinCookiesDisabledNavigation","removeClass","callback","meetingsGutenbergInterframe","executeCallback","args","context","setCallback","callbackFunc","gutenbergTriggerConnectCalendarRefresh","isUndefined","what","isString","supportsErrorEvent","ErrorEvent","each","obj","j","hasKey","htmlElementAsString","elem","className","classes","attr","out","tagName","push","toLowerCase","id","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","isObject","isError","Error","isErrorEvent","isFunction","isEmptyObject","_","wrappedCallback","original","normalizedData","objectMerge","obj1","obj2","truncate","str","max","substr","objectFrozen","isFrozen","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","urlencode","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","type","stacktrace","parseUrl","match","query","fragment","protocol","host","relative","fill","replacement","track","orig","initApp","initFn","initAppOnReady","document","ready","default","ERR_IFRAME_ALREADY_ATTACHED_TO_DOM","ERR_NOT_IN_IFRAME","ERR_CONNECTION_TIMEOUT","ERR_CONNECTION_DESTROYED","MESSAGE","DEFAULT_PORTS","URL_REGEX","Penpal","debug","generateId","log","_console","_len","arguments","Array","_key","console","apply","concat","DestructionPromise","executor","handlers","handler","then","serializeError","_ref","stack","deserializeError","deserializedError","connectCallSender","callSender","info","methodNames","destroy","destructionPromise","localName","local","remote","remoteOrigin","destroyed","api","methodName","_len2","_key2","closed","code","addEventListener","handleMessageEvent","event","origin","penpal","removeEventListener","returnValue","returnValueIsError","resolution","postMessage","createMethodProxy","connectCallReceiver","methods","_event$data","createPromiseHandler","connectToChild","_ref2","appendTo","_ref2$methods","timeout","connectionDestructionPromise","resolveConnectionDestructionPromise","parent","createElement","src","childOrigin","hostname","port","regexResult","exec","portSuffix","getOriginFromUrl","promise","resolveConnectionPromise","connectionTimeoutId","undefined","setTimeout","receiverMethodNames","destroyCallReceiver","handleMessage","child","contentWindow","callReceiverDestructionPromise","resolveCallReceiverDestructionPromise","receiverMethodName","clearTimeout","body","appendChild","checkIframeInDocIntervalId","setInterval","contains","clearInterval","removeChild","connectToParent","_ref3","_ref3$parentOrigin","parentOrigin","_ref3$methods","top","_default","urlsMap","subkey","setSelectedMenuItem","pageParam","syncRoute","wpPage","route","searchQuery","baseUrls","sort","some","basePath","routePrefix","cleanedPath","leadinRouteParam","subRoute","leadinSearchParam","nonce","newUrl","replaceState","leadinPageReload","reload","makeAjaxRequest","action","ajaxPayload","postAjax","leadinPageRedirect","leadinGetPortalInfo","leadinConnectPortal","portalInfo","leadinDisconnectPortal","getLeadinConfig","skipSignup","defaultApp","skipReview","updateHublet","getPortalHublet","canTrack","disableInternalTracking","fetchDisableInternalTracking","initInterframe","leadinChildFrameConnection","createConnectionToIframe","captureException","currentPage","redirectToLogin","parse","href","getIframeHeight","adminMenuWrap","getElementById","sideMenuHeight","offsetHeight","adminBar","adminBarHeight","innerHeight","createIframeElement","iframeSrc","setAttribute","style","minHeight","animationFrame","cancelAnimationFrame","requestAnimationFrame","addIframeResizeEvent","createIframe","createBackgroundIframe","display","TraceKit","RavenConfigError","utils","wrapConsoleMethod","wrapMethod","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","logger","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","sampleRate","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","instrumentDefaults","isSetup","report","subscribe","_handleOnErrorStackInfo","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","func","wrap","_before","__raven__","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","__inner__","uninstall","_restoreBuiltIns","ex","isNotError","isNotErrorEvent","isErrorEventWithoutError","trimHeadFrames","computeStackTrace","_handleStackInfo","msg","test","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","result","shift","addPlugin","plugin","pluginArgs","setExtraContext","extra","_mergeContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","async","head","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","props","onreadystatechange","origFetch","fetchInput","Request","fetchData","attachEvent","chrome","hasPushAndReplaceState","app","runtime","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","consoleMethodCallback","level","builtin","installer","allowSecretKey","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","setUser","setReleaseContext","_slice","ERROR_TYPES_RE","getLocationHref","_oldOnerrorHandler","_onErrorHandlerInstalled","lastArgs","lastExceptionStack","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","augmentStackTraceWithInitialElement","processLastException","groups","_lastExceptionStack","_lastArgs","rethrow","incomplete","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","sourceURL","fileName","lineNumber","description","haystack","needle","serializer","replacer","cycleReplacer","thisPos","Infinity","stringifyError","spaces","getSerialize","constructor","originalConsoleLevel","originalConsole","sentryLevel"],"mappings":"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","file":"leadin.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 = 48);\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","(function() { module.exports = window[\"jQuery\"]; }());","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","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","import $ from 'jquery';\n\nimport { leadinQueryParamsKeys } from '../constants/leadinConfig';\n\nexport function leadinClearQueryParam() {\n let currentWindowLocation = window.location.toString();\n if (currentWindowLocation.indexOf('?') > 0) {\n currentWindowLocation = currentWindowLocation.substring(\n 0,\n currentWindowLocation.indexOf('?')\n );\n }\n const newWindowLocation = `${currentWindowLocation}?page=leadin`;\n window.history.pushState({}, '', newWindowLocation);\n}\n\nexport function getQueryParam(key) {\n const query = window.location.search.substring(1);\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n if (decodeURIComponent(pair[0]) === key) {\n return decodeURIComponent(pair[1]);\n }\n }\n return null;\n}\n\nexport function filterLeadinQueryParams(searchString) {\n if (!searchString) return '';\n\n const pairs = searchString.slice(1).split('&');\n\n const filteredSearch = pairs.reduce((paramsMap, pair) => {\n const [key, value] = pair.split('=');\n if (key && leadinQueryParamsKeys.indexOf(key) === -1) {\n paramsMap[key] = value;\n }\n return paramsMap;\n }, {});\n\n return $.param(filteredSearch);\n}\n\nexport function addQueryObjectToUrl(urlObject, queryParams) {\n Object.keys(queryParams).forEach(key => {\n urlObject.searchParams.append(key, queryParams[key]);\n });\n}\n","import $ from 'jquery';\n\nimport Raven from '../lib/Raven';\nimport { restNonce, restUrl } from '../constants/leadinConfig';\nimport { addQueryObjectToUrl } from '../utils/queryParams';\n\nfunction makeRequest(method, path, data, queryParams = {}) {\n // eslint-disable-next-line compat/compat\n const restApiUrl = new URL(`${restUrl}leadin/v1${path}`);\n addQueryObjectToUrl(restApiUrl, queryParams);\n\n return new Promise((resolve, reject) => {\n const payload = {\n url: restApiUrl.toString(),\n method,\n contentType: 'application/json',\n beforeSend: xhr => xhr.setRequestHeader('X-WP-Nonce', restNonce),\n success: resolve,\n error: response => {\n Raven.captureMessage(\n `HTTP Request to ${restApiUrl} failed with error ${response.status}: ${response.responseText}`,\n {\n fingerprint: [\n '{{ default }}',\n path,\n response.status,\n response.responseText,\n ],\n }\n );\n reject(response);\n },\n };\n\n if (method !== 'get') {\n payload.data = JSON.stringify(data);\n }\n\n $.ajax(payload);\n });\n}\n\nexport function makeProxyRequest(\n method,\n hubspotApiPath,\n data,\n queryParamsObject = {}\n) {\n const proxyApiPath = `/proxy`;\n // eslint-disable-next-line compat/compat\n const proxyQueryParams = new URLSearchParams(queryParamsObject).toString();\n const proxyUrl = `${hubspotApiPath}?${proxyQueryParams}`;\n\n return makeRequest(method, proxyApiPath, data, { proxyUrl });\n}\n\nexport function fetchOAuthToken() {\n return makeRequest('GET', '/oauth-token').catch(err => {\n return { status: err.status, message: err.responseText };\n });\n}\n\n/**\n * To surface errors to the interframe, we need to catch the error\n * and return it to through penpal as a normal message, which the iframe\n * can check for and re-throw.\n */\nexport function makeInterframeProxyRequest(...args) {\n return makeProxyRequest(...args).catch(err => {\n return { status: err.status, message: err.responseText };\n });\n}\n\nexport function healthcheckRestApi() {\n return makeRequest('get', '/healthcheck');\n}\n","import $ from 'jquery';\nimport { domElements } from '../constants/selectors';\n\nexport function setLeadinUnAuthedNavigation() {\n $(domElements.subMenu).remove();\n}\n\nexport function setLeadinCookiesEnabledNavigation() {\n $(domElements.subMenuLinks).addClass('visible');\n}\n\nexport function setLeadinCookiesDisabledNavigation() {\n $(domElements.subMenuLinks).removeClass('visible');\n}\n","import Raven from 'raven-js';\n\nexport const meetingsGutenbergInterframe = (function() {\n let callback;\n\n return {\n executeCallback(args) {\n if (callback) {\n Raven.context(callback, args);\n }\n },\n setCallback(callbackFunc) {\n callback = callbackFunc;\n },\n };\n})();\n\nexport function gutenbergTriggerConnectCalendarRefresh(args) {\n meetingsGutenbergInterframe.executeCallback(args);\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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.ERR_IFRAME_ALREADY_ATTACHED_TO_DOM = exports.ERR_NOT_IN_IFRAME = exports.ERR_CONNECTION_TIMEOUT = exports.ERR_CONNECTION_DESTROYED = void 0;\nvar HANDSHAKE = 'handshake';\nvar HANDSHAKE_REPLY = 'handshake-reply';\nvar CALL = 'call';\nvar REPLY = 'reply';\nvar FULFILLED = 'fulfilled';\nvar REJECTED = 'rejected';\nvar MESSAGE = 'message';\nvar DATA_CLONE_ERROR = 'DataCloneError';\nvar ERR_CONNECTION_DESTROYED = 'ConnectionDestroyed';\nexports.ERR_CONNECTION_DESTROYED = ERR_CONNECTION_DESTROYED;\nvar ERR_CONNECTION_TIMEOUT = 'ConnectionTimeout';\nexports.ERR_CONNECTION_TIMEOUT = ERR_CONNECTION_TIMEOUT;\nvar ERR_NOT_IN_IFRAME = 'NotInIframe';\nexports.ERR_NOT_IN_IFRAME = ERR_NOT_IN_IFRAME;\nvar ERR_IFRAME_ALREADY_ATTACHED_TO_DOM = 'IframeAlreadyAttachedToDom';\nexports.ERR_IFRAME_ALREADY_ATTACHED_TO_DOM = ERR_IFRAME_ALREADY_ATTACHED_TO_DOM;\nvar CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\nvar DEFAULT_PORTS = {\n 'http:': '80',\n 'https:': '443'\n};\nvar URL_REGEX = /^(https?:|file:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nvar Penpal = {\n ERR_CONNECTION_DESTROYED: ERR_CONNECTION_DESTROYED,\n ERR_CONNECTION_TIMEOUT: ERR_CONNECTION_TIMEOUT,\n ERR_NOT_IN_IFRAME: ERR_NOT_IN_IFRAME,\n ERR_IFRAME_ALREADY_ATTACHED_TO_DOM: ERR_IFRAME_ALREADY_ATTACHED_TO_DOM,\n\n /**\n * Promise implementation.\n * @type {Constructor}\n */\n Promise: function () {\n try {\n return window ? window.Promise : null;\n } catch (e) {\n return null;\n }\n }(),\n\n /**\n * Whether debug messages should be logged.\n * @type {boolean}\n */\n debug: false\n};\n/**\n * @return {number} A unique ID (not universally unique)\n */\n\nvar generateId = function () {\n var id = 0;\n return function () {\n return ++id;\n };\n}();\n/**\n * Logs a message.\n * @param {...*} args One or more items to log\n */\n\n\nvar log = function log() {\n if (Penpal.debug) {\n var _console;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n (_console = console).log.apply(_console, ['[Penpal]'].concat(args)); // eslint-disable-line no-console\n\n }\n};\n/**\n * Converts a URL into an origin.\n * @param {string} url\n * @return {string} The URL's origin\n */\n\n\nvar getOriginFromUrl = function getOriginFromUrl(url) {\n var location = document.location;\n var regexResult = URL_REGEX.exec(url);\n var protocol;\n var hostname;\n var port;\n\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = regexResult[1] ? regexResult[1] : location.protocol;\n hostname = regexResult[2];\n port = regexResult[4];\n } else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n } // If the protocol is file, the origin is \"null\"\n // The origin of a document with file protocol is an opaque origin\n // and its serialization \"null\" [1]\n // [1] https://html.spec.whatwg.org/multipage/origin.html#origin\n\n\n if (protocol === \"file:\") {\n return \"null\";\n } // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n\n\n var portSuffix = port && port !== DEFAULT_PORTS[protocol] ? \":\".concat(port) : '';\n return \"\".concat(protocol, \"//\").concat(hostname).concat(portSuffix);\n};\n/**\n * A simplified promise class only used internally for when destroy() is called. This is\n * used to destroy connections synchronously while promises typically resolve asynchronously.\n *\n * @param {Function} executor\n * @returns {Object}\n * @constructor\n */\n\n\nvar DestructionPromise = function DestructionPromise(executor) {\n var handlers = [];\n executor(function () {\n handlers.forEach(function (handler) {\n handler();\n });\n });\n return {\n then: function then(handler) {\n handlers.push(handler);\n }\n };\n};\n/**\n * Converts an error object into a plain object.\n * @param {Error} Error object.\n * @returns {Object}\n */\n\n\nvar serializeError = function serializeError(_ref) {\n var name = _ref.name,\n message = _ref.message,\n stack = _ref.stack;\n return {\n name: name,\n message: message,\n stack: stack\n };\n};\n/**\n * Converts a plain object into an error object.\n * @param {Object} Object with error properties.\n * @returns {Error}\n */\n\n\nvar deserializeError = function deserializeError(obj) {\n var deserializedError = new Error();\n Object.keys(obj).forEach(function (key) {\n return deserializedError[key] = obj[key];\n });\n return deserializedError;\n};\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodNames Names of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\n\n\nvar connectCallSender = function connectCallSender(callSender, info, methodNames, destroy, destructionPromise) {\n var localName = info.localName,\n local = info.local,\n remote = info.remote,\n remoteOrigin = info.remoteOrigin;\n var destroyed = false;\n log(\"\".concat(localName, \": Connecting call sender\"));\n\n var createMethodProxy = function createMethodProxy(methodName) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n log(\"\".concat(localName, \": Sending \").concat(methodName, \"() call\")); // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed.\n\n if (remote.closed) {\n destroy();\n }\n\n if (destroyed) {\n var error = new Error(\"Unable to send \".concat(methodName, \"() call due \") + \"to destroyed connection\");\n error.code = ERR_CONNECTION_DESTROYED;\n throw error;\n }\n\n return new Penpal.Promise(function (resolve, reject) {\n var id = generateId();\n\n var handleMessageEvent = function handleMessageEvent(event) {\n if (event.source === remote && event.origin === remoteOrigin && event.data.penpal === REPLY && event.data.id === id) {\n log(\"\".concat(localName, \": Received \").concat(methodName, \"() reply\"));\n local.removeEventListener(MESSAGE, handleMessageEvent);\n var returnValue = event.data.returnValue;\n\n if (event.data.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n\n (event.data.resolution === FULFILLED ? resolve : reject)(returnValue);\n }\n };\n\n local.addEventListener(MESSAGE, handleMessageEvent);\n remote.postMessage({\n penpal: CALL,\n id: id,\n methodName: methodName,\n args: args\n }, remoteOrigin);\n });\n };\n };\n\n destructionPromise.then(function () {\n destroyed = true;\n });\n methodNames.reduce(function (api, methodName) {\n api[methodName] = createMethodProxy(methodName);\n return api;\n }, callSender);\n};\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n * @param {Object} info Information about the local and remote windows.\n * @param {Object} methods The keys are the names of the methods that can be called by the remote\n * while the values are the method functions.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Function} A function that may be called to disconnect the receiver.\n */\n\n\nvar connectCallReceiver = function connectCallReceiver(info, methods, destructionPromise) {\n var localName = info.localName,\n local = info.local,\n remote = info.remote,\n remoteOrigin = info.remoteOrigin;\n var destroyed = false;\n log(\"\".concat(localName, \": Connecting call receiver\"));\n\n var handleMessageEvent = function handleMessageEvent(event) {\n if (event.source === remote && event.origin === remoteOrigin && event.data.penpal === CALL) {\n var _event$data = event.data,\n methodName = _event$data.methodName,\n args = _event$data.args,\n id = _event$data.id;\n log(\"\".concat(localName, \": Received \").concat(methodName, \"() call\"));\n\n if (methodName in methods) {\n var createPromiseHandler = function createPromiseHandler(resolution) {\n return function (returnValue) {\n log(\"\".concat(localName, \": Sending \").concat(methodName, \"() reply\"));\n\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(\"\".concat(localName, \": Unable to send \").concat(methodName, \"() reply due to destroyed connection\"));\n return;\n }\n\n var message = {\n penpal: REPLY,\n id: id,\n resolution: resolution,\n returnValue: returnValue\n };\n\n if (resolution === REJECTED && returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n\n try {\n remote.postMessage(message, remoteOrigin);\n } catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === DATA_CLONE_ERROR) {\n remote.postMessage({\n penpal: REPLY,\n id: id,\n resolution: REJECTED,\n returnValue: serializeError(err),\n returnValueIsError: true\n }, remoteOrigin);\n }\n\n throw err;\n }\n };\n };\n\n new Penpal.Promise(function (resolve) {\n return resolve(methods[methodName].apply(methods, args));\n }).then(createPromiseHandler(FULFILLED), createPromiseHandler(REJECTED));\n }\n }\n };\n\n local.addEventListener(MESSAGE, handleMessageEvent);\n destructionPromise.then(function () {\n destroyed = true;\n local.removeEventListener(MESSAGE, handleMessageEvent);\n });\n};\n/**\n * @typedef {Object} Child\n * @property {Promise} promise A promise which will be resolved once a connection has\n * been established.\n * @property {HTMLIframeElement} iframe The created iframe element.\n * @property {Function} destroy A method that, when called, will remove the iframe element from\n * the DOM and clean up event listeners.\n */\n\n/**\n * Creates an iframe, loads a webpage into the URL, and attempts to establish communication with\n * the iframe.\n * @param {Object} options\n * @param {string} options.url The URL of the webpage that should be loaded into the created iframe.\n * @param {HTMLElement} [options.appendTo] The container to which the iframe should be appended.\n * @param {Object} [options.methods={}] Methods that may be called by the iframe.\n * @param {Number} [options.timeout] The amount of time, in milliseconds, Penpal should wait\n * for the child to respond before rejecting the connection promise.\n * @return {Child}\n */\n\n\nPenpal.connectToChild = function (_ref2) {\n var url = _ref2.url,\n appendTo = _ref2.appendTo,\n iframe = _ref2.iframe,\n _ref2$methods = _ref2.methods,\n methods = _ref2$methods === void 0 ? {} : _ref2$methods,\n timeout = _ref2.timeout;\n\n if (iframe && iframe.parentNode) {\n var error = new Error('connectToChild() must not be called with an iframe already attached to DOM');\n error.code = ERR_IFRAME_ALREADY_ATTACHED_TO_DOM;\n throw error;\n }\n\n var destroy;\n var connectionDestructionPromise = new DestructionPromise(function (resolveConnectionDestructionPromise) {\n destroy = resolveConnectionDestructionPromise;\n });\n var parent = window;\n iframe = iframe || document.createElement('iframe');\n iframe.src = url;\n var childOrigin = getOriginFromUrl(url);\n var promise = new Penpal.Promise(function (resolveConnectionPromise, reject) {\n var connectionTimeoutId;\n\n if (timeout !== undefined) {\n connectionTimeoutId = setTimeout(function () {\n var error = new Error(\"Connection to child timed out after \".concat(timeout, \"ms\"));\n error.code = ERR_CONNECTION_TIMEOUT;\n reject(error);\n destroy();\n }, timeout);\n } // We resolve the promise with the call sender. If the child reconnects (for example, after\n // refreshing or navigating to another page that uses Penpal, we'll update the call sender\n // with methods that match the latest provided by the child.\n\n\n var callSender = {};\n var receiverMethodNames;\n var destroyCallReceiver;\n\n var handleMessage = function handleMessage(event) {\n var child = iframe.contentWindow;\n\n if (event.source === child && event.origin === childOrigin && event.data.penpal === HANDSHAKE) {\n log('Parent: Received handshake, sending reply'); // If event.origin is \"null\", the remote protocol is file:\n // and we must post messages with \"*\" as targetOrigin [1]\n // [1] https://developer.mozilla.org/fr/docs/Web/API/Window/postMessage#Utiliser_window.postMessage_dans_les_extensions\n\n var remoteOrigin = event.origin === \"null\" ? \"*\" : event.origin;\n event.source.postMessage({\n penpal: HANDSHAKE_REPLY,\n methodNames: Object.keys(methods)\n }, remoteOrigin);\n var info = {\n localName: 'Parent',\n local: parent,\n remote: child,\n remoteOrigin: remoteOrigin\n }; // If the child reconnected, we need to destroy the previous call receiver before setting\n // up a new one.\n\n if (destroyCallReceiver) {\n destroyCallReceiver();\n } // When this promise is resolved, it will destroy the call receiver (stop listening to\n // method calls from the child) and delete its methods off the call sender.\n\n\n var callReceiverDestructionPromise = new DestructionPromise(function (resolveCallReceiverDestructionPromise) {\n connectionDestructionPromise.then(resolveCallReceiverDestructionPromise);\n destroyCallReceiver = resolveCallReceiverDestructionPromise;\n });\n connectCallReceiver(info, methods, callReceiverDestructionPromise); // If the child reconnected, we need to remove the methods from the previous call receiver\n // off the sender.\n\n if (receiverMethodNames) {\n receiverMethodNames.forEach(function (receiverMethodName) {\n delete callSender[receiverMethodName];\n });\n }\n\n receiverMethodNames = event.data.methodNames;\n connectCallSender(callSender, info, receiverMethodNames, destroy, connectionDestructionPromise);\n clearTimeout(connectionTimeoutId);\n resolveConnectionPromise(callSender);\n }\n };\n\n parent.addEventListener(MESSAGE, handleMessage);\n log('Parent: Loading iframe');\n (appendTo || document.body).appendChild(iframe); // This is to prevent memory leaks when the iframe is removed\n // from the document and the consumer hasn't called destroy().\n // Without this, event listeners attached to the window would\n // stick around and since the event handlers have a reference\n // to the iframe in their closures, the iframe would stick around\n // too.\n\n var checkIframeInDocIntervalId = setInterval(function () {\n if (!document.body.contains(iframe)) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n connectionDestructionPromise.then(function () {\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n\n parent.removeEventListener(MESSAGE, handleMessage);\n clearInterval(checkIframeInDocIntervalId);\n var error = new Error('Connection destroyed');\n error.code = ERR_CONNECTION_DESTROYED;\n reject(error);\n });\n });\n return {\n promise: promise,\n iframe: iframe,\n destroy: destroy\n };\n};\n/**\n * @typedef {Object} Parent\n * @property {Promise} promise A promise which will be resolved once a connection has\n * been established.\n */\n\n/**\n * Attempts to establish communication with the parent window.\n * @param {Object} options\n * @param {string} [options.parentOrigin=*] Valid parent origin used to restrict communication.\n * @param {Object} [options.methods={}] Methods that may be called by the parent window.\n * @param {Number} [options.timeout] The amount of time, in milliseconds, Penpal should wait\n * for the parent to respond before rejecting the connection promise.\n * @return {Parent}\n */\n\n\nPenpal.connectToParent = function () {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$parentOrigin = _ref3.parentOrigin,\n parentOrigin = _ref3$parentOrigin === void 0 ? '*' : _ref3$parentOrigin,\n _ref3$methods = _ref3.methods,\n methods = _ref3$methods === void 0 ? {} : _ref3$methods,\n timeout = _ref3.timeout;\n\n if (window === window.top) {\n var error = new Error('connectToParent() must be called within an iframe');\n error.code = ERR_NOT_IN_IFRAME;\n throw error;\n }\n\n var destroy;\n var connectionDestructionPromise = new DestructionPromise(function (resolveConnectionDestructionPromise) {\n destroy = resolveConnectionDestructionPromise;\n });\n var child = window;\n var parent = child.parent;\n var promise = new Penpal.Promise(function (resolveConnectionPromise, reject) {\n var connectionTimeoutId;\n\n if (timeout !== undefined) {\n connectionTimeoutId = setTimeout(function () {\n var error = new Error(\"Connection to parent timed out after \".concat(timeout, \"ms\"));\n error.code = ERR_CONNECTION_TIMEOUT;\n reject(error);\n destroy();\n }, timeout);\n }\n\n var handleMessageEvent = function handleMessageEvent(event) {\n if ((parentOrigin === '*' || parentOrigin === event.origin) && event.source === parent && event.data.penpal === HANDSHAKE_REPLY) {\n log('Child: Received handshake reply');\n child.removeEventListener(MESSAGE, handleMessageEvent);\n var info = {\n localName: 'Child',\n local: child,\n remote: parent,\n remoteOrigin: event.origin\n };\n var callSender = {};\n connectCallReceiver(info, methods, connectionDestructionPromise);\n connectCallSender(callSender, info, event.data.methodNames, destroy, connectionDestructionPromise);\n clearTimeout(connectionTimeoutId);\n resolveConnectionPromise(callSender);\n }\n };\n\n child.addEventListener(MESSAGE, handleMessageEvent);\n connectionDestructionPromise.then(function () {\n child.removeEventListener(MESSAGE, handleMessageEvent);\n var error = new Error('Connection destroyed');\n error.code = ERR_CONNECTION_DESTROYED;\n reject(error);\n });\n log('Child: Sending handshake');\n parent.postMessage({\n penpal: HANDSHAKE,\n methodNames: Object.keys(methods)\n }, parentOrigin);\n });\n return {\n promise: promise,\n destroy: destroy\n };\n};\n\nvar _default = Penpal;\nexports.default = _default;","import { routes } from './leadinConfig';\n\nconst urlsMap = {};\nObject.keys(routes).forEach(key => {\n if (typeof routes[key] === 'object') {\n Object.keys(routes[key]).forEach(subkey => {\n urlsMap[routes[key][subkey]] = [key, subkey];\n });\n } else {\n urlsMap[routes[key]] = [key];\n }\n});\n\nexport default urlsMap;\n","import $ from 'jquery';\n\nimport { domElements } from './constants/selectors';\nimport urlsMap from './constants/urlsMap';\n\nfunction setSelectedMenuItem(url) {\n $(domElements.subMenuButtons).removeClass('current');\n const pageParam = url.match(/\\?page=leadin_?\\w*/)[0];\n const selectedElement = $(`a[href=\"admin.php${pageParam}\"]`);\n selectedElement.parent().addClass('current');\n}\n\n// Given a route like \"/settings/forms\", parse it into \"?page=leadin_settings&leadin_route[]=forms\"\nexport function syncRoute(path = '', searchQuery = '') {\n const baseUrls = Object.keys(urlsMap).sort((a, b) =>\n a.length < b.length ? 1 : -1\n );\n let wpPage;\n let route;\n\n baseUrls.some(basePath => {\n if (path.indexOf(basePath) === 0) {\n wpPage = urlsMap[basePath][0];\n const routePrefix = urlsMap[basePath][1] || '';\n const cleanedPath = path.replace(basePath, '');\n route = `${routePrefix}${cleanedPath}`.replace(/^\\/+/, '');\n return true;\n }\n return false;\n });\n\n if (!wpPage) {\n return;\n }\n\n const leadinRouteParam = route\n ? `&${route\n .split('/')\n .map(subRoute => `${encodeURIComponent(`leadin_route[]`)}=${subRoute}`)\n .join('&')}`\n : '';\n\n const leadinSearchParam = searchQuery.length\n ? `&leadin_search=${encodeURIComponent(searchQuery)}`\n : '';\n\n const nonce = window.leadinConfig\n ? `&_wpnonce=${window.leadinConfig.routeNonce}`\n : '';\n\n const newUrl = `?page=${wpPage}${leadinRouteParam}${leadinSearchParam}${nonce}`;\n\n setSelectedMenuItem(newUrl);\n window.history.replaceState(null, null, newUrl);\n}\n\nexport const leadinPageReload = () => window.location.reload(true);\n\nexport const leadinPageRedirect = path => {\n syncRoute(path);\n leadinPageReload();\n};\n","import $ from 'jquery';\n\nimport Raven from '../lib/Raven';\nimport { ajaxUrl, ajaxNonce } from '../constants/leadinConfig';\n\nfunction makeAjaxRequest(action, method, payload) {\n const url = `${ajaxUrl}?action=${action}&_ajax_nonce=${ajaxNonce}`;\n return new Promise((resolve, reject) => {\n const ajaxPayload = {\n url,\n method,\n contentType: 'application/json',\n success: data => resolve(data),\n error: response => {\n Raven.captureMessage(\n `HTTP request ${action} failed with code ${response.status}: ${response.message}`\n );\n reject(response);\n },\n };\n\n if (payload) {\n ajaxPayload.data = JSON.stringify(payload);\n }\n\n $.ajax(ajaxPayload);\n });\n}\n\nexport function postAjax(action, payload) {\n return makeAjaxRequest(action, 'post', payload);\n}\n\nexport function getAjax(action) {\n return makeAjaxRequest(action, 'get');\n}\n\nexport function leadinConnectPortal(portalInfo) {\n return postAjax('leadin_registration_ajax', portalInfo);\n}\n\nexport function leadinDisconnectPortal() {\n return postAjax('leadin_disconnect_ajax', {});\n}\n\nexport function skipSignup(defaultApp) {\n return postAjax('leadin_skip_signup', { defaultApp });\n}\n\nexport function skipReview() {\n return postAjax('leadin_skip_review');\n}\n\nexport function updateHublet(hublet) {\n return postAjax('leadin_update_hublet', { hublet });\n}\n\nexport function getPortalHublet(hublet) {\n return postAjax('leadin_get_portal_hublet', { hublet });\n}\n\nexport function trackConsent(canTrack) {\n return postAjax('leadin_track_consent', { canTrack });\n}\n\nexport function disableInternalTracking(value) {\n return postAjax('leadin_disable_internal_tracking', value ? '1' : '0');\n}\n\nexport function fetchDisableInternalTracking() {\n return getAjax('leadin_disable_internal_tracking');\n}\n","import Penpal from 'penpal';\nimport Raven from './Raven';\nimport { syncRoute, leadinPageReload, leadinPageRedirect } from '../navigation';\nimport * as leadinConfig from '../constants/leadinConfig';\nimport {\n leadinClearQueryParam,\n getQueryParam,\n filterLeadinQueryParams,\n} from '../utils/queryParams';\nimport { leadinGetPortalInfo } from '../utils/portalInfo';\nimport {\n leadinConnectPortal,\n leadinDisconnectPortal,\n skipReview,\n skipSignup,\n updateHublet,\n getPortalHublet,\n trackConsent,\n disableInternalTracking,\n fetchDisableInternalTracking,\n} from '../api/wordpressAjaxClient';\n\nimport {\n fetchOAuthToken,\n makeInterframeProxyRequest,\n} from '../api/wordpressApiClient';\nimport { setLeadinUnAuthedNavigation } from '../utils/sideNav';\nimport { gutenbergTriggerConnectCalendarRefresh } from '../gutenberg/MeetingsBlock/MeetingGutenbergInterframe';\n\nconst methods = {\n leadinClearQueryParam,\n leadinPageReload,\n leadinPageRedirect,\n leadinGetPortalInfo,\n leadinConnectPortal,\n leadinDisconnectPortal,\n getLeadinConfig: () => leadinConfig,\n skipSignup,\n setLeadinUnAuthedNavigation,\n makeInterframeProxyRequest,\n fetchOAuthToken,\n skipReview,\n updateHublet,\n getPortalHublet,\n trackConsent,\n disableInternalTracking,\n fetchDisableInternalTracking,\n gutenbergTriggerConnectCalendarRefresh,\n};\n\nconst UNAUTHORIZED = 'unauthorized';\nconst REDIRECT = 'REDIRECT';\nconst hubspotBaseUrl = leadinConfig.hubspotBaseUrl;\n\nfunction createConnectionToIframe(iframe) {\n return Penpal.connectToChild({\n url: iframe.src,\n // The iframe to which a connection should be made\n iframe,\n // Methods the parent is exposing to the child\n methods,\n });\n}\n\nexport function initInterframe(iframe) {\n if (!window.leadinChildFrameConnection) {\n window.leadinChildFrameConnection = createConnectionToIframe(iframe);\n window.leadinChildFrameConnection.promise.catch(error => {\n Raven.captureException(error, {\n fingerprint: ['INTERFRAME_CONNECTION_ERROR'],\n });\n });\n }\n\n const redirectToLogin = event => {\n if (event.data === UNAUTHORIZED) {\n window.removeEventListener('message', redirectToLogin);\n iframe.src = leadinConfig.loginUrl;\n setLeadinUnAuthedNavigation();\n }\n };\n\n const handleNavigation = event => {\n if (event.origin !== hubspotBaseUrl) return;\n try {\n const data = JSON.parse(event.data);\n if (data['leadin_sync_route']) {\n const route = data['leadin_sync_route'];\n const search = data['leadin_sync_search'];\n\n syncRoute(route, filterLeadinQueryParams(search));\n } else if (data['message'] === REDIRECT) {\n window.location.href = data['url'];\n }\n } catch (e) {\n // Error in parsing message\n }\n };\n\n const currentPage = getQueryParam('page');\n if (\n currentPage !== 'leadin_settings' &&\n currentPage !== 'leadin' &&\n currentPage !== 'leadin_user_guide'\n ) {\n window.addEventListener('message', redirectToLogin);\n }\n\n window.addEventListener('message', handleNavigation);\n}\n","import {\n portalDomain,\n portalId,\n accountName,\n portalEmail,\n} from '../constants/leadinConfig';\n\nexport const leadinGetPortalInfo = () => ({\n portalDomain,\n portalId,\n portalEmail,\n accountName,\n});\n","import { initInterframe } from '../lib/Interframe';\nimport {\n backgroundIframeUrl,\n impactLink,\n iframeUrl,\n} from '../constants/leadinConfig';\n\nfunction getIframeHeight() {\n const adminMenuWrap = document.getElementById('adminmenuwrap');\n const sideMenuHeight = adminMenuWrap ? adminMenuWrap.offsetHeight : 0;\n const adminBar = document.getElementById('wpadminbar');\n const adminBarHeight = (adminBar && adminBar.offsetHeight) || 0;\n\n if (window.innerHeight < sideMenuHeight) {\n return sideMenuHeight;\n } else {\n return window.innerHeight - adminBarHeight;\n }\n}\n\nfunction addIframeResizeEvent(iframe) {\n let animationFrame;\n window.addEventListener(\n 'resize',\n () => {\n if (animationFrame) {\n cancelAnimationFrame(animationFrame);\n }\n animationFrame = requestAnimationFrame(() => {\n iframe.style.minHeight = `${getIframeHeight()}px`;\n });\n },\n true\n );\n}\n\nfunction createIframeElement(iframeSrc) {\n const iframe = document.createElement('iframe');\n iframe.id = 'leadin-iframe';\n iframe.src = iframeSrc;\n iframe.setAttribute('referrerpolicy', 'no-referrer-when-downgrade');\n iframe.setAttribute(\n 'sandbox',\n 'allow-scripts allow-forms allow-popups allow-top-navigation allow-same-origin'\n );\n iframe.style.minHeight = `${getIframeHeight()}px`;\n addIframeResizeEvent(iframe);\n return iframe;\n}\n\nexport function createIframe() {\n // FIXME: We need to investigate why the Iframe connection is not succeding with an impactLink\n const link = impactLink\n ? `${impactLink}?u=${encodeURIComponent(`${iframeUrl}&trackConsent=0`)}`\n : iframeUrl;\n const iframe = createIframeElement(link);\n initInterframe(iframe);\n document.getElementById('leadin-iframe-container').appendChild(iframe);\n}\n\nexport function createBackgroundIframe() {\n const iframe = createIframeElement(backgroundIframeUrl);\n iframe.style.display = 'none';\n initInterframe(iframe);\n document.body.appendChild(iframe);\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 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 { createIframe } from '../iframe/iframe';\nimport { initAppOnReady } from '../utils/appUtils';\n\ninitAppOnReady(createIframe);\n"],"sourceRoot":""}