{"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]/./src/api/hubspotPluginApi.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/utils/backgroundAppUtils.js","webpack://wp.[name]/./src/entries/reviewBanner.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","callInterframeMethod","method","args","leadinChildFrameConnection","promise","then","child","context","getAuth","getMeetings","getMeetingUser","getMeetingUsers","ids","createMeetingUser","data","getForm","formId","monitorFormPreviewRender","monitorFormCreatedFromTemplate","type","monitorFormCreationFailed","error","monitorMeetingPreviewRender","monitorSidebarMetaChange","metaKey","monitorReviewBannerRendered","monitorReviewBannerLinkClicked","monitorReviewBannerDismissed","leadinConnectCalendar","calendarArgs","triggerReload","meetingsGutenbergInterframe","setCallback","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","path","restApiUrl","URL","Promise","resolve","reject","payload","url","contentType","beforeSend","xhr","setRequestHeader","success","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","executeCallback","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","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","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","resolveConnectionPromise","connectionTimeoutId","undefined","setTimeout","receiverMethodNames","destroyCallReceiver","handleMessage","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","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","initBackgroundApp","isArray","initMonitorGutenberBlockPreview","formsPreviewTimeouts","eventName","initMonitorReviewBanner","reviewBannerTracking","off","click","reviewBanner","classList","add"],"mappings":"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","file":"reviewBanner.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 = 77);\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","import Raven from '../lib/Raven';\nimport { meetingsGutenbergInterframe } from '../gutenberg/MeetingsBlock/MeetingGutenbergInterframe';\n\nfunction callInterframeMethod(method, ...args) {\n return window.leadinChildFrameConnection.promise.then(child =>\n Raven.context(child[method], args)\n );\n}\n\nexport function getAuth() {\n return callInterframeMethod('leadinGetAuth');\n}\n\nexport function getMeetings() {\n return callInterframeMethod('leadinGetMeetings');\n}\n\nexport function getMeetingUser() {\n return callInterframeMethod('leadinGetMeetingUser');\n}\n\nexport function getMeetingUsers(ids) {\n return callInterframeMethod('leadinGetMeetingUsers', ids);\n}\n\nexport function createMeetingUser(data) {\n return callInterframeMethod('leadinPostMeetingUser', data);\n}\n\nexport function getForm(formId) {\n return callInterframeMethod('leadinGetForm', formId);\n}\n\nexport function monitorFormPreviewRender() {\n return callInterframeMethod('monitorFormPreviewRender');\n}\n\nexport function monitorFormCreatedFromTemplate(type) {\n return callInterframeMethod('monitorFormCreatedFromTemplate', type);\n}\n\nexport function monitorFormCreationFailed(error) {\n return callInterframeMethod('monitorFormCreationFailed', error);\n}\n\nexport function monitorMeetingPreviewRender() {\n return callInterframeMethod('monitorMeetingPreviewRender');\n}\n\nexport function monitorSidebarMetaChange(metaKey) {\n return callInterframeMethod('monitorSidebarMetaChange', metaKey);\n}\n\nexport function monitorReviewBannerRendered() {\n return callInterframeMethod('monitorReviewBannerRendered');\n}\n\nexport function monitorReviewBannerLinkClicked() {\n return callInterframeMethod('monitorReviewBannerLinkClicked');\n}\n\nexport function monitorReviewBannerDismissed() {\n return callInterframeMethod('monitorReviewBannerDismissed');\n}\n\nexport function leadinConnectCalendar(calendarArgs) {\n const { hubspotBaseUrl, portalId, triggerReload } = calendarArgs;\n meetingsGutenbergInterframe.setCallback(triggerReload);\n\n return callInterframeMethod('leadinConnectCalendar', {\n hubspotBaseUrl,\n portalId,\n });\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 Raven from '../lib/Raven';\nimport { createBackgroundIframe } from '../iframe/iframe';\nimport { initApp } from './appUtils';\nimport { monitorFormPreviewRender } from '../api/hubspotPluginApi';\n\nexport function initBackgroundApp(initFn) {\n function main() {\n createBackgroundIframe();\n if (Array.isArray(initFn)) {\n initFn.forEach(callback => callback());\n } else {\n initFn();\n }\n }\n initApp(main);\n}\n\nexport function initMonitorGutenberBlockPreview() {\n const formsPreviewTimeouts = {};\n // This listener is responsible to monitor the form previews are rendered correctly\n window.addEventListener('message', event => {\n if (event.data.type === 'hsFormCallback') {\n const formId = event.data.id;\n if (event.data.eventName === 'onBeforeFormInit') {\n formsPreviewTimeouts[formId] = setTimeout(() => {\n Raven.captureMessage(\n `The form preview ${formId} has not been rendered correctly.`\n );\n }, 10 * 1000);\n }\n if (event.data.eventName === 'onFormReady') {\n clearTimeout(formsPreviewTimeouts[formId]);\n monitorFormPreviewRender();\n }\n }\n });\n}\n","import $ from 'jquery';\nimport { initBackgroundApp } from '../utils/backgroundAppUtils';\nimport {\n monitorReviewBannerRendered,\n monitorReviewBannerLinkClicked,\n monitorReviewBannerDismissed,\n} from '../api/hubspotPluginApi';\nimport { domElements } from '../constants/selectors';\n\n/**\n * Adds some methods to window when review banner is\n * displayed to monitor events\n */\nexport function initMonitorReviewBanner() {\n if (!window.reviewBannerTracking) {\n window.reviewBannerTracking = {\n monitorReviewBannerRendered,\n monitorReviewBannerLinkClicked,\n monitorReviewBannerDismissed,\n };\n }\n\n function reviewLinkClickHandler() {\n const reviewBanner = document.getElementById('leadin-review-banner');\n\n if (reviewBanner) {\n reviewBanner.classList.add('leadin-review-banner--hide');\n window.reviewBannerTracking.monitorReviewBannerLinkClicked();\n }\n }\n\n function dismissBtnClickHandler() {\n window.reviewBannerTracking.monitorReviewBannerDismissed();\n }\n\n $(domElements.reviewBannerLeaveReviewLink)\n .off('click')\n .click(reviewLinkClickHandler);\n\n $(domElements.reviewBannerDismissButton)\n .off('click')\n .click(dismissBtnClickHandler);\n\n $('#leadin-iframe').ready(() => {\n monitorReviewBannerRendered();\n });\n}\n\ninitBackgroundApp(initMonitorReviewBanner);\n"],"sourceRoot":""}