{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/shortid/lib/alphabet.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/raven-js/src/utils.js","webpack:///./node_modules/shortid/index.js","webpack:///./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack:///./src/index.js","webpack:///./node_modules/shortid/lib/index.js","webpack:///./node_modules/shortid/lib/random/random-from-seed.js","webpack:///./node_modules/shortid/lib/build.js","webpack:///./node_modules/shortid/lib/generate.js","webpack:///./node_modules/shortid/lib/random/random-byte-browser.js","webpack:///./node_modules/nanoid/format.js","webpack:///./node_modules/shortid/lib/is-valid.js","webpack:///./node_modules/shortid/lib/util/cluster-worker-id-browser.js","webpack:///./node_modules/raven-js/src/singleton.js","webpack:///./node_modules/raven-js/src/raven.js","webpack:///./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack:///./node_modules/raven-js/vendor/md5/md5.js","webpack:///./node_modules/raven-js/src/configError.js","webpack:///./node_modules/raven-js/src/console.js","webpack:///./src/Store.js","webpack:///./src/Utils.js","webpack:///./src/Leadhit.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","__webpack_exports__","fetch","support","searchParams","self","iterable","blob","Blob","e","formData","arrayBuffer","viewClasses","isArrayBufferView","ArrayBuffer","isView","obj","indexOf","toString","normalizeName","String","test","TypeError","toLowerCase","normalizeValue","iteratorFor","items","iterator","next","shift","done","undefined","Headers","headers","this","map","forEach","append","Array","isArray","header","getOwnPropertyNames","consumed","body","bodyUsed","Promise","reject","fileReaderReady","reader","resolve","onload","result","onerror","error","readBlobAsArrayBuffer","FileReader","promise","readAsArrayBuffer","bufferClone","buf","slice","view","Uint8Array","byteLength","set","buffer","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","URLSearchParams","DataView","_bodyArrayBuffer","type","rejected","Error","then","text","readAsText","chars","length","fromCharCode","join","readArrayBufferAsText","decode","json","JSON","parse","oldValue","has","callback","thisArg","keys","push","values","entries","methods","Request","input","options","method","upcased","url","credentials","signal","toUpperCase","referrer","form","trim","split","bytes","replace","decodeURIComponent","Response","bodyInit","status","ok","statusText","clone","response","redirectStatuses","redirect","RangeError","location","DOMException","err","message","stack","constructor","init","request","aborted","xhr","XMLHttpRequest","abortXhr","abort","rawHeaders","getAllResponseHeaders","line","parts","responseURL","responseText","ontimeout","onabort","open","withCredentials","responseType","setRequestHeader","addEventListener","onreadystatechange","readyState","removeEventListener","send","polyfill","alphabet","previousSeed","shuffled","randomFromSeed","ORIGINAL","reset","setCharacters","_alphabet_","unique","filter","item","ind","arr","lastIndexOf","getShuffled","characterIndex","sourceArray","targetArray","nextValue","Math","floor","splice","shuffle","characters","seed","lookup","index","g","Function","window","global","stringify","_window","isUndefined","what","isPlainObject","isString","supportsFetch","each","j","hasKey","truncate","str","max","substr","joinRegExp","patterns","pattern","sources","len","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","id","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","isObject","isError","isErrorEvent","isDOMError","isDOMException","isFunction","isEmptyObject","_","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","Uint16Array","pad","num","v","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","stacktrace","parseUrl","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","delimiter","output","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","val","serializeKeysForMessage","maxLength","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","o_O","sanitizeWorker","workerInput","k","haystack","needle","serializer","replacer","cycleReplacer","thisPos","Infinity","stringifyError","spaces","getSerialize","whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__","shortid","require","Raven","Store","default","Leadhit","setExistCounterOrOrderScript","codeType","state","proto","trackUrlV2","site_id","lh_clid","code_type","requestCheckNeedShowFormCollector","token","token_is_valid","localStorage","setItem","editedForms","fields","from","field","alias","fields_aliases","selector","fields_selector","by_click","active","existingForms","showFormCollector","console","log","catch","getSiteSettings","lh_vars","forms_script","siteSettings","counter_checked","order_code_checked","orderScriptTimer","setInterval","document","querySelector","clearInterval","setTimeout","checkExistCounterAndOrder","checkAllowedDomains","domains","includes","hostname","checkAllowedGDPR","startTracker","LeadhitInst","agent","navigator","userAgent","loadSiteVariables","processVisit","startCollectorForClosedPagesForms","debugLog","attrMatch","store","initialUrl","href","observer","MutationObserver","mutations","pageID","generate","observeConfig","childList","attributes","characterData","subtree","timerCheckDocument","observe","getItem","setLeadApprovement","leadId","collectApproved","lead_id","getReferrer","collect_approved","date_start","Date","getLeadApprovement","detail","head","insertAdjacentHTML","cancelButton","lhApprovementWindow","style","display","confirmButton","showApprovementWindow","data_collect_approved","getLeadId","getUID","getURLParameter","getLeadIdRequest","localStorageAvailable","localStorageNeedApprovement","collect_approvement","getSiteApprovement","dataCollectApproved","config","release","TrackVersion","whitelistUrls","captureUnhandledRejections","install","build","isValid","clusterWorkerId","seedValue","worker","workerId","newCharacters","_seed_","counter","previousSeconds","REDUCE_TIME","version","seconds","now","format","number","loopCounter","pow","randomByte","size","mask","LN2","step","ceil","byte","RavenConstructor","_Raven","noConflict","afterLoad","Client","TraceKit","md5","RavenConfigError","utils","wrapConsoleMethod","wrapMethod","dsnKeys","dsnPattern","_document","_navigator","keepOriginalCallback","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","SENTRY_RELEASE","logger","ignoreErrors","ignoreUrls","includePaths","collectWindowErrors","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","debug","dsn","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","sentry","instrumentDefaults","tryCatch","isSetup","report","subscribe","_handleOnErrorStackInfo","apply","arguments","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","args","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","handled","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","computeStackTrace","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","extra","__serialized__","msg","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","RavenConfig","showReportDialog","eventId","encode","encodedOptions","email","globalServer","script","createElement","async","src","appendChild","_triggerEvent","eventType","evt","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","function","wrapEventTarget","capture","secure","handleEvent","handler","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","props","origFetch","fetchInput","fetchData","level","attachEvent","chrome","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","consoleMethodCallback","builtin","installer","concat","exec","allowSecretKey","port","stackInfo","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","column","prefixedMessage","exception","transaction","_trimPacket","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","User-Agent","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","XDomainRequest","hash","evaluated","setUser","setReleaseContext","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastExceptionStack","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","augmentStackTraceWithInitialElement","processLastException","groups","_lastExceptionStack","_lastArgs","rethrow","incomplete","unsubscribe","computeStackTraceFromStackProp","submatch","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","columnNumber","sourceMaps","sourceMapAddress","charAt","origin","initial","unshift","partial","computeStackTraceByWalkingCallerChain","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","safeAdd","x","y","lsw","md5cmn","q","cnt","md5ff","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","rstr2binl","length8","charCodeAt","rstr2hex","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","bkey","ipad","opad","rstrHMACMD5","string","raw","originalConsoleLevel","originalConsole","sentryLevel","shortid__WEBPACK_IMPORTED_MODULE_0__","shortid__WEBPACK_IMPORTED_MODULE_0___default","envSettings","baseTrackUrl","leadInitUrl","leadInitUrlV2","isFirstVisit","isFirstSubmit","isOfferPage","pageOfferAvailable","orderButtons","old_browser","getElementsByClassName","disabledForms","defaultDisabledForms","domain","params","popup","tickInterval","__forms","formFields","title","editableForm","src_Utils","checkIsValidObjectIdForMongoDB","hashCode","genUID","rand","setFormIdToForms","forms","getElementsByTagName","_lh_formid","getElemValue","el","nodeName","checked","selectedIndex","checkformsWithHashedFields","formSelector","formsWithHashedFields","makeQuery","readCookie","cookie","offset","tail","setCookie","expires","toUTCString","createCookie","minutes","esc","date","setTime","getTime","escape","rootDomain","lh_tracker_for_current_host","shortCookie","thirdLevelDomain","createComplexCookie","closestByTagName","leadhitMessageID","leadhitCampaign","URL","getHostname","search","decodeURI","SetDiffTime","lhDiffTime","detectChromeAutoFill","inputType","targetType","raven","fetchPolyfill","isWidgetSystemInitialized","GETqueryDict","CustomEvent","customEvent","bubbles","cancelable","initCustomEvent","Event","addEvent","evType","elems","addEventLive","elementQuerySelector","qs","querySelectorAll","parentElement","Utils","getVisitId","sess","lh_vid","addToCart","itemUrl","itemsCount","next_vers_features","add_to_cart","cartParams","item_id","item_url","event_type","visit_id","items_count","sendBeacon","uid","vid","clid","loadScript","cartEvent","addToFavorites","add_to_favorites","favoritesEvent","setVisitNumberWhenCartDataWasAdded","currentVisit","getStringByQS","innerText","innerHTML","getStringByXPath","elCartSum","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","sc","charset","toISOString","nearest","els","saveFormToLocalStorage","elements","leadhitForm","action","save_time","formKey","saveItemUrl","ItemUrl","sendWidgetStats","wid","payload","etype","widgetEvent","widgets","requestBody","widget_id","checkDisabledForms","disabledSelectors","disabledForm","wrapToForm","formAction","insertBefore","[object Object]","sendFormToLeadhit","submitted","splittedKey","pathname","formUrl","removeItem","cookieNames","newSendFormToLeadhit","form_id","form_fields","time_added","disable_banner","sendFormsFromLocalStorage","localKeys","save_lead_form","checkOrSetOrderButtons","orderSelectors","orderButton","warn","initWidgetSystem","widgetsSrc","lh","setFormListeners","mouseupFormListner","inputFormListner","selectFormListner","intervalSendFormsFromLocalStorage","sendOrderForm","eval","checkLeadEmailExistAndSetToLocalstorage","need_request_check_lead_email_exist","checkID","timerCheckLeadEmailExistAndSetToLocalstorage","email_exist","consumeFormsFromClosedPages","anotherPage","currentForm","setLeadIdCookies","callbacksIfExistLeadId","initialize","urlLeadId","oldVisitId","lh_ref","sendStatCounterServer","updateLeadState","startTicker","process_lead_page_load","referer","page","stock_id","trackUrl","lead_state","jsonData","timerUpdateLeadState","dataKey","sendTick","forced","tick","disableBannerByGET","arg","disablers","checkOfferPage","pageUrl","requestUrl","nextVersFeaturesWidgets","responseResult","page_url","offerPagesCountIncrement","lhOfferCounter","clientCheckOfferPageAndCount","requiredElement","operator","currentUrl","regEx","setCacheKey","expireTime","requestData","checkCacheKey","getUniqueSelector","newElementSelector","hasAttribute","classList","checkResult","alert","checkExistParentFormElementInFormCollector","addSelectedFieldToFormInFormCollector","freeFields","getAllFreeFieldsInFormCollector","some","turnOffFindingElementInPageInFormCollector","renderFormCollectorEditPage","onmouseover","onmouseout","formCollectorFieldNode","onclick","background","formCollectorFieldColor","getInputSelectorInFormCollector","preventDefault","stopPropagation","isFormElement","standard_form_element","findFieldMouseoverInFormCollector","findFieldMouseoutInFormCollector","getButtonSelectorInFormCollector","findButtonMouseoverInFormCollector","closest","findButtonMouseoutInFormCollector","getExistingFormById","findIndex","existField","addFieldTypeListSelectInFormCollector","shadowContainer","selectFieldTypeCont","shadowRoot","selectFieldTypeElement","fieldType","formField","freeFieldsItems","selectFieldTypeElements","onchange","selectElement","selectedType","setAttribute","updateFormFieldsBlock","formFieldsBlock","fieldsItems","selectorValue","matchDoubleQuotes","matchSingleQuotes","addFieldButton","removeFieldButtons","fieldNameInputs","fieldAliasInputs","fieldSelectorInputs","sendFormByClickButton","contains","remove","add","removeFieldButton","removeButton","removeFieldName","fieldNameInput","oninput","fieldAliasInput","fieldSelectorInput","validateFormBeforeSaveInFormCollector","backToFormsListInFormCollector","formEditorContent","formListContainer","formEditorContainer","updateFormsListHtmlInFormCollector","updateFormInFormCollector","existingForm","updateFormScriptInFormCollector","createFormInFormCollector","removeFormInFormCollector","generateFormsScriptInFormCollector","codeText","formVariableName","inputVariableName","successMessage","formsScriptText","lhVars","removeButtonHtml","formByClickCheckbox","formByClickInput","backFormsList","formNameInput","formActionInput","standartFormCheckbox","sendFormByClickCheckbox","sendFormByClickInput","saveFormButton","removeFormButton","formToUpdate","confirm","showFormCollectorEditPage","formId","addFormCollectorEvents","moveIcon","lhFormCollectorElement","closeIcon","addFromButton","onmousedown","onMouseMove","formCollectorStartMovePoints","getBoundingClientRect","diffX","diffY","newX","newY","left","top","onmouseup","formListWrapper","formListItem","htmlElem","cssElem","css","styleSheet","cssText","createTextNode","attachShadow","lh_sf","_lh_params","lh_banner_data"],"mappings":"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","file":"track.bundle.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 = 6);\n","var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = self.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.onabort = function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!self.fetch) {\n self.fetch = fetch\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n}\n","'use strict';\n\nvar randomFromSeed = require('./random/random-from-seed');\n\nvar ORIGINAL = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\nvar alphabet;\nvar previousSeed;\n\nvar shuffled;\n\nfunction reset() {\n shuffled = false;\n}\n\nfunction setCharacters(_alphabet_) {\n if (!_alphabet_) {\n if (alphabet !== ORIGINAL) {\n alphabet = ORIGINAL;\n reset();\n }\n return;\n }\n\n if (_alphabet_ === alphabet) {\n return;\n }\n\n if (_alphabet_.length !== ORIGINAL.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. You submitted ' + _alphabet_.length + ' characters: ' + _alphabet_);\n }\n\n var unique = _alphabet_.split('').filter(function(item, ind, arr){\n return ind !== arr.lastIndexOf(item);\n });\n\n if (unique.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. These characters were not unique: ' + unique.join(', '));\n }\n\n alphabet = _alphabet_;\n reset();\n}\n\nfunction characters(_alphabet_) {\n setCharacters(_alphabet_);\n return alphabet;\n}\n\nfunction setSeed(seed) {\n randomFromSeed.seed(seed);\n if (previousSeed !== seed) {\n reset();\n previousSeed = seed;\n }\n}\n\nfunction shuffle() {\n if (!alphabet) {\n setCharacters(ORIGINAL);\n }\n\n var sourceArray = alphabet.split('');\n var targetArray = [];\n var r = randomFromSeed.nextValue();\n var characterIndex;\n\n while (sourceArray.length > 0) {\n r = randomFromSeed.nextValue();\n characterIndex = Math.floor(r * sourceArray.length);\n targetArray.push(sourceArray.splice(characterIndex, 1)[0]);\n }\n return targetArray.join('');\n}\n\nfunction getShuffled() {\n if (shuffled) {\n return shuffled;\n }\n shuffled = shuffle();\n return shuffled;\n}\n\n/**\n * lookup shuffled letter\n * @param index\n * @returns {string}\n */\nfunction lookup(index) {\n var alphabetShuffled = getShuffled();\n return alphabetShuffled[index];\n}\n\nfunction get () {\n return alphabet || ORIGINAL;\n}\n\nmodule.exports = {\n get: get,\n characters: characters,\n seed: setSeed,\n lookup: lookup,\n shuffled: getShuffled\n};\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","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\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 (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if stacktrace is malformed\n if (frames1 === undefined || frames2 === undefined) return false;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","'use strict';\nmodule.exports = require('./lib/index');\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","import { fetch } from 'whatwg-fetch'\n(function () {\n var shortid = require('shortid')\n var Raven = require('raven-js')\n var Store = require('./Store').default\n var Leadhit = require('./Leadhit').default\n\n const ravenUrl = 'https://f704e55638d14ab284f08be5d83efb3d@sentry.dev.leadhit.ru/4'\n Raven.config(ravenUrl, {\n release: TrackVersion,\n whitelistUrls: [/^(|https?:\\/\\/)track\\.leadhit\\.(io|ru).*/],\n captureUnhandledRejections: false\n }).install()\n\n function setExistCounterOrOrderScript (codeType) {\n var url = Store.state.proto + Store.state.trackUrlV2 + 'set/site/code_checked'\n var data = JSON.stringify({\n site_id: window.lh_clid,\n code_type: codeType\n })\n\n fetch(url, { method: 'POST', body: data })\n }\n function checkExistCounterAndOrder () {\n if (Store.state.siteSettings.hasOwnProperty('counter_checked') && Store.state.siteSettings.counter_checked === false) {\n setExistCounterOrOrderScript('counter')\n }\n if (Store.state.siteSettings.hasOwnProperty('order_code_checked') && Store.state.siteSettings.order_code_checked === false) {\n var orderScriptTimer = setInterval(function () {\n var scriptElem = document.querySelector('script.lh-order-script')\n if (scriptElem) {\n clearInterval(orderScriptTimer)\n orderScriptTimer = null\n setExistCounterOrOrderScript('order')\n }\n }, 1000)\n setTimeout(function () {\n clearInterval(orderScriptTimer)\n orderScriptTimer = null\n }, 10000)\n }\n }\n\n function getFormsData () {\n var url = Store.state.proto + Store.state.trackUrlV2 + 'get/site/forms?site_id=' + window.lh_clid\n fetch(url).then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n var editedForms = response.map(function (form) {\n var fields = JSON.parse(JSON.stringify(form.fields))\n form.fields = []\n Array.from(Object.keys(fields)).forEach(function (key) {\n var field = {\n name: {\n key: fields[key],\n value: key\n },\n alias: {\n key: fields[key],\n value: form.fields_aliases[fields[key]] || ''\n },\n selector: {\n key: fields[key],\n value: form.fields_selector[fields[key]] || ''\n }\n }\n form.fields.push(field)\n })\n delete form.fields_aliases\n delete form.fields_selector\n\n if (!form.by_click.hasOwnProperty('active')) {\n form.by_click.active = false\n form.by_click.selector = ''\n }\n\n return form\n })\n\n Store.state.existingForms = editedForms\n\n window.Leadhit.showFormCollector()\n } catch (e) {\n console.log('getFormsData, Error: ', e)\n }\n }).catch(function (e) {\n console.log('getFormsData, Error: ', e)\n })\n }).catch(function (e) {\n console.log('getFormsData, Error: ', e)\n })\n }\n function requestCheckNeedShowFormCollector (token) {\n var url = Store.state.proto + Store.state.trackUrlV2 + 'check/site/forms_token?site_id=' + window.lh_clid + '&token=' + token\n fetch(url).then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n if (response.token_is_valid) {\n localStorage.setItem('lh-show-form-collector', token)\n getFormsData()\n }\n } catch (e) {\n console.log('requestCheckNeedShowFormCollector, Error: ', e)\n }\n }).catch(function (e) {\n console.log('requestCheckNeedShowFormCollector, Error: ', e)\n })\n }).catch(function (e) {\n console.log('requestCheckNeedShowFormCollector, Error: ', e)\n })\n }\n function checkNeedShowFormCollector () {\n var attrMatch = window.location.href.match(/lh_forms_editor_token=.{1,15}/g)\n if (attrMatch && attrMatch.length > 0) {\n var token = attrMatch[0].split('=')[1]\n requestCheckNeedShowFormCollector(token)\n } else if (localStorage.getItem('lh-show-form-collector')) {\n requestCheckNeedShowFormCollector(localStorage.getItem('lh-show-form-collector'))\n }\n }\n\n function getSiteSettings (callback) {\n var url = Store.state.proto + Store.state.trackUrlV2 + 'get/site/settings?site_id=' + window.lh_clid\n fetch(url).then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n if (!response.lh_vars.hasOwnProperty('forms_script')) {\n response.lh_vars.forms_script = ''\n }\n\n Store.state.siteSettings = response\n callback()\n\n checkExistCounterAndOrder()\n } catch (e) {\n callback()\n console.log('getSiteSettings, Error: ', e)\n }\n }).catch(function (e) {\n callback()\n console.log('getSiteSettings, Error: ', e)\n })\n }).catch(function (e) {\n callback()\n console.log('getSiteSettings, Error: ', e)\n })\n }\n\n function checkAllowedBrowsers () {\n /* eslint-disable */\n var userAgent = navigator.userAgent;\n if (userAgent.indexOf('MSIE ') > -1 || userAgent.indexOf('Trident/') > -1) {\n // We don't work in IE for now\n return false;\n } else {\n return true;\n }\n /* eslint-enable */\n }\n\n function checkAllowedDomains () {\n var url = Store.state.proto + Store.state.trackUrlV2 + 'check/site/allowed-domains?site_id=' + window.lh_clid\n fetch(url).then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n if (response.status === 'success' && response.domains) {\n if (response.domains.length === 0 || response.domains.includes(window.location.hostname)) {\n checkAllowedGDPR()\n }\n }\n } catch (e) {\n checkAllowedGDPR()\n console.log('Check allowed domains, Error: ', e)\n }\n }).catch(function (e) {\n checkAllowedGDPR()\n console.log('Check allowed domains, Error: ', e)\n })\n }).catch(function (e) {\n checkAllowedGDPR()\n console.log('Check allowed domains, Error: ', e)\n })\n }\n\n function startTracker (LeadhitInst) {\n const agent = window.navigator.userAgent\n\n if (agent.toLowerCase().indexOf('googlebot') !== -1 ||\n agent.toLowerCase().indexOf('yandex.com/bots') !== -1 ||\n agent.toLowerCase().indexOf('mail.ru_bot') !== -1 ||\n agent.toLowerCase().indexOf('msnbot') !== -1 ||\n agent.toLowerCase().indexOf('bingbot') !== -1 ||\n agent.toLowerCase().indexOf('stackrambler') !== -1 ||\n agent.toLowerCase().indexOf('yahoo! slurp') !== -1 ||\n agent.toLowerCase().indexOf('slurp') !== -1 ||\n agent.toLowerCase().indexOf('duckduckbot') !== -1\n ) {\n return\n }\n\n try {\n LeadhitInst.init()\n LeadhitInst.loadSiteVariables()\n LeadhitInst.processVisit()\n LeadhitInst.startCollectorForClosedPagesForms()\n } catch (e) {\n LeadhitInst.debugLog(e)\n }\n\n setTimeout(function () {\n LeadhitInst.store.state.initialUrl = location.href\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function () {\n if (location.href !== LeadhitInst.store.state.initialUrl) {\n LeadhitInst.store.state.initialUrl = location.href\n try {\n LeadhitInst.init()\n LeadhitInst.loadSiteVariables()\n LeadhitInst.processVisit()\n LeadhitInst.store.state.pageID = shortid.generate()\n } catch (e) {\n LeadhitInst.debugLog(e)\n }\n }\n })\n })\n var observeConfig = { childList: true, attributes: true, characterData: true, subtree: true }\n var timerCheckDocument = setInterval(function () {\n if (document.readyState === 'complete') {\n clearInterval(timerCheckDocument)\n timerCheckDocument = null\n\n try {\n observer.observe(document.body, observeConfig)\n } catch (error) {\n console.log('observe error', error)\n }\n }\n }, 100)\n }, 0)\n\n window.Leadhit = LeadhitInst\n\n checkNeedShowFormCollector()\n }\n\n function setLeadApprovement (LeadhitInst, leadId, collectApproved) {\n var url = LeadhitInst.store.state.proto + LeadhitInst.store.state.trackUrlV2 + 'set/lead/approvement'\n var data = JSON.stringify({\n lead_id: leadId,\n site_id: window.lh_clid,\n referrer: LeadhitInst.getReferrer(),\n collect_approved: collectApproved\n })\n\n fetch(url, { method: 'POST', body: data })\n .then(function (response) {\n response.text().then(function (text) {\n try {\n text = JSON.parse(text)\n\n localStorage.setItem('lh_data_collect_approved', JSON.stringify({\n collect_approved: collectApproved,\n date_start: new Date()\n }))\n\n if (collectApproved) {\n startTracker(LeadhitInst)\n }\n } catch (e) {\n LeadhitInst.debugLog(e)\n }\n }).catch((e) => {\n LeadhitInst.debugLog(e)\n })\n }).catch((e) => {\n LeadhitInst.debugLog(e)\n })\n }\n\n function showApprovementWindow (LeadhitInst, leadId) {\n var approveWindow = `\n
\n
\n Confirm consent to the processing of personal data.\n
\n
\n \n \n
\n
\n `\n var styles = `\n `\n\n document.head.insertAdjacentHTML('beforeend', styles)\n document.body.insertAdjacentHTML('beforeend', approveWindow)\n\n setTimeout(function () {\n var cancelButton = document.querySelector('button.lh-cancel-approvement-button')\n if (cancelButton) {\n cancelButton.addEventListener('click', function () {\n var lhApprovementWindow = document.querySelector('.lh-approvement-window')\n if (lhApprovementWindow) {\n lhApprovementWindow.style.display = 'none'\n setLeadApprovement(LeadhitInst, leadId, false)\n }\n })\n }\n\n var confirmButton = document.querySelector('button.lh-confirm-approvement-button')\n if (confirmButton) {\n confirmButton.addEventListener('click', function () {\n var lhApprovementWindow = document.querySelector('.lh-approvement-window')\n if (lhApprovementWindow) {\n lhApprovementWindow.style.display = 'none'\n setLeadApprovement(LeadhitInst, leadId, true)\n }\n })\n }\n }, 0)\n }\n\n function getLeadApprovement (LeadhitInst, leadId) {\n var url = LeadhitInst.store.state.proto + LeadhitInst.store.state.trackUrlV2 + 'check/lead/approvement?' + 'site_id=' + window.lh_clid + '&lead_id=' + leadId\n fetch(url).then(function (response) {\n response.text().then(function (text) {\n try {\n text = JSON.parse(text)\n\n if (text.detail === 'Lead not found') {\n showApprovementWindow(LeadhitInst, leadId)\n } else if (text.data_collect_approved) {\n startTracker(LeadhitInst)\n }\n } catch (e) {\n LeadhitInst.debugLog(e)\n }\n }).catch((e) => {\n LeadhitInst.debugLog(e)\n })\n }).catch((e) => {\n LeadhitInst.debugLog(e)\n })\n }\n\n function getLeadId (LeadhitInst) {\n var leadId = LeadhitInst.getUID() || LeadhitInst.getURLParameter('lead_id')\n if (!leadId || leadId === 'None') {\n LeadhitInst.getLeadIdRequest()\n .then(function (response) {\n response.text().then(function (text) {\n try {\n leadId = JSON.parse(text)[window.lh_clid]\n getLeadApprovement(LeadhitInst, leadId)\n } catch (e) {\n LeadhitInst.debugLog(e)\n }\n }).catch((e) => {\n LeadhitInst.debugLog(e)\n })\n }).catch((e) => {\n LeadhitInst.debugLog(e)\n })\n } else {\n getLeadApprovement(LeadhitInst, leadId)\n }\n }\n\n function getSiteApprovement (LeadhitInst) {\n var url = LeadhitInst.store.state.proto + LeadhitInst.store.state.trackUrlV2 + 'check/site/approvement?' + 'site_id=' + window.lh_clid\n fetch(url).then(function (response) {\n response.text().then(function (text) {\n try {\n text = JSON.parse(text)\n localStorage.setItem('lh_data_collect_need_approvement', text.collect_approvement)\n if (!text.collect_approvement) {\n startTracker(LeadhitInst)\n } else {\n getLeadId(LeadhitInst)\n }\n } catch (e) {\n startTracker(LeadhitInst)\n LeadhitInst.debugLog(e)\n }\n }).catch(function (e) {\n startTracker(LeadhitInst)\n LeadhitInst.debugLog(e)\n })\n }).catch(function (e) {\n startTracker(LeadhitInst)\n LeadhitInst.debugLog(e)\n })\n }\n\n function checkAllowedGDPR () {\n var localStorageAvailable = true\n try {\n localStorage.setItem('leadhit_tracker', '1')\n } catch (e) {\n localStorageAvailable = false\n }\n\n if (localStorageAvailable) {\n var LeadhitInst = new Leadhit(Raven, Store)\n\n var localStorageNeedApprovement = localStorage.getItem('lh_data_collect_need_approvement')\n\n if (localStorageNeedApprovement === null) {\n getSiteApprovement(LeadhitInst)\n } else if (localStorageNeedApprovement === 'true') {\n var dataCollectApproved = localStorage.getItem('lh_data_collect_approved')\n try {\n dataCollectApproved = JSON.parse(dataCollectApproved)\n } catch (e) {}\n\n if (dataCollectApproved === null) {\n getLeadId(LeadhitInst)\n } else if (dataCollectApproved.hasOwnProperty('collect_approved')) {\n if (dataCollectApproved.collect_approved === true) {\n startTracker(LeadhitInst)\n }\n }\n } else if (localStorageNeedApprovement === 'false') {\n startTracker(LeadhitInst)\n }\n }\n }\n\n function checkRunTracker () {\n if (checkAllowedBrowsers()) {\n getSiteSettings(checkAllowedDomains)\n }\n }\n\n checkRunTracker()\n})()\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar build = require('./build');\nvar isValid = require('./is-valid');\n\n// if you are using cluster or multiple servers use this to make each instance\n// has a unique value for worker\n// Note: I don't know if this is automatically set when using third\n// party cluster solutions such as pm2.\nvar clusterWorkerId = require('./util/cluster-worker-id') || 0;\n\n/**\n * Set the seed.\n * Highly recommended if you don't want people to try to figure out your id schema.\n * exposed as shortid.seed(int)\n * @param seed Integer value to seed the random alphabet. ALWAYS USE THE SAME SEED or you might get overlaps.\n */\nfunction seed(seedValue) {\n alphabet.seed(seedValue);\n return module.exports;\n}\n\n/**\n * Set the cluster worker or machine id\n * exposed as shortid.worker(int)\n * @param workerId worker must be positive integer. Number less than 16 is recommended.\n * returns shortid module so it can be chained.\n */\nfunction worker(workerId) {\n clusterWorkerId = workerId;\n return module.exports;\n}\n\n/**\n *\n * sets new characters to use in the alphabet\n * returns the shuffled alphabet\n */\nfunction characters(newCharacters) {\n if (newCharacters !== undefined) {\n alphabet.characters(newCharacters);\n }\n\n return alphabet.shuffled();\n}\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction generate() {\n return build(clusterWorkerId);\n}\n\n// Export all other functions as properties of the generate function\nmodule.exports = generate;\nmodule.exports.generate = generate;\nmodule.exports.seed = seed;\nmodule.exports.worker = worker;\nmodule.exports.characters = characters;\nmodule.exports.isValid = isValid;\n","'use strict';\n\n// Found this seed-based random generator somewhere\n// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)\n\nvar seed = 1;\n\n/**\n * return a random number based on a seed\n * @param seed\n * @returns {number}\n */\nfunction getNextValue() {\n seed = (seed * 9301 + 49297) % 233280;\n return seed/(233280.0);\n}\n\nfunction setSeed(_seed_) {\n seed = _seed_;\n}\n\nmodule.exports = {\n nextValue: getNextValue,\n seed: setSeed\n};\n","'use strict';\n\nvar generate = require('./generate');\nvar alphabet = require('./alphabet');\n\n// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.\n// This number should be updated every year or so to keep the generated id short.\n// To regenerate `new Date() - 0` and bump the version. Always bump the version!\nvar REDUCE_TIME = 1459707606518;\n\n// don't change unless we change the algos or REDUCE_TIME\n// must be an integer and less than 16\nvar version = 6;\n\n// Counter is used when shortid is called multiple times in one second.\nvar counter;\n\n// Remember the last time shortid was called in case counter is needed.\nvar previousSeconds;\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction build(clusterWorkerId) {\n var str = '';\n\n var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);\n\n if (seconds === previousSeconds) {\n counter++;\n } else {\n counter = 0;\n previousSeconds = seconds;\n }\n\n str = str + generate(version);\n str = str + generate(clusterWorkerId);\n if (counter > 0) {\n str = str + generate(counter);\n }\n str = str + generate(seconds);\n return str;\n}\n\nmodule.exports = build;\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar random = require('./random/random-byte');\nvar format = require('nanoid/format');\n\nfunction generate(number) {\n var loopCounter = 0;\n var done;\n\n var str = '';\n\n while (!done) {\n str = str + format(random, alphabet.get(), 1);\n done = number < (Math.pow(16, loopCounter + 1 ) );\n loopCounter++;\n }\n return str;\n}\n\nmodule.exports = generate;\n","'use strict';\n\nvar crypto = typeof window === 'object' && (window.crypto || window.msCrypto); // IE 11 uses window.msCrypto\n\nvar randomByte;\n\nif (!crypto || !crypto.getRandomValues) {\n randomByte = function(size) {\n var bytes = [];\n for (var i = 0; i < size; i++) {\n bytes.push(Math.floor(Math.random() * 256));\n }\n return bytes;\n };\n} else {\n randomByte = function(size) {\n return crypto.getRandomValues(new Uint8Array(size));\n };\n}\n\nmodule.exports = randomByte;\n","/**\n * Secure random string generator with custom alphabet.\n *\n * Alphabet must contain 256 symbols or less. Otherwise, the generator\n * will not be secure.\n *\n * @param {generator} random The random bytes generator.\n * @param {string} alphabet Symbols to be used in new random string.\n * @param {size} size The number of symbols in new random string.\n *\n * @return {string} Random string.\n *\n * @example\n * const format = require('nanoid/format')\n *\n * function random (size) {\n * const result = []\n * for (let i = 0; i < size; i++) {\n * result.push(randomByte())\n * }\n * return result\n * }\n *\n * format(random, \"abcdef\", 5) //=> \"fbaef\"\n *\n * @name format\n * @function\n */\nmodule.exports = function (random, alphabet, size) {\n var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1\n var step = Math.ceil(1.6 * mask * size / alphabet.length)\n\n var id = ''\n while (true) {\n var bytes = random(step)\n for (var i = 0; i < step; i++) {\n var byte = bytes[i] & mask\n if (alphabet[byte]) {\n id += alphabet[byte]\n if (id.length === size) return id\n }\n }\n }\n}\n\n/**\n * @callback generator\n * @param {number} bytes The number of bytes to generate.\n * @return {number[]} Random bytes.\n */\n","'use strict';\nvar alphabet = require('./alphabet');\n\nfunction isShortId(id) {\n if (!id || typeof id !== 'string' || id.length < 6 ) {\n return false;\n }\n\n var nonAlphabetic = new RegExp('[^' +\n alphabet.get().replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&') +\n ']');\n return !nonAlphabetic.test(id);\n}\n\nmodule.exports = isShortId;\n","'use strict';\n\nmodule.exports = 0;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.27.0',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\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} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n // Always attempt to get stacktrace if message is empty.\n // It's the only way to provide any helpful information to the user.\n if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = objectMerge(\n {\n eventId: this.lastEventId(),\n dsn: this._dsn,\n user: this._globalContext.user || {}\n },\n options\n );\n\n if (!options.eventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n if (!options.dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var encodedOptions = [];\n\n for (var key in options) {\n if (key === 'user') {\n var user = options.user;\n if (user.name) encodedOptions.push('name=' + encode(user.name));\n if (user.email) encodedOptions.push('email=' + encode(user.email));\n } else {\n encodedOptions.push(encode(key) + '=' + encode(options[key]));\n }\n }\n var globalServer = this._getGlobalServer(this._parseDSN(options.dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/?' + encodedOptions.join('&');\n (_document.head || _document.body).appendChild(script);\n },\n\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 _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name || ''}\n }\n },\n originalCallback\n );\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(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'handleEvent',\n handler: (fn && fn.name) || ''\n }\n }\n },\n fn.handleEvent\n );\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(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: (fn && fn.name) || ''\n }\n }\n },\n fn,\n before\n ),\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(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'requestAnimationFrame',\n handler: (orig && orig.name) || ''\n }\n }\n },\n cb\n )\n );\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(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: (orig && orig.name) || ''}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: (orig && orig.name) || ''\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\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(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\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 transaction: fileurl\n },\n options\n );\n\n var ex = data.exception.values[0];\n if (ex.type == null && ex.value === '') {\n ex.value = 'Unrecoverable error caught';\n }\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(\n {\n type: 'generic',\n handled: true\n },\n data.exception.mechanism || {}\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","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 return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} 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 var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\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 * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","import shortid from 'shortid'\n\nlet envSettings = {\n development: {\n baseTrackUrl: '//tracker.localhost/',\n trackUrlV2: '//127.0.0.1:8008/',\n leadInitUrl: '//init.localhost/',\n leadInitUrlV2: '//initialize.localhost:8008/',\n proto: 'http:'\n },\n production: {\n baseTrackUrl: '//track.leadhit.io/',\n trackUrlV2: '//track-api.leadhit.io/',\n leadInitUrl: '//init.leadhit.io/',\n leadInitUrlV2: '//initialize.leadhit.io/',\n proto: 'https:'\n },\n watching: {\n baseTrackUrl: '//tracker.localhost/',\n trackUrlV2: '//127.0.0.1:8008/',\n leadInitUrl: '//init.localhost/',\n leadInitUrlV2: '//initialize.localhost:8008/',\n proto: 'http:'\n }\n}\n\nlet Store = function () {\n this.state = {\n 'isFirstVisit': null,\n 'isFirstSubmit': null,\n 'isOfferPage': null,\n 'pageOfferAvailable': null,\n 'proto': envSettings[ENV].proto,\n 'orderButtons': [],\n 'debug': localStorage.getItem('leadhit_secret'),\n 'baseTrackUrl': envSettings[ENV].baseTrackUrl,\n 'trackUrlV2': envSettings[ENV].trackUrlV2,\n 'leadInitUrl': envSettings[ENV].leadInitUrl,\n 'leadInitUrlV2': envSettings[ENV].leadInitUrlV2,\n 'old_browser': !document.getElementsByClassName,\n 'disabledForms': [],\n 'defaultDisabledForms': [\n '#id_popup_leadhit_wrapper_discount_form',\n '#id_popup_leadhit_blub_wrapper_discount_form',\n '#deferred-products__form',\n 'form[action=\"lh_banner\"]',\n 'form[action=\"lh_banner_mobile\"]',\n 'form[action=\"lh_subscribe_target\"]',\n 'form[action=\"lh_subscribe_window\"]',\n '#subscribe__type__window form.subscribe__form',\n '#subscribe__type__target form.subscribe__form'\n ],\n 'domain': '',\n 'pageID': shortid.generate(),\n 'params': { 'popup': false },\n 'tickInterval': 60000,\n '__forms': [], // form submits storage\n 'siteSettings': {},\n 'existingForms': [],\n 'formFields': [\n {\n 'name': 'name',\n 'title': 'Имя'\n },\n {\n 'name': 'last_name',\n 'title': 'Фамилия'\n },\n {\n 'name': 'email',\n 'title': 'Почта'\n },\n {\n 'name': 'sex',\n 'title': 'Пол'\n },\n {\n 'name': 'birthday',\n 'title': 'Дата рождения'\n },\n {\n 'name': 'phone',\n 'title': 'Телефон'\n },\n {\n 'name': 'index',\n 'title': 'Индекс'\n },\n {\n 'name': 'region',\n 'title': 'Регион'\n },\n {\n 'name': 'country',\n 'title': 'Страна'\n },\n {\n 'name': 'city',\n 'title': 'Город'\n },\n {\n 'name': 'address',\n 'title': 'Адрес'\n },\n {\n 'name': 'fax',\n 'title': 'Факс'\n },\n {\n 'name': 'position',\n 'title': 'Должность'\n },\n {\n 'name': 'company',\n 'title': 'Название компании'\n },\n {\n 'name': 'order_id',\n 'title': 'Номер заказа'\n },\n {\n 'name': 'misc',\n 'title': 'Дополнительная информация'\n },\n {\n 'name': 'cart_sum',\n 'title': 'Сумма заказа'\n },\n {\n 'name': 'Not used',\n 'title': 'Не используется'\n },\n {\n 'name': 'sub_type',\n 'title': 'Тип подписки'\n },\n {\n 'name': 'discount_size',\n 'title': 'Размер скидки'\n },\n {\n 'name': 'add_1',\n 'title': 'Дополнительное поле - 1'\n },\n {\n 'name': 'add_2',\n 'title': 'Дополнительное поле - 2'\n },\n {\n 'name': 'add_3',\n 'title': 'Дополнительное поле - 3'\n },\n {\n 'name': 'add_4',\n 'title': 'Дополнительное поле - 4'\n },\n {\n 'name': 'add_5',\n 'title': 'Дополнительное поле - 5'\n },\n {\n 'name': 'hidden',\n 'title': 'Скрыто от пользователя'\n }\n ],\n 'editableForm': null\n }\n}\n\nexport default new Store()\n","\nclass Utils {\n checkIsValidObjectIdForMongoDB (id) {\n return typeof id === 'string' && /^[0-9a-fA-F]{24}$/.test(id)\n }\n\n hashCode (str) {\n var hash = 0\n\n if (str.length === 0) {\n return hash\n }\n\n for (let i = 0; i < str.length; i++) {\n let char = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash // Convert to 32bit integer\n }\n return hash\n }\n\n // Return uid in MongoDB ObjectID format\n genUID () {\n return 'xxxxxxxxxxxxxxxxxxxxxxxx'.replace(/x/g, function () {\n var rand\n try {\n rand = crypto.getRandomValues((new Uint8Array(1)))[0] % 16\n } catch (e) {\n rand = Math.floor(Math.random() * 16)\n }\n return rand.toString(16)\n })\n }\n\n setFormIdToForms () {\n let forms = document.getElementsByTagName('form')\n for (let i = 0; i < forms.length; i++) {\n let form = forms[i]\n if (!form._lh_formid) {\n // Set unique id on form\n form._lh_formid = this.genUID()\n }\n }\n }\n\n getElemValue (el) {\n switch (el.nodeName.toUpperCase()) {\n case 'INPUT': {\n switch (el.type.toLowerCase()) {\n case 'checkbox':\n case 'radio':\n if (el.checked) {\n return el.value\n }\n break\n case 'text':\n case 'email':\n case 'hidden':\n case 'submit':\n case 'button':\n case 'tel':\n case 'image':\n // dirty hack for preventing write `dumb` values to lead profile.\n if ((el.value === '+7 (___) ___-__-__') || (el.value === '(___)___-__-__')) {\n return ''\n }\n return el.value\n default: {\n return el.value\n }\n }\n break\n }\n case 'TEXTAREA': {\n return el.value\n }\n case 'SELECT': {\n if (el.type.toLowerCase() !== 'select-multiple') {\n if (el.options[el.selectedIndex]) {\n return el.options[el.selectedIndex].text\n } else {\n return ''\n }\n }\n break\n }\n default: {\n break\n }\n }\n return ''\n }\n\n checkformsWithHashedFields (form) {\n for (var formSelector in formsWithHashedFields) {\n if (form === document.querySelector(formSelector)) {\n return formSelector\n }\n }\n return false\n }\n\n makeQuery (params) {\n // Escape params and generate query string\n\n var query = ''\n for (let key in params) {\n query += encodeURIComponent(key) + '=' + encodeURIComponent(params[key]) + '&'\n }\n return query.replace(/&$/, '')\n }\n\n readCookie (name) {\n if (document.cookie.length > 0) {\n let offset = document.cookie.indexOf(name + '=')\n if (offset !== -1) {\n offset = offset + name.length + 1\n let tail = document.cookie.indexOf(';', offset)\n if (tail === -1) tail = document.cookie.length\n return unescape(document.cookie.substring(offset, tail))\n }\n }\n return null\n }\n\n setCookie (name, value, expires, path, domain, secure) {\n path = '/'\n\n if (!name || !value) {\n return false\n }\n\n var str = name + '=' + encodeURIComponent(value)\n\n if (expires) {\n str += '; expires=' + expires.toUTCString()\n }\n\n if (path) {\n str += '; path=' + path\n }\n\n if (domain) {\n str += '; domain=' + domain\n } else {\n str += '; domain=.' + window.location.hostname.replace('www.', '')\n }\n\n if (secure) {\n str += '; secure'\n }\n\n document.cookie = str\n\n return true\n }\n\n createCookie (name, value, minutes, esc) {\n var date = new Date()\n date.setTime(date.getTime() + minutes * 1000 * 60)\n if (esc) {\n value = escape(value)\n }\n var rootDomain = location.hostname.split('.').reverse().slice(0, 2).reverse().join('.')\n\n if (window.hasOwnProperty('lh_tracker_for_current_host') && window.lh_tracker_for_current_host === true) {\n document.cookie = name + '=' + value + ';path=/' + ((minutes === null) ? '' : ';expires=' + date.toUTCString())\n } else {\n var cookie = document.cookie = name + '=' + value + ';path=/;domain=.' + rootDomain + ((minutes === null) ? '' : ';expires=' + date.toUTCString())\n // get short part 'name=value' of full cookie value\n var shortCookie = cookie.split(';')[0]\n var isCookieCreated = document.cookie.indexOf(shortCookie) !== -1\n // if cookie was not saved, try to create it on third level domain\n if (!isCookieCreated) {\n var thirdLevelDomain = location.hostname.split('.').reverse().slice(0, 3).reverse().join('.')\n document.cookie = name + '=' + value + ';path=/;domain=.' + thirdLevelDomain + ((minutes === null) ? '' : ';expires=' + date.toUTCString())\n }\n }\n }\n\n createComplexCookie (name, values, minutes, esc) {\n var date = new Date()\n date.setTime(date.getTime() + minutes * 1000 * 60)\n var value = ''\n for (let i = 0; i < values.length; i++) {\n if (esc) {\n values[i] = escape(values[i])\n }\n }\n value = values.join('|')\n var rootDomain = location.hostname.split('.').reverse().slice(0, 2).reverse().join('.')\n\n if (window.hasOwnProperty('lh_tracker_for_current_host') && window.lh_tracker_for_current_host === true) {\n document.cookie = name + '=' + value + ';path=/' + ((minutes === null) ? '' : ';expires=' + date.toUTCString())\n } else {\n var cookie = document.cookie = name + '=' + value + ';path=/;domain=.' + rootDomain + ((minutes === null) ? '' : ';expires=' + date.toUTCString())\n // get short part 'name=value' of full cookie value\n var shortCookie = cookie.split(';')[0]\n var isCookieCreated = document.cookie.indexOf(shortCookie) !== -1\n // if cookie was not saved, try to create it on third level domain\n if (!isCookieCreated) {\n var thirdLevelDomain = location.hostname.split('.').reverse().slice(0, 3).reverse().join('.')\n document.cookie = name + '=' + value + ';path=/;domain=.' + thirdLevelDomain + ((minutes === null) ? '' : ';expires=' + date.toUTCString())\n }\n }\n }\n\n closestByTagName (el, tagName) {\n // Traverse the DOM up with a while loop\n while (('' + el.tagName).toLowerCase() !== tagName) {\n // Increment the loop to the parent node\n el = el.parentNode\n if (!el) {\n return null\n }\n }\n // At this point, the while loop has stopped and `el` represents the element that has\n // the tag name you specified in the second parameter of the function `tagName`\n\n // Then return the matched element\n return el\n }\n\n getReferrer () {\n if (this.getURLParameter('lhsource') === 'recommendations') {\n return 'recommendations'\n }\n\n let leadhitMessageID = this.getURLParameter('lh_message_id')\n if (leadhitMessageID) {\n return `mail_${leadhitMessageID}`\n }\n\n if (this.getURLParameter('_openstat')) {\n return 'yad'\n }\n\n if (this.getURLParameter('gclid')) {\n return 'adwords'\n }\n if (this.getURLParameter('utm_source') === 'telegram') {\n return 'telegram'\n }\n\n let leadhitCampaign = this.getURLParameter('lh_campaign')\n if (leadhitCampaign) {\n return `lh_campaign_${leadhitCampaign}`\n }\n\n if (document.referrer.indexOf(window.location.origin) === 0) {\n return 'inner'\n }\n\n if (document.referrer.length === 0) {\n return 'direct'\n }\n return new URL(document.referrer).origin\n }\n\n getHostname (url) {\n url = url.toString()\n url = url.replace('/www.', '/')\n let m = ((url || '') + '').match(/^https?:\\/\\/[^/]+/)\n return m ? m[0] : ''\n }\n\n getURLParameter (name, str) {\n let url = str || location.search\n return decodeURI((RegExp(name + '=' + '(.+?)(&|$)').exec(url) || [, ''])[1]) // eslint-disable-line\n }\n\n SetDiffTime (xhr) {\n let lhDiffTime = Date.parse(xhr.headers.map.date) - Date.now()\n localStorage.setItem('lhDiffTime', lhDiffTime)\n }\n\n detectChromeAutoFill (event) {\n if (window.navigator.userAgent.indexOf('Chrome') > -1) {\n let eventType = typeof event.inputType\n let targetType = event.target.type\n let nodeName = event.target.nodeName\n return nodeName === 'INPUT' && targetType !== 'checkbox' && eventType === 'undefined'\n }\n\n return false\n }\n}\n\nexport default new Utils()\n","import Utils from './Utils'\nimport { fetch as fetchPolyfill } from 'whatwg-fetch'\n\nclass Leadhit {\n constructor (raven, store) {\n this.description = 'Main Leadhit object'\n this.raven = raven\n this.store = store\n this.fetch = fetchPolyfill\n\n this.isWidgetSystemInitialized = false\n\n let GETqueryDict = {}\n\n location.search.substr(1).split('&').forEach(function (item) {\n GETqueryDict[item.split('=')[0]] = item.split('=')[1]\n })\n\n this.GETqueryDict = GETqueryDict\n\n // IE polyfill for the CustomEvent constructor\n if (typeof window.CustomEvent === 'function') {\n // If not IE\n this.CustomEvent = window.CustomEvent\n } else {\n let customEvent = function (event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }\n var evt = document.createEvent('CustomEvent')\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n return evt\n }\n\n customEvent.prototype = window.Event.prototype\n\n this.CustomEvent = customEvent\n }\n }\n // Add event listener\n addEvent (elem, evType, fn) {\n let elems = []\n\n if (Object.prototype.toString.call(elem) === '[object Array]') {\n elems = elem\n } else {\n elems = [elem]\n }\n\n for (let i = 0; i < elems.length; i++) {\n elem = elems[i]\n\n if (elem.addEventListener) {\n elem.addEventListener(evType, fn, false)\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + evType, fn)\n } else {\n elem['on' + evType] = fn\n }\n }\n }\n\n // Add event listener by selector\n addEventLive (elementQuerySelector, eventType, cb) {\n document.addEventListener(eventType, function (event) {\n var qs = document.querySelectorAll(elementQuerySelector)\n if (qs) {\n var el = event.target\n var index = -1\n while (el && ((index = Array.prototype.indexOf.call(qs, el)) === -1)) {\n el = el.parentElement\n }\n\n if (index > -1) {\n cb.call(el, event)\n }\n }\n })\n }\n\n CustomEvent () {\n // This defines in constructor\n return false\n }\n\n readCookie (name) {\n // Backward compatibility\n return Utils.readCookie(name)\n }\n\n setCookie (name, value, expires, path, domain, secure) {\n return Utils.setCookie(name, value, expires, path, domain, secure)\n }\n\n getUID () {\n return this.readCookie('_lhtm_u')\n }\n\n genUID () {\n // Backward compatibility\n return Utils.genUID()\n }\n\n getVisitId () {\n let sess = this.readCookie('_lhtm_r')\n if (sess) {\n return sess.split('|')[1]\n } else {\n return window.lh_vid\n }\n }\n\n getURLParameter (name, str) {\n return Utils.getURLParameter(name, str)\n }\n\n getReferrer () {\n return Utils.getReferrer()\n }\n\n makeQuery (params) {\n // Backward compatibility\n return Utils.makeQuery(params)\n }\n\n addToCart (itemUrl, itemsCount) {\n try {\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('add_to_cart') && this.store.state.siteSettings.next_vers_features.add_to_cart === true) {\n let cartParams = {\n item_id: '0',\n item_url: itemUrl || document.location.toString(),\n event_type: itemUrl ? 'catalog' : 'item',\n lead_id: this.getUID(),\n visit_id: this.getVisitId(),\n site_id: window.lh_clid\n }\n if (itemsCount) {\n cartParams.items_count = itemsCount\n }\n\n let url = this.store.state.proto + this.store.state.trackUrlV2 + 'add_to_cart'\n this.sendBeacon(url, JSON.stringify(cartParams))\n } else {\n var cartParams = {\n item_id: '0',\n item_url: itemUrl || document.location.toString(),\n event_type: itemUrl ? 'catalog' : 'item',\n uid: this.getUID(),\n vid: this.getVisitId(),\n clid: window.lh_clid // FIXME: This is unobvious\n }\n if (itemsCount) {\n cartParams.items_count = itemsCount\n }\n this.loadScript(\n this.store.state.proto + this.store.state.baseTrackUrl + 'lh_stat/add_to_cart?' + Utils.makeQuery(cartParams),\n () => {}\n )\n }\n let cartEvent = new this.CustomEvent('addToCartLH')\n document.dispatchEvent(cartEvent)\n } catch (e) {\n this.debugLog(e)\n }\n }\n\n addToFavorites (itemUrl) {\n try {\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('add_to_favorites') && this.store.state.siteSettings.next_vers_features.add_to_favorites === true) {\n let cartParams = {\n item_id: '0',\n item_url: itemUrl || document.location.toString(),\n event_type: itemUrl ? 'catalog' : 'item',\n lead_id: this.getUID(),\n visit_id: this.getVisitId(),\n site_id: window.lh_clid\n }\n let url = this.store.state.proto + this.store.state.trackUrlV2 + 'add_to_favorites'\n this.sendBeacon(url, JSON.stringify(cartParams))\n } else {\n var cartParams = {\n clid: window.lh_clid, // FIXME: This is unobvious\n uid: this.getUID(),\n item_url: itemUrl || document.location.toString()\n }\n this.loadScript(\n this.store.state.proto + this.store.state.baseTrackUrl + 'lh_stat/add_to_favorites?' + Utils.makeQuery(cartParams),\n () => {}\n )\n }\n let favoritesEvent = new this.CustomEvent('addToFavoritesLH')\n document.dispatchEvent(favoritesEvent)\n } catch (e) {\n this.debugLog(e)\n }\n }\n\n setVisitNumberWhenCartDataWasAdded () {\n let currentVisit = localStorage.getItem('_lh_visits_count')\n\n localStorage.setItem('_lh_visit_number_when_cart_data_was_added', currentVisit)\n }\n\n createCookie (name, value, minutes, esc) {\n return Utils.createCookie(name, value, minutes, esc)\n }\n\n getStringByQS (selector) {\n var el = document.querySelector(selector)\n return (el ? el.innerText || el.innerHTML || el.data || el.value : '').replace(/\\u00a0/g, ' ')\n }\n\n getStringByXPath (query) {\n try {\n var elCartSum = document.evaluate(\n window.lh_vars['cart_sum_query'], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null\n ).singleNodeValue\n return elCartSum.innerText || elCartSum.innerHTML || elCartSum.data\n } catch (e) {\n return ''\n }\n }\n\n loadScript (url, cb) {\n var sc = document.createElement('script')\n sc.type = 'text/javascript'\n sc.src = url\n sc.charset = 'utf-8'\n var head = document.getElementsByTagName('head')[0]\n sc.onreadystatechange = sc.onload = cb\n head.appendChild(sc)\n }\n\n log (str) {\n console.log((new Date()).toISOString() + ' :: ' + str)\n }\n\n debugLog (message) {\n if (this.store.state.debug) {\n this.log(message)\n }\n }\n\n nearest (el, query) {\n if (el.tagName.toLowerCase() === 'html' || !el.parentNode) return false\n\n // checks current element itself\n var els = el.parentNode.querySelectorAll(query)\n for (let i = 0; i < els.length; i++) {\n if (els[i] === el) {\n return el\n }\n }\n\n let result = el.querySelector(query)\n return result || this.nearest(el.parentElement, query)\n }\n\n saveFormToLocalStorage (form) {\n if (!form) {\n return\n }\n\n var lhDiffTime = localStorage.getItem('lhDiffTime')\n\n if (!form._lh_formid) {\n form._lh_formid = Utils.genUID()\n }\n\n var params = {}\n\n for (let el of form.elements) {\n if (el.type !== 'password' && el.name) {\n params['f_' + el.name] = Utils.getElemValue(el)\n }\n }\n\n let leadhitForm = {\n query: Utils.makeQuery(params),\n action: (form.attributes['action'] || { value: '' }).value,\n save_time: Date.now()\n }\n\n if (this.store.state.orderButtons.length > 0) {\n for (let i = 0; i < this.store.state.orderButtons.length; i++) {\n if (form === this.nearest(this.store.state.orderButtons[i], 'form')) {\n leadhitForm['lh_order'] = true\n }\n }\n }\n\n leadhitForm['form_added_time'] = parseInt(lhDiffTime) + Date.now()\n\n let formKey = `LeadhitForm:${this.store.state.pageID}:${form._lh_formid}`\n\n localStorage.setItem(formKey, JSON.stringify(leadhitForm))\n }\n\n saveItemUrl (name, url) {\n var ItemUrl = JSON.parse(localStorage['lhItemUrl'])\n ItemUrl[name] = url\n localStorage['lhItemUrl'] = JSON.stringify(ItemUrl)\n }\n\n sendWidgetStats (wid, event, payload) {\n var params = {\n 'wid': wid,\n 'etype': event,\n 'uid': this.getUID(),\n 'vid': this.getVisitId(),\n 'clid': window.lh_clid\n }\n\n let widgetEvent = new this.CustomEvent('widgetStatsSended', {\n bubbles: false,\n cancelable: false,\n detail: params\n })\n document.dispatchEvent(widgetEvent)\n\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('widgets') && this.store.state.siteSettings.next_vers_features.widgets === true) {\n let url = this.store.state.proto + this.store.state.trackUrlV2 + 'widgets_stat'\n let requestBody = {\n widget_id: wid,\n site_id: window.lh_clid,\n lead_id: this.getUID(),\n visit_id: this.getVisitId(),\n event: event,\n payload: payload || {}\n }\n return this.sendBeacon(url, JSON.stringify(requestBody))\n } else {\n var url = this.store.state.proto + this.store.state.baseTrackUrl + 'lh_stat/widgets?' + Utils.makeQuery(params)\n return this.sendBeacon(url, JSON.stringify({ payload: payload || {} }))\n }\n }\n\n sendBeacon (url, data) {\n if (!!navigator && !!navigator.sendBeacon && !navigator.userAgent.indexOf('Chrome')) {\n return navigator.sendBeacon(url, data)\n } else {\n return this.fetch(url, { method: 'POST', body: data })\n }\n }\n\n checkDisabledForms () {\n for (let i = 0; i < this.disabledSelectors.length; i++) {\n var disabledForms = document.querySelectorAll(this.disabledSelectors[i])\n var disabledForm = document.querySelector(this.disabledSelectors[i])\n if (disabledForm && this.store.state.disabledForms.indexOf(disabledForm) === -1) {\n for (let i = 0; i <= disabledForms.length; i++) {\n this.store.state.disabledForms.push(disabledForms[i])\n }\n }\n }\n }\n\n wrapToForm (el, formAction) {\n var form = document.createElement('form')\n form.action = formAction || ''\n el.parentNode.insertBefore(form, el)\n form.appendChild(el)\n return form\n }\n\n async saveElementForm (element) {\n var form = (Utils.closestByTagName(element, 'form'))\n await this.checkDisabledForms()\n if (this.store.state.disabledForms.indexOf(form) === -1) {\n this.saveFormToLocalStorage(form)\n }\n }\n\n sendFormToLeadhit (leadhitForm, key, submitted) {\n var params = {}\n\n let splittedKey = key.split(':')\n\n params['url'] = location.toString().split('#')[0]\n params['uid'] = this.getUID()\n params['vid'] = this.getVisitId()\n params['ref'] = Utils.getReferrer()\n params['formid'] = splittedKey[2]\n\n try {\n params['f_cart_sum'] = this.getStringByQS(window.lh_vars['cart_sum_query'])\n } catch (e) {\n params['f_cart_sum'] = ''\n this.raven.captureException(e)\n }\n\n if (\n params.hasOwnProperty('f_cart_sum') && (typeof params['f_cart_sum'] === 'undefined' || params['f_cart_sum'] === '')) {\n delete params['f_cart_sum']\n }\n\n if (submitted || !leadhitForm['lh_order']) {\n params['action'] = leadhitForm['action'] || `http://${document.location.host.replace('www.', '')}${document.location.pathname}`\n } else {\n params['action'] = 'lhAutoForms'\n }\n\n let formUrl = this.store.state.proto + this.store.state.baseTrackUrl +\n 'lh_stat/lead_form?' + leadhitForm['query'] + '&' + Utils.makeQuery(params) +\n '&clid=' + window.lh_clid + '&form_added_time=' + leadhitForm['form_added_time']\n\n // drop too long urls\n if (formUrl.length >= 2000) {\n localStorage.removeItem(key)\n return false\n }\n\n // drop empty forms\n if (!leadhitForm['query']) {\n localStorage.removeItem(key)\n } else {\n this.fetch(formUrl).then(function (response) {\n if (response.headers.get('content-type') === 'text/javascript') {\n response.text().then(() => {\n let cookieNames = ['lh_banner_closed', 'lh_mobile_banner_closed', 'lh_wheel_fortune_closed', 'lh_scratch_closed']\n let date = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365)\n for (let j = 0; j < cookieNames.length; j++) {\n Utils.createCookie(cookieNames[j], 1, date.toUTCString(), false)\n }\n }).catch(\n function (e) {\n this.raven.captureException(e)\n }.bind(this)\n )\n }\n this.debugLog('Form sent')\n localStorage.removeItem(key)\n }.bind(this)).catch(\n function (e) {\n localStorage.removeItem(key)\n this.raven.captureException(e)\n }.bind(this)\n )\n }\n }\n\n newSendFormToLeadhit (leadhitForm, key, submitted) {\n if (!leadhitForm['query']) {\n localStorage.removeItem(key)\n } else {\n let splittedKey = key.split(':')\n let url = this.store.state.proto + this.store.state.trackUrlV2 + 'save/lead/form'\n let requestBody = {\n site_id: window.lh_clid,\n lead_id: this.getUID(),\n form_id: splittedKey[2],\n url: location.toString().split('#')[0],\n referrer: this.getReferrer(),\n form_fields: {},\n time_added: leadhitForm['form_added_time']\n }\n leadhitForm['query'] = decodeURIComponent(leadhitForm['query'])\n let fields = leadhitForm['query'].split('&')\n for (let i = 0; i < fields.length; i++) {\n let field = fields[i].split('=')\n requestBody.form_fields[field[0]] = field[1]\n }\n\n if (submitted || !leadhitForm['lh_order']) {\n requestBody.action = leadhitForm['action'] || `http://${document.location.host.replace('www.', '')}${document.location.pathname}`\n } else {\n requestBody.action = 'lhAutoForms'\n }\n\n this.fetch(url, { method: 'POST', body: JSON.stringify(requestBody) })\n .then(function (response) {\n response.text()\n .then(function (response) {\n try {\n response = JSON.parse(response)\n if (response.hasOwnProperty('disable_banner') && response.disable_banner === true) {\n let cookieNames = ['lh_banner_closed', 'lh_mobile_banner_closed', 'lh_wheel_fortune_closed', 'lh_scratch_closed']\n let date = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365)\n for (let j = 0; j < cookieNames.length; j++) {\n Utils.createCookie(cookieNames[j], 1, date.toUTCString(), false)\n }\n }\n this.debugLog('Form sent')\n localStorage.removeItem(key)\n } catch (e) {\n localStorage.removeItem(key)\n this.raven.captureException(e)\n }\n }.bind(this))\n .catch(function (e) {\n localStorage.removeItem(key)\n this.raven.captureException(e)\n }.bind(this))\n }.bind(this))\n .catch(function (e) {\n localStorage.removeItem(key)\n this.raven.captureException(e)\n }.bind(this))\n }\n }\n\n sendFormsFromLocalStorage (submitted) {\n var localKeys = Object.keys(localStorage)\n for (let i = 0; i < localKeys.length; i++) {\n if (localKeys[i].indexOf(`LeadhitForm:${this.store.state.pageID}`) !== -1) {\n let leadhitForm = localStorage.getItem(localKeys[i])\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('save_lead_form') && this.store.state.siteSettings.next_vers_features.save_lead_form === true) {\n this.newSendFormToLeadhit(JSON.parse(leadhitForm), localKeys[i], submitted)\n } else {\n this.sendFormToLeadhit(JSON.parse(leadhitForm), localKeys[i], submitted)\n }\n }\n }\n }\n\n checkOrSetOrderButtons () {\n if (typeof orderSelectors === 'undefined') {\n console.warn('Leadhit: Variable orderSelectors is not defined')\n return\n }\n\n for (let i = 0; i < orderSelectors.length; i++) {\n var orderButton = document.querySelector(orderSelectors[i])\n if (orderButton && this.store.state.orderButtons.indexOf(orderButton) === -1) {\n this.store.state.orderButtons.push(orderButton)\n }\n }\n }\n\n async sendOrderForm (orderButton) {\n var form = this.nearest(orderButton, 'form')\n await this.checkDisabledForms()\n if (this.store.state.disabledForms.indexOf(form) === -1) {\n this.saveFormToLocalStorage(form)\n this.sendFormsFromLocalStorage(true)\n }\n }\n\n initWidgetSystem () {\n if (this.isWidgetSystemInitialized) {\n return\n }\n this.isWidgetSystemInitialized = true\n var widgetsSrc = 'https://media.leadhit.io/scripts/widgetsystem/bundle.js'\n if (localStorage.getItem('leadhit_widgets_test') === 'on') {\n widgetsSrc = 'https://media.dev.leadhit.io/widgetsystem/bundle.js'\n } else if (localStorage.getItem('leadhit_widgetsystem_path') !== null) {\n widgetsSrc = localStorage.getItem('leadhit_widgetsystem_path')\n }\n if (document.querySelector(`[src=\"${widgetsSrc}\"]`)) {\n return\n }\n\n var lh = document.createElement('script')\n lh.type = 'text/javascript'\n lh.async = true\n lh.src = widgetsSrc\n var s = document.getElementsByTagName('script')[0]\n s.parentNode.insertBefore(lh, s)\n }\n\n setFormListeners () {\n Utils.setFormIdToForms()\n if (typeof (disabledSelectors) !== 'undefined') {\n this.disabledSelectors = disabledSelectors.concat(this.store.state.defaultDisabledForms)\n } else {\n this.disabledSelectors = this.store.state.defaultDisabledForms\n }\n\n document.removeEventListener('mouseup', this.mouseupFormListner.bind(this))\n document.addEventListener('mouseup', this.mouseupFormListner.bind(this))\n\n // TODO: We strongly need to check this\n document.removeEventListener('input', this.inputFormListner.bind(this))\n document.addEventListener('input', this.inputFormListner.bind(this))\n\n // TODO: We strongly need to check this\n document.removeEventListener('select', this.selectFormListner.bind(this))\n document.addEventListener('select', this.selectFormListner.bind(this))\n\n clearInterval(this.store.state.intervalSendFormsFromLocalStorage)\n this.store.state.intervalSendFormsFromLocalStorage = null\n this.store.state.intervalSendFormsFromLocalStorage = setInterval(() => { this.sendFormsFromLocalStorage(false) }, 2000)\n }\n\n mouseupFormListner (event) {\n this.checkOrSetOrderButtons()\n if (this.store.state.orderButtons.indexOf(event.target) !== -1) {\n this.sendOrderForm(event.target)\n }\n }\n\n async inputFormListner (event) {\n if (Utils.detectChromeAutoFill(event)) {\n this.debugLog('Chrome autofill dropped')\n return false\n }\n\n var form = Utils.closestByTagName(event.target, 'form')\n await this.checkDisabledForms()\n if (this.store.state.disabledForms.indexOf(form) === -1) {\n this.saveFormToLocalStorage(form)\n }\n }\n\n async selectFormListner (event) {\n var form = Utils.closestByTagName(event.target, 'form')\n await this.checkDisabledForms()\n if (this.store.state.disabledForms.indexOf(form) === -1) {\n this.saveFormToLocalStorage(form)\n }\n }\n\n loadSiteVariables () {\n var url = this.store.state.proto + this.store.state.baseTrackUrl + 'lh_stat/lh_vars?' + 'clid=' + window.lh_clid\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('widgets') && this.store.state.siteSettings.next_vers_features.widgets === true) {\n url = this.store.state.proto + this.store.state.trackUrlV2 + 'get/lh_vars?site_id=' + window.lh_clid\n }\n this.fetch(url).then((response) => {\n response.text().then((text) => {\n try {\n eval.call(window, text) // eslint-disable-line\n } catch (err) {\n console.log('error in \"lh_stat/lh_vars\" response text: ', err)\n }\n this.checkLeadEmailExistAndSetToLocalstorage().then(() => {\n this.setFormListeners()\n this.initWidgetSystem()\n })\n }).catch((e) => {\n this.debugLog(e)\n }\n )\n }).catch((e) => {\n this.debugLog(e)\n }\n )\n }\n\n checkLeadEmailExistAndSetToLocalstorage () {\n return new Promise(resolve => {\n if (window.hasOwnProperty('need_request_check_lead_email_exist') && window.need_request_check_lead_email_exist === true) {\n const checkID = function () {\n let leadId = this.getUID()\n\n if (!leadId) {\n if (!this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage) {\n this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage = setInterval(checkID, 500)\n setTimeout(function () {\n if (this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage) {\n clearInterval(this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage)\n this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage = null\n }\n }.bind(this), 3000)\n }\n } else {\n if (this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage) {\n clearInterval(this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage)\n this.store.state.timerCheckLeadEmailExistAndSetToLocalstorage = null\n }\n let url = this.store.state.proto + this.store.state.trackUrlV2 + 'check/lead/email_exist?lead_id=' + leadId + '&site_id=' + window.lh_clid\n this.fetch(url).then((response) => {\n response.text().then((result) => {\n result = JSON.parse(result)\n localStorage.setItem('lh_lead_email_exist', result.email_exist)\n resolve()\n })\n })\n }\n }.bind(this)\n checkID()\n } else {\n resolve()\n }\n })\n }\n\n consumeFormsFromClosedPages () {\n let localKeys = Object.keys(localStorage)\n for (let key of localKeys) {\n let anotherPage = key.indexOf(this.store.state.pageID) === -1\n let isLeadhitForm = key.indexOf('LeadhitForm') !== -1\n if (isLeadhitForm && anotherPage) {\n let currentForm = JSON.parse(localStorage.getItem(key))\n if (Date.now() - currentForm['save_time'] > 10000) {\n localStorage.removeItem(key)\n let splittedKey = key.split(':')\n splittedKey[1] = this.store.state.pageID\n currentForm['save_time'] = Date.now()\n localStorage.setItem(splittedKey.join(':'), JSON.stringify(currentForm))\n this.debugLog('form consumed')\n }\n }\n }\n }\n\n processVisit () {\n try {\n var params = {}\n\n let referrer = Utils.getReferrer()\n\n if (this.store.state.isFirstVisit) {\n // Get leadId from url if possible(used in the mailing)\n let leadId = Utils.getURLParameter('lead_id')\n if (!Utils.checkIsValidObjectIdForMongoDB(leadId)) {\n this.getLeadIdRequest()\n .then(function (response) {\n if (response.status === 200) {\n response.text()\n .then(function (text) {\n try {\n leadId = JSON.parse(text)[window.lh_clid]\n this.setLeadIdCookies(leadId, params, referrer)\n } catch (error) {\n this.debugLog('error in parse response text ' + error)\n }\n }.bind(this))\n .catch((e) => {\n this.debugLog('Error in get lead id: ' + e)\n this.debugLog(e)\n })\n } else {\n this.debugLog('Error in get lead id: ' + response)\n }\n }.bind(this))\n .catch((error) => {\n this.debugLog('Error in get lead id: ' + error)\n this.debugLog(error)\n })\n } else {\n this.setLeadIdCookies(leadId, params, referrer)\n }\n } else {\n this.callbacksIfExistLeadId(params, referrer)\n }\n } catch (e) {\n this.debugLog('Error in processVisit catch' + e)\n this.debugLog(e)\n }\n }\n\n getLeadIdRequest () {\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('initialize') && this.store.state.siteSettings.next_vers_features.initialize === true) {\n let urlLeadId = this.store.state.proto + this.store.state.leadInitUrlV2 + 'initialize?site_id=' + window.lh_clid\n return this.fetch(urlLeadId)\n } else {\n let urlLeadId = this.store.state.proto + this.store.state.leadInitUrl + 'initialize?site_id=' + window.lh_clid\n return this.fetch(urlLeadId, {\n credentials: 'include'\n })\n }\n }\n\n setLeadIdCookies (leadId, params, referrer) {\n Utils.createCookie('_lhtm_u', leadId, 60 * 24 * 3650, false)\n let oldVisitId = Utils.genUID()\n Utils.createComplexCookie('_lhtm_r', [referrer, oldVisitId], 60 * 24 * 3650, true)\n window.lh_vid = oldVisitId\n window.lh_ref = referrer\n\n this.callbacksIfExistLeadId(params, referrer)\n }\n\n callbacksIfExistLeadId (params, referrer) {\n this.sendStatCounterServer(params, referrer)\n this.updateLeadState()\n this.startTicker()\n }\n\n sendStatCounterServer (params, referrer) {\n // if (this.store.state.isSendLhcounter_server) return\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('process_lead_page_load') && this.store.state.siteSettings.next_vers_features.process_lead_page_load === true) {\n let url = this.store.state.proto + this.store.state.trackUrlV2 + 'handle_lead_page_load'\n let requestBody = {\n site_id: window.lh_clid,\n lead_id: this.getUID(),\n referer: referrer,\n page: window.location.href\n }\n if (localStorage.getItem('_lh_stock_id')) {\n requestBody.stock_id = localStorage.getItem('_lh_stock_id')\n }\n this.fetch(url, { method: 'POST', body: JSON.stringify(requestBody) })\n } else {\n params['ref'] = referrer\n params['vid'] = this.getVisitId()\n params['uid'] = this.getUID()\n params['location'] = document.location.toString().split('#')[0]\n if (localStorage.getItem('_lh_stock_id')) {\n params['stock_id'] = localStorage.getItem('_lh_stock_id')\n }\n var i = document.createElement('img')\n var trackUrl = this.store.state.proto + this.store.state.baseTrackUrl + 'lh_stat/lhcounter_server?' + this.makeQuery(params) + '&clid=' + window.lh_clid\n i.src = trackUrl\n }\n this.debugLog('counter_server request start')\n // this.store.state.isSendLhcounter_server = true\n }\n\n updateLeadState () {\n // С этим куском кода некорректно обновляются номера визитов, пришлось закомментировать\n // let now = new Date().getTime()\n // let lhLastTick = parseInt(localStorage.getItem('_lh_lastTick'))\n // let diff = now - lhLastTick\n // console.log(now, lhLastTick, diff)\n // if (localStorage.getItem('_lh_visits_count') && new Date(diff).getMinutes() < 2) {\n // return\n // }\n var url = this.store.state.proto + this.store.state.baseTrackUrl + 'lh_stat/lead_state?' + 'site_id=' + window.lh_clid + '&lead_id=' + Utils.readCookie('_lhtm_u')\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('lead_state') && this.store.state.siteSettings.next_vers_features.lead_state === true) {\n let params = {\n site_id: window.lh_clid,\n lead_id: Utils.readCookie('_lhtm_u')\n }\n url = this.store.state.proto + this.store.state.trackUrlV2 + 'lead_state?' + this.makeQuery(params)\n }\n this.fetch(url)\n .then(function (response) {\n response.text()\n .then(function (jsonData) {\n try {\n let data = JSON.parse(jsonData)\n if (Object.keys(data).includes('error')) {\n if (data.error === 'Active visit not found' && !this.store.state.timerUpdateLeadState) {\n this.store.state.timerUpdateLeadState = setInterval(this.updateLeadState.bind(this), 500)\n setTimeout(function () {\n clearInterval(this.store.state.timerUpdateLeadState)\n this.store.state.timerUpdateLeadState = null\n }.bind(this), 1500)\n } else {\n this.debugLog(data.error)\n }\n } else {\n clearInterval(this.store.state.timerUpdateLeadState)\n this.store.state.timerUpdateLeadState = null\n Object.keys(data).forEach(function (dataKey) {\n localStorage.setItem(`_lh_${dataKey}`, data[dataKey])\n })\n }\n } catch (error) {\n this.debugLog(error)\n }\n }.bind(this))\n .catch((e) => {\n this.debugLog(e)\n })\n }.bind(this))\n .catch((e) => {\n this.debugLog(e)\n })\n }\n\n sendTick (forced) {\n // Needs to avoid multiple queries from several tabs\n let timeElapse = new Date().getTime() - localStorage.getItem('_lh_lastTick') > this.store.state.tickInterval\n if (timeElapse || forced) {\n localStorage.setItem('_lh_lastTick', new Date().getTime())\n\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('tick') && this.store.state.siteSettings.next_vers_features.tick === true) {\n let params = {\n site_id: window.lh_clid,\n lead_id: this.getUID(),\n visit_id: this.getVisitId()\n }\n\n let url = this.store.state.proto + this.store.state.trackUrlV2 + 'tick?' + this.makeQuery(params)\n\n this.fetch(url)\n .then(function () {\n let lhDiffTime = parseInt(localStorage.getItem('_lh_lastTick')) - new Date().getTime()\n localStorage.setItem('lhDiffTime', lhDiffTime)\n })\n } else {\n let params = {\n 'uid': this.getUID(),\n 'vid': this.getVisitId()\n }\n\n let url = this.store.state.proto + this.store.state.baseTrackUrl + 'lh_stat/tick?' + this.makeQuery(params) + '&clid=' + window.lh_clid\n\n this.fetch(url, { method: 'POST' })\n .then(Utils.SetDiffTime)\n }\n\n this.debugLog('tick sent')\n };\n }\n\n startTicker () {\n this.sendTick(true)\n setInterval(this.sendTick.bind(this), this.store.state.tickInterval)\n }\n\n startCollectorForClosedPagesForms () {\n setInterval(this.consumeFormsFromClosedPages.bind(this), this.store.state.tickInterval)\n }\n\n disableBannerByGET (arg, disablers) {\n if (disablers.indexOf(this.GETqueryDict[arg]) !== -1) {\n var date = new Date()\n var minutes = 3600 * 3600\n var n = (date.getTime()) / 1000\n date.setTime(date.getTime() + (minutes * 60 * 1000))\n Utils.setCookie('lh_banner_filled', n, date)\n }\n }\n\n checkOfferPage () {\n let pageUrl = location.toString().split('#')[0]\n let requestUrl = this.store.state.proto + this.store.state.baseTrackUrl + 'offers/check_availability'\n let nextVersFeaturesWidgets = false\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('widgets') && this.store.state.siteSettings.next_vers_features.widgets === true) {\n nextVersFeaturesWidgets = true\n requestUrl = this.store.state.proto + this.store.state.trackUrlV2 + 'offers/check_availability'\n }\n let state = this.store.state\n var xhr = new XMLHttpRequest()\n xhr.open('POST', requestUrl, true)\n xhr.responseType = 'json'\n xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8')\n xhr.onreadystatechange = function () {\n if (this.readyState !== 4 || !this.response) return\n if (!nextVersFeaturesWidgets) {\n state.isOfferPage = this.response['is_offer']\n state.pageOfferAvailable = this.response['available']\n } else {\n try {\n let responseResult = JSON.parse(this.response)\n state.isOfferPage = responseResult['is_offer']\n state.pageOfferAvailable = responseResult['available']\n } catch (err) {}\n }\n }\n xhr.send(JSON.stringify({\n 'page_url': pageUrl,\n 'site_id': window.lh_clid\n }))\n }\n\n offerPagesCountIncrement () {\n var localStorage = window.localStorage\n if (!localStorage) return\n var lhOfferCounter = localStorage.getItem('lh_offer_pages_count')\n if (!lhOfferCounter) {\n localStorage.setItem('lh_offer_pages_count', 1)\n } else {\n try {\n lhOfferCounter = JSON.parse(lhOfferCounter)\n lhOfferCounter++\n localStorage.setItem('lh_offer_pages_count', lhOfferCounter)\n } catch (error) {}\n }\n }\n\n clientCheckOfferPageAndCount (params) {\n if (params.hasOwnProperty('type')) {\n if (params.type === 'selector') {\n if (params.hasOwnProperty('operator') && params.hasOwnProperty('value')) {\n try {\n var requiredElement = document.querySelector(params.value)\n if (params.operator === 'exist') {\n if (requiredElement) {\n this.offerPagesCountIncrement()\n return true\n } else {\n return false\n }\n } else if (params.operator === 'not_exist') {\n if (!requiredElement) {\n this.offerPagesCountIncrement()\n return true\n } else {\n return false\n }\n }\n } catch (err) {}\n }\n } else if (params.type === 'url') {\n if (params.hasOwnProperty('operator') && params.hasOwnProperty('value')) {\n try {\n var currentUrl = window.location.href\n var regEx = new RegExp(params.value)\n var match = currentUrl.match(regEx)\n if (params.operator === 'match') {\n if (match && match.length > 0) {\n this.offerPagesCountIncrement()\n return true\n } else {\n return false\n }\n } else if (params.operator === 'not_match') {\n if (!match || match.length === 0) {\n this.offerPagesCountIncrement()\n return true\n } else {\n return false\n }\n }\n } catch (err) {}\n }\n }\n }\n }\n\n setCacheKey (key, expireTime) {\n let url = `${this.store.state.proto}${this.store.state.baseTrackUrl}cache/set`\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('widgets') && this.store.state.siteSettings.next_vers_features.widgets === true) {\n url = this.store.state.proto + this.store.state.trackUrlV2 + 'cache/set'\n }\n let requestData = {\n 'key': key\n }\n\n if (expireTime) {\n requestData['expire_time'] = expireTime\n }\n this.sendBeacon(url, JSON.stringify(requestData))\n }\n\n checkCacheKey (key) {\n let url = `${this.store.state.proto}${this.store.state.baseTrackUrl}cache/check`\n if (this.store.state.siteSettings.hasOwnProperty('next_vers_features') && this.store.state.siteSettings.next_vers_features.hasOwnProperty('widgets') && this.store.state.siteSettings.next_vers_features.widgets === true) {\n url = this.store.state.proto + this.store.state.trackUrlV2 + 'cache/check'\n }\n return this.fetch(url, { method: 'POST', body: JSON.stringify({ 'key': key }) })\n }\n\n getUniqueSelector (element, selector) {\n let newElementSelector = ''\n newElementSelector = element.nodeName.toLowerCase()\n\n if (element.hasAttribute('id')) {\n newElementSelector = newElementSelector + '#' + element.id\n }\n if (element.classList && element.classList.length > 0) {\n newElementSelector = newElementSelector + '.' + Array.from(element.classList).join('.')\n }\n\n if (selector.length === 0) {\n selector = newElementSelector + selector\n } else {\n selector = newElementSelector + ' ' + selector\n }\n\n let checkResult = document.querySelectorAll(selector)\n if (checkResult.length === 1) {\n return selector\n } else if (checkResult.length > 1) {\n return this.getUniqueSelector(element.parentNode, selector)\n } else {\n alert('Уникальный селектор для выбранного элемента не был найден!')\n return ''\n }\n }\n checkExistParentFormElementInFormCollector (element) {\n if (element.nodeName === 'FORM') {\n return true\n } else if (element.parentNode) {\n return this.checkExistParentFormElementInFormCollector(element.parentNode)\n } else {\n return false\n }\n }\n addSelectedFieldToFormInFormCollector (selector, type, name) {\n let freeFields = this.getAllFreeFieldsInFormCollector()\n if (freeFields && freeFields.length > 0) {\n let field = {\n name: {\n key: freeFields.some(field => field.name === type) ? type : freeFields[0].name,\n value: name\n },\n alias: {\n key: freeFields.some(field => field.name === type) ? type : freeFields[0].name,\n value: ''\n },\n selector: {\n key: freeFields.some(field => field.name === type) ? type : freeFields[0].name,\n value: selector\n }\n }\n this.store.state.editableForm.fields.push(field)\n console.log('this.store.state.editableForm.fields', this.store.state.editableForm.fields)\n }\n\n this.turnOffFindingElementInPageInFormCollector()\n\n this.renderFormCollectorEditPage()\n }\n turnOffFindingElementInPageInFormCollector () {\n if (document.body.onmouseover) {\n document.body.onmouseover = null\n }\n if (document.body.onmouseout) {\n document.body.onmouseout = null\n }\n if (this.store.state.formCollectorFieldNode) {\n if (this.store.state.formCollectorFieldNode.onclick) {\n this.store.state.formCollectorFieldNode.onclick = null\n }\n this.store.state.formCollectorFieldNode.style.background = this.store.state.formCollectorFieldColor\n this.store.state.formCollectorFieldNode = null\n }\n }\n getInputSelectorInFormCollector (event) {\n event.preventDefault()\n event.stopPropagation()\n\n const name = event.target.name || ''\n const type = event.target.type || ''\n\n let selector = ''\n\n let isFormElement = this.checkExistParentFormElementInFormCollector(event.target.parentNode)\n if (this.store.state.editableForm.hasOwnProperty('standard_form_element')) {\n if (this.store.state.editableForm.standard_form_element === true) {\n if (isFormElement) {\n this.addSelectedFieldToFormInFormCollector(selector, type, name)\n } else {\n alert('Выбранное поле не относится к текущей форме!')\n }\n } else if (this.store.state.editableForm.standard_form_element === false) {\n if (isFormElement) {\n alert('Выбранное поле не относится к текущей форме!')\n } else {\n selector = this.getUniqueSelector(event.target, '')\n this.addSelectedFieldToFormInFormCollector(selector, type, name)\n }\n }\n } else {\n if (isFormElement) {\n this.store.state.editableForm.standard_form_element = true\n } else {\n selector = this.getUniqueSelector(event.target, '')\n this.store.state.editableForm.standard_form_element = false\n }\n this.addSelectedFieldToFormInFormCollector(selector, type, name)\n }\n }\n findFieldMouseoverInFormCollector (event) {\n if (event.target.nodeName !== 'INPUT') return\n\n event.target.onclick = this.getInputSelectorInFormCollector.bind(this)\n\n this.store.state.formCollectorFieldColor = event.target.style.background\n this.store.state.formCollectorFieldNode = event.target\n event.target.style.background = 'rgba(255, 68, 2, 0.5)'\n }\n findFieldMouseoutInFormCollector (event) {\n if (event.target.nodeName !== 'INPUT') return\n\n event.target.style.background = this.store.state.formCollectorFieldColor\n this.store.state.formCollectorFieldNode = null\n event.target.onclick = null\n }\n\n getButtonSelectorInFormCollector (event) {\n event.preventDefault()\n event.stopPropagation()\n\n let selector = this.getUniqueSelector(event.target, '')\n this.store.state.editableForm.by_click.selector = selector\n\n this.turnOffFindingElementInPageInFormCollector()\n\n this.renderFormCollectorEditPage()\n }\n findButtonMouseoverInFormCollector (event) {\n if (event.target.closest('.lh-form-collector-shadow-continer')) return\n event.target.onclick = this.getButtonSelectorInFormCollector.bind(this)\n\n this.store.state.formCollectorFieldColor = event.target.style.background\n this.store.state.formCollectorFieldNode = event.target\n event.target.style.background = 'rgba(255, 68, 2, 0.5)'\n }\n findButtonMouseoutInFormCollector (event) {\n event.target.style.background = this.store.state.formCollectorFieldColor\n this.store.state.formCollectorFieldNode = null\n event.target.onclick = null\n }\n\n getExistingFormById (id) {\n let index = this.store.state.existingForms.findIndex(function (form) {\n if (form.id === id) return true\n else return false\n })\n if (index !== -1) {\n return this.store.state.existingForms[index]\n } else {\n return null\n }\n }\n getAllFreeFieldsInFormCollector () {\n let freeFields = this.store.state.formFields.filter(function (field) {\n let index = this.store.state.editableForm.fields.findIndex(function (existField) {\n if (existField.name.key === field.name) return true\n else return false\n })\n if (index !== -1) return false\n else return true\n }.bind(this))\n return freeFields\n }\n addFieldTypeListSelectInFormCollector () {\n let shadowContainer = document.querySelector('.lh-form-collector-shadow-continer')\n let selectFieldTypeCont = shadowContainer.shadowRoot.querySelectorAll('.lh-form-collector-form-editor-select-field-type')\n\n let freeFields = this.getAllFreeFieldsInFormCollector()\n\n if (selectFieldTypeCont && selectFieldTypeCont.length > 0) {\n Array.from(selectFieldTypeCont).forEach(function (selectFieldTypeElement) {\n let fieldType = selectFieldTypeElement.getAttribute('data-field-type')\n let index = this.store.state.formFields.findIndex(function (formField) {\n if (formField.name === fieldType) return true\n else return false\n })\n\n let freeFieldsItems = ''\n if (freeFields && freeFields.length > 0) {\n freeFieldsItems += `'\n }\n\n selectFieldTypeElement.innerHTML = freeFieldsItems\n }.bind(this))\n }\n\n setTimeout(function () {\n let selectFieldTypeElements = shadowContainer.shadowRoot.querySelectorAll('.lh-form-collector-form-editor-select-field-type select')\n if (selectFieldTypeElements && selectFieldTypeElements.length > 0) {\n Array.from(selectFieldTypeElements).forEach(function (selectFieldTypeElement) {\n selectFieldTypeElement.onchange = function (fieldType) {\n let selectElement = shadowContainer.shadowRoot.querySelector(`.lh-form-collector-form-editor-select-field-type select[data-field-type=\"${fieldType}\"]`)\n let selectedType = selectElement.options[selectElement.selectedIndex].getAttribute('data-name')\n\n this.store.state.editableForm.fields = this.store.state.editableForm.fields.map(function (field) {\n if (field.name.key === fieldType) {\n field.name.key = selectedType\n field.alias.key = selectedType\n field.selector.key = selectedType\n }\n return field\n })\n\n selectFieldTypeElement.setAttribute('data-field-type', selectedType)\n selectFieldTypeElement.parentNode.setAttribute('data-field-type', selectedType)\n\n setTimeout(function () {\n this.updateFormFieldsBlock()\n }.bind(this), 0)\n }.bind(this, selectFieldTypeElement.getAttribute('data-field-type'))\n }.bind(this))\n }\n }.bind(this), 0)\n }\n updateFormFieldsBlock () {\n let shadowContainer = document.querySelector('.lh-form-collector-shadow-continer')\n let formFieldsBlock = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-content-fields-cont')\n\n let fieldsItems = ''\n if (this.store.state.editableForm.fields && this.store.state.editableForm.fields.length > 0) {\n fieldsItems += `\n \n \n \n \n \n \n \n \n \n `\n for (let i = 0; i < this.store.state.editableForm.fields.length; i++) {\n let field = this.store.state.editableForm.fields[i]\n\n let selectorValue = 'value=\"\"'\n if (field.selector.value) {\n let matchDoubleQuotes = field.selector.value.match(/\"/g)\n let matchSingleQuotes = field.selector.value.match(/'/g)\n if (matchDoubleQuotes && matchDoubleQuotes.length > 0) {\n selectorValue = `value='${field.selector.value}'`\n } else if (matchSingleQuotes && matchSingleQuotes.length > 0) {\n selectorValue = `value=\"${field.selector.value}\"`\n } else {\n selectorValue = `value=\"${field.selector.value}\"`\n }\n }\n\n fieldsItems += `\n \n \n \n \n \n `\n }\n fieldsItems += '
\n Тип поля\n \n Атрибут 'name' поля\n \n Псевдоним поля\n \n Селектор поля\n \n Удалить\n
\n
\n
\n
\n \n \n \n \n \n \n
\n \n \n \n
\n
'\n }\n\n let freeFieldsItems = '
Добавить поле
'\n\n formFieldsBlock.innerHTML = `${fieldsItems} ${freeFieldsItems}`\n\n setTimeout(function () {\n this.addFieldTypeListSelectInFormCollector()\n\n let addFieldButton = shadowContainer.shadowRoot.querySelector('.lh-form-collector-add-field-button')\n let removeFieldButtons = shadowContainer.shadowRoot.querySelectorAll('.lh-form-collector-remove-form-field')\n let fieldNameInputs = shadowContainer.shadowRoot.querySelectorAll('.lh-form-collector-field-name-input')\n let fieldAliasInputs = shadowContainer.shadowRoot.querySelectorAll('.lh-form-collector-field-alias-input')\n let fieldSelectorInputs = shadowContainer.shadowRoot.querySelectorAll('.lh-form-collector-field-selector-input')\n\n if (addFieldButton) {\n addFieldButton.onclick = function () {\n let sendFormByClickButton = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-find-button-selector')\n\n if (addFieldButton.classList.contains('active')) {\n addFieldButton.classList.remove('active')\n document.body.onmouseover = null\n document.body.onmouseout = null\n } else {\n if (sendFormByClickButton) {\n sendFormByClickButton.classList.remove('active')\n this.turnOffFindingElementInPageInFormCollector()\n }\n\n addFieldButton.classList.add('active')\n document.body.onmouseover = this.findFieldMouseoverInFormCollector.bind(this)\n document.body.onmouseout = this.findFieldMouseoutInFormCollector.bind(this)\n }\n }.bind(this)\n }\n if (removeFieldButtons && removeFieldButtons.length > 0) {\n Array.from(removeFieldButtons).forEach(function (removeFieldButton) {\n removeFieldButton.onclick = function (event) {\n let removeButton = event.target.closest('.lh-form-collector-remove-form-field')\n if (!removeButton) return\n let removeFieldName = removeButton.getAttribute('data-field-type')\n\n this.store.state.editableForm.fields = this.store.state.editableForm.fields.filter(function (field) {\n if (field.name.key !== removeFieldName) return true\n else return false\n })\n\n this.updateFormFieldsBlock()\n }.bind(this)\n }.bind(this))\n }\n if (fieldNameInputs && fieldNameInputs.length > 0) {\n Array.from(fieldNameInputs).forEach(function (fieldNameInput) {\n fieldNameInput.oninput = function (fieldType) {\n let fieldNameInput = shadowContainer.shadowRoot.querySelector(`.lh-form-collector-field-name-input[data-field-type=\"${fieldType}\"]`)\n this.store.state.editableForm.fields = this.store.state.editableForm.fields.map(function (field) {\n if (field.name.key === fieldType) {\n field.name.value = fieldNameInput.value\n }\n return field\n })\n }.bind(this, fieldNameInput.getAttribute('data-field-type'))\n }.bind(this))\n }\n if (fieldAliasInputs && fieldAliasInputs.length > 0) {\n Array.from(fieldAliasInputs).forEach(function (fieldAliasInput) {\n fieldAliasInput.oninput = function (fieldType) {\n let fieldAliasInput = shadowContainer.shadowRoot.querySelector(`.lh-form-collector-field-alias-input[data-field-type=\"${fieldType}\"]`)\n this.store.state.editableForm.fields = this.store.state.editableForm.fields.map(function (field) {\n if (field.alias.key === fieldType) {\n field.alias.value = fieldAliasInput.value\n }\n return field\n })\n }.bind(this, fieldAliasInput.getAttribute('data-field-type'))\n }.bind(this))\n }\n if (fieldSelectorInputs && fieldSelectorInputs.length > 0) {\n Array.from(fieldSelectorInputs).forEach(function (fieldSelectorInput) {\n fieldSelectorInput.oninput = function (fieldType) {\n let fieldSelectorInput = shadowContainer.shadowRoot.querySelector(`.lh-form-collector-field-selector-input[data-field-type=\"${fieldType}\"]`)\n this.store.state.editableForm.fields = this.store.state.editableForm.fields.map(function (field) {\n if (field.selector.key === fieldType) {\n field.selector.value = fieldSelectorInput.value\n }\n return field\n })\n }.bind(this, fieldSelectorInput.getAttribute('data-field-type'))\n }.bind(this))\n }\n }.bind(this), 0)\n }\n validateFormBeforeSaveInFormCollector () {\n if (this.store.state.editableForm.name.length > 0 && Object.keys(this.store.state.editableForm.fields).length > 0) {\n return true\n } else {\n return false\n }\n }\n backToFormsListInFormCollector () {\n let shadowContainer = document.querySelector('.lh-form-collector-shadow-continer')\n let formEditorContent = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-content')\n let formListContainer = shadowContainer.shadowRoot.querySelector('.lh-form-collector-forms-list-body')\n let formEditorContainer = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-body')\n\n formListContainer.classList.remove('lh-form-collector-display-none')\n formEditorContainer.classList.add('lh-form-collector-display-none')\n this.updateFormsListHtmlInFormCollector()\n formEditorContent.remove()\n this.turnOffFindingElementInPageInFormCollector()\n }\n\n updateFormInFormCollector () {\n let form = JSON.parse(JSON.stringify(this.store.state.editableForm))\n let fields = JSON.parse(JSON.stringify(form.fields))\n form.fields = {}\n form.fields_aliases = {}\n form.fields_selector = {}\n fields.forEach(function (field) {\n form.fields[field.name.value] = field.name.key\n form.fields_aliases[field.alias.key] = field.alias.value\n form.fields_selector[field.selector.key] = field.selector.value\n })\n\n let url = this.store.state.proto + this.store.state.trackUrlV2 + `site/${window.lh_clid}/forms`\n this.fetch(url, {\n 'method': 'PATCH',\n 'body': JSON.stringify(form)\n })\n .then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n if (response.status) {\n this.store.state.existingForms = this.store.state.existingForms.map(function (existingForm) {\n if (existingForm.id === this.store.state.editableForm.id) {\n existingForm = JSON.parse(JSON.stringify(this.store.state.editableForm))\n }\n return existingForm\n }.bind(this))\n\n if (this.store.state.editableForm.standard_form_element) {\n alert('Форма обновлена успешно!')\n } else {\n this.updateFormScriptInFormCollector('Форма обновлена успешно!')\n }\n }\n } catch (e) {\n console.log('updateFormInFormCollector, Error: ', e)\n }\n }.bind(this))\n }.bind(this))\n }\n createFormInFormCollector () {\n let form = JSON.parse(JSON.stringify(this.store.state.editableForm))\n let fields = JSON.parse(JSON.stringify(form.fields))\n form.fields = {}\n form.fields_aliases = {}\n form.fields_selector = {}\n fields.forEach(function (field) {\n form.fields[field.name.value] = field.name.key\n form.fields_aliases[field.alias.key] = field.alias.value\n form.fields_selector[field.selector.key] = field.selector.value\n })\n\n let url = this.store.state.proto + this.store.state.trackUrlV2 + `site/${window.lh_clid}/forms`\n this.fetch(url, {\n 'method': 'POST',\n 'body': JSON.stringify(form)\n })\n .then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n if (response.status) {\n this.store.state.editableForm.id = response.form_id\n this.store.state.existingForms.push(JSON.parse(JSON.stringify(this.store.state.editableForm)))\n\n this.renderFormCollectorEditPage()\n\n if (this.store.state.editableForm.standard_form_element) {\n alert('Форма успешно создана!')\n } else {\n this.updateFormScriptInFormCollector('Форма успешно создана!')\n }\n }\n } catch (e) {\n console.log('createFormInFormCollector, Error: ', e)\n }\n }.bind(this))\n }.bind(this))\n }\n removeFormInFormCollector () {\n let url = this.store.state.proto + this.store.state.trackUrlV2 + `site/${window.lh_clid}/forms?form_id=${this.store.state.editableForm.id}`\n fetch(url, {\n 'method': 'DELETE'\n })\n .then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n if (response.status) {\n this.store.state.existingForms = this.store.state.existingForms.filter(function (existingForm) {\n if (existingForm.id === this.store.state.editableForm.id) return false\n else return true\n }.bind(this))\n\n this.backToFormsListInFormCollector()\n\n if (this.store.state.editableForm.standard_form_element) {\n alert('Форма успешно удалена!')\n } else {\n this.updateFormScriptInFormCollector('Форма успешно удалена!')\n }\n\n this.store.state.editableForm = null\n }\n } catch (e) {\n console.log('removeFormInFormCollector, Error: ', e)\n }\n }.bind(this))\n }.bind(this))\n }\n generateFormsScriptInFormCollector () {\n /* eslint-disable */\n let codeText = `function addInputToForm(inputname, formlink, inputvalue) {\\n`\n codeText += ` var input = document.createElement('input');\\n`\n codeText += ` input.type = \"hidden\";\\n`\n codeText += ` input.name = inputname;\\n`\n codeText += ` input.id = \"id_\"+inputname;\\n`\n codeText += ` input.value = inputvalue;\\n`\n codeText += ` formlink.appendChild(input);\\n`\n codeText += `}\\n`\n codeText += `function isValidEmail(email) {\\n`\n codeText += ` var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\\n`\n codeText += ` return re.test(email);\\n`\n codeText += `}\\n`\n codeText += `function isValidPhone(phone) {\\n`\n codeText += ` var re = /^[\\s()+-]*([0-9][\\s()+-]*){10,11}$/;\\n`\n codeText += ` return re.test(phone);\\n`\n codeText += `}\\n`\n /* eslint-enable */\n\n let forms = this.store.state.existingForms.filter(function (form) {\n if (!form.standard_form_element) return true\n else return false\n })\n\n for (let i = 0; i < forms.length; i++) {\n let formVariableName = 'form' + (i + 1)\n codeText += `\\nvar ${formVariableName} = document.createElement(\"form\");\\n`\n\n for (let j = 0; j < forms[i].fields.length; j++) {\n codeText += `addInputToForm('${forms[i].fields[j].name.value}', ${formVariableName}, '');\\n`\n }\n\n if (!forms[i].by_click.active) {\n for (let j = 0; j < forms[i].fields.length; j++) {\n let inputVariableName = 'checkInput' + formVariableName + forms[i].fields[j].name.key\n codeText += `\\rfunction ${inputVariableName}(event) {\\n`\n\n if (forms[i].fields[j].name.key === 'email') {\n codeText += ` if (isValidEmail(this.value)) {\\n`\n codeText += ` ${formVariableName}.id_${forms[i].fields[j].name.value}.value = this.value\\n`\n codeText += ` window.lh_sf(${formVariableName});\\n`\n codeText += ` }`\n } else if (forms[i].fields[j].name.key === 'phone') {\n codeText += ` if (isValidPhone(this.value)) {\\n`\n codeText += ` ${formVariableName}.id_${forms[i].fields[j].name.value}.value = this.value\\n`\n codeText += ` window.lh_sf(${formVariableName});\\n`\n codeText += ` }`\n } else {\n codeText += ` ${formVariableName}.id_${forms[i].fields[j].name.value}.value = this.value\\n`\n codeText += ` window.lh_sf(${formVariableName});`\n }\n codeText += '\\r}'\n\n codeText += `\\rtry {\\n`\n\n codeText += ` document.querySelector('${forms[i].fields[j].selector.value}').addEventListener('keyup', ${inputVariableName})\\n`\n codeText += ` document.querySelector('${forms[i].fields[j].selector.value}').addEventListener('blur', ${inputVariableName})\\n`\n codeText += ` document.querySelector('${forms[i].fields[j].selector.value}').addEventListener('change', ${inputVariableName})\\n`\n\n codeText += `} catch (e) {}\\n`\n }\n } else {\n codeText += `try {\\n`\n codeText += ` function live${formVariableName}(cb) {\\n`\n codeText += ` document.addEventListener(\"click\", function(event) {\\n`\n codeText += ` var el = event.target, found;\\n`\n codeText += ` while (el && !(found = el === document.querySelector('${forms[i].by_click.selector}'))) {\\n`\n codeText += ` el = el.parentElement;\\n`\n codeText += ` }\\n`\n codeText += ` if (found) {\\n`\n codeText += ` cb.call(el, event);\\n`\n codeText += ` }\\n`\n codeText += ` });\\n`\n codeText += ` }\\n`\n codeText += ` live${formVariableName}(function(event) {\\n`\n\n for (let j = 0; j < forms[i].fields.length; j++) {\n codeText += ` ${formVariableName}.id_${forms[i].fields[j].name.value}.value = document.querySelector('${forms[i].fields[j].selector.value}').value\\n`\n }\n\n codeText += ` window.lh_sf(${formVariableName});\\n`\n codeText += ` });\\n`\n codeText += `} catch (e) {}\\n`\n }\n }\n\n return codeText\n }\n updateFormScriptInFormCollector (successMessage) {\n let formsScriptText = this.generateFormsScriptInFormCollector()\n let lhVars = JSON.parse(JSON.stringify(this.store.state.siteSettings.lh_vars || {}))\n lhVars.forms_script = formsScriptText\n\n let url = this.store.state.proto + this.store.state.trackUrlV2 + `update/lh_vars?site_id=${window.lh_clid}`\n this.fetch(url, {\n 'method': 'PATCH',\n 'body': JSON.stringify(lhVars)\n })\n .then(function (response) {\n response.text().then(function (response) {\n try {\n response = JSON.parse(response)\n this.store.state.siteSettings.lh_vars.forms_script = lhVars.forms_script\n\n if (response.status) {\n alert(successMessage)\n }\n } catch (e) {\n console.log('updateFormScriptInFormCollector, Error: ', e)\n }\n }.bind(this))\n }.bind(this))\n }\n\n renderFormCollectorEditPage () {\n let shadowContainer = document.querySelector('.lh-form-collector-shadow-continer')\n let formListContainer = shadowContainer.shadowRoot.querySelector('.lh-form-collector-forms-list-body')\n let formEditorContainer = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-body')\n\n let removeButtonHtml = '
Удалить
'\n if (!this.store.state.editableForm.hasOwnProperty('id')) {\n removeButtonHtml = ''\n }\n\n let formByClickCheckbox = ''\n if (!this.store.state.editableForm.standard_form_element && this.store.state.editableForm.fields.length > 0) {\n formByClickCheckbox = `
\n \n \n
`\n }\n\n let formByClickInput = ''\n if (this.store.state.editableForm.by_click.active) {\n formByClickInput = `
\n
\n Селектор кнопки\n
\n
\n \n\n
\n Выбрать на странице\n
\n
\n
`\n }\n\n formEditorContainer.innerHTML = `\n
\n
\n
\n Имя формы\n
\n
\n \n
\n
\n\n
\n
\n Атрибут 'action' формы\n
\n
\n \n
\n
\n\n
\n \n \n
\n\n ${formByClickCheckbox}\n\n ${formByClickInput}\n\n
\n
\n Поля формы:\n
\n\n
\n
\n
\n\n
\n
\n
\n Сохранить\n
\n\n ${removeButtonHtml}\n
\n
\n Список форм\n
\n
\n
`\n\n formListContainer.classList.add('lh-form-collector-display-none')\n formEditorContainer.classList.remove('lh-form-collector-display-none')\n\n setTimeout(function () {\n let backFormsList = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-back-forms-list')\n let formNameInput = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-name-input')\n let formActionInput = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-action-input')\n let standartFormCheckbox = shadowContainer.shadowRoot.querySelector('input#lh-form-collector-standard-form-element')\n let sendFormByClickCheckbox = shadowContainer.shadowRoot.querySelector('input#lh-form-collector-send-form-by-click')\n let sendFormByClickInput = shadowContainer.shadowRoot.querySelector('.lh-form-collector-send-by-click-input')\n let sendFormByClickButton = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-find-button-selector')\n let saveFormButton = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-save-button')\n let removeFormButton = shadowContainer.shadowRoot.querySelector('.lh-form-collector-form-editor-remove-button')\n\n if (backFormsList) {\n backFormsList.onclick = this.backToFormsListInFormCollector.bind(this)\n }\n\n if (formNameInput) {\n formNameInput.oninput = function () {\n this.store.state.editableForm.name = formNameInput.value\n }.bind(this)\n }\n\n if (formActionInput) {\n formActionInput.oninput = function () {\n this.store.state.editableForm.action = formActionInput.value\n }.bind(this)\n }\n\n if (standartFormCheckbox) {\n standartFormCheckbox.onchange = function () {\n this.store.state.editableForm.standard_form_element = !this.store.state.editableForm.standard_form_element\n this.renderFormCollectorEditPage()\n }.bind(this)\n }\n\n if (sendFormByClickCheckbox) {\n sendFormByClickCheckbox.onchange = function () {\n this.store.state.editableForm.by_click.active = !this.store.state.editableForm.by_click.active\n this.renderFormCollectorEditPage()\n }.bind(this)\n }\n if (sendFormByClickInput) {\n sendFormByClickInput.oninput = function () {\n this.store.state.editableForm.by_click.selector = sendFormByClickInput.value\n }.bind(this)\n }\n\n if (sendFormByClickButton) {\n sendFormByClickButton.onclick = function () {\n let addFieldButton = shadowContainer.shadowRoot.querySelector('.lh-form-collector-add-field-button')\n\n if (sendFormByClickButton.classList.contains('active')) {\n sendFormByClickButton.classList.remove('active')\n document.body.onmouseover = null\n document.body.onmouseout = null\n } else {\n if (addFieldButton) {\n addFieldButton.classList.remove('active')\n this.turnOffFindingElementInPageInFormCollector()\n }\n\n sendFormByClickButton.classList.add('active')\n document.body.onmouseover = this.findButtonMouseoverInFormCollector.bind(this)\n document.body.onmouseout = this.findButtonMouseoutInFormCollector.bind(this)\n }\n }.bind(this)\n }\n\n if (saveFormButton) {\n saveFormButton.onclick = function () {\n if (this.validateFormBeforeSaveInFormCollector()) {\n if (!this.store.state.editableForm.hasOwnProperty('id')) {\n this.createFormInFormCollector()\n } else {\n let formToUpdate = this.getExistingFormById(this.store.state.editableForm.id)\n\n if (formToUpdate.name !== this.store.state.editableForm.name || formToUpdate.action !== this.store.state.editableForm.action || formToUpdate.standard_form_element !== this.store.state.editableForm.standard_form_element || formToUpdate.by_click.active !== this.store.state.editableForm.by_click.active || formToUpdate.by_click.selector !== this.store.state.editableForm.by_click.selector || JSON.stringify(formToUpdate.fields) !== JSON.stringify(this.store.state.editableForm.fields)) {\n this.updateFormInFormCollector()\n } else {\n alert('Нет необходимости обновлять форму')\n }\n }\n } else {\n alert(\"Форма должна содержать имя, атрибут 'action' и минимум одно поле!\")\n }\n }.bind(this)\n }\n\n if (removeFormButton) {\n removeFormButton.onclick = function () {\n if (!this.store.state.editableForm.hasOwnProperty('id')) {\n this.backToFormsListInFormCollector()\n } else {\n let answer = confirm('Вы уверены, что хотите удалить форму?')\n if (answer) {\n this.removeFormInFormCollector()\n }\n }\n }.bind(this)\n }\n\n this.updateFormFieldsBlock()\n }.bind(this), 0)\n }\n showFormCollectorEditPage (event) {\n let formId = event.target.getAttribute('data-id')\n this.store.state.editableForm = JSON.parse(JSON.stringify(this.getExistingFormById(formId)))\n if (!this.store.state.editableForm) {\n this.store.state.editableForm = {\n name: '',\n action: '',\n fields: [],\n by_click: {\n active: false,\n selector: ''\n }\n }\n }\n\n this.renderFormCollectorEditPage()\n }\n addFormCollectorEvents () {\n let shadowContainer = document.querySelector('.lh-form-collector-shadow-continer')\n\n let moveIcon = shadowContainer.shadowRoot.querySelector('.lh-move-icon')\n let lhFormCollectorElement = shadowContainer.shadowRoot.querySelector('.lh-form-collector-element-wrapper')\n let closeIcon = shadowContainer.shadowRoot.querySelector('.lh-close-icon')\n let addFromButton = shadowContainer.shadowRoot.querySelector('.lh-form-collector-add-form')\n\n if (moveIcon) {\n moveIcon.onmousedown = function (event) {\n this.formCollectorStartMovePoints = {\n x: event.x,\n y: event.y\n }\n\n function moveAt (x, y) {\n lhFormCollectorElement.style.left = x + 'px'\n lhFormCollectorElement.style.top = y + 'px'\n }\n\n function onMouseMove (event) {\n if (!this.formCollectorStartMovePoints) return\n let params = lhFormCollectorElement.getBoundingClientRect()\n let diffX = this.formCollectorStartMovePoints.x - event.x\n let diffY = this.formCollectorStartMovePoints.y - event.y\n\n let newX = params.x - diffX\n let newY = params.y - diffY\n\n moveAt(newX, newY)\n\n this.formCollectorStartMovePoints.x = event.x\n this.formCollectorStartMovePoints.y = event.y\n }\n\n document.addEventListener('mousemove', onMouseMove.bind(this))\n\n moveIcon.onmouseup = function () {\n this.formCollectorStartMovePoints = null\n document.removeEventListener('mousemove', onMouseMove.bind(this))\n moveIcon.onmouseup = null\n }.bind(this)\n }\n }\n\n if (closeIcon) {\n closeIcon.onclick = function () {\n let alarmQuestion = confirm('Вы уверены, что хотите закрыть окно?\\nНе сохраненные изменения будут потеряны!')\n if (alarmQuestion === true) {\n this.turnOffFindingElementInPageInFormCollector()\n localStorage.removeItem('lh-show-form-collector')\n lhFormCollectorElement.remove()\n }\n }.bind(this)\n }\n\n if (addFromButton) {\n addFromButton.onclick = this.showFormCollectorEditPage.bind(this)\n }\n }\n updateFormsListHtmlInFormCollector () {\n let shadowContainer = document.querySelector('.lh-form-collector-shadow-continer')\n let formListWrapper = shadowContainer.shadowRoot.querySelector('.lh-form-collector-forms-list-wrapper')\n\n let existingForms = '
Формы отсутствуют
'\n if (this.store.state.existingForms.length > 0) {\n existingForms = '
    '\n for (let i = 0; i < this.store.state.existingForms.length; i++) {\n existingForms += `\n
  • \n ${this.store.state.existingForms[i].name}\n
  • `\n }\n existingForms += '
'\n }\n\n formListWrapper.innerHTML = existingForms\n\n setTimeout(function () {\n let formListItem = shadowContainer.shadowRoot.querySelectorAll('.lh-form-collector-forms-list-item')\n\n if (formListItem && formListItem.length > 0) {\n Array.from(formListItem).forEach(function (item) {\n item.onclick = this.showFormCollectorEditPage.bind(this)\n }.bind(this))\n }\n }.bind(this), 0)\n }\n showFormCollector () {\n let htmlElem = document.createElement('div')\n htmlElem.classList.add('lh-form-collector-element-wrapper')\n htmlElem.innerHTML = `\n
\n
\n
\n LeadHit Формы\n
\n\n
\n
\n \n \n \n
\n\n
\n \n \n \n
\n
\n
\n\n
\n
\n Список форм:\n
\n\n
\n
\n\n
\n
\n Добавить форму\n
\n
\n
\n\n
\n
\n
\n `\n\n let cssElem = document.createElement('style')\n cssElem.type = 'text/css'\n let css = `\n .lh-form-collector-element-wrapper {\n background: white;\n border: 1px solid;\n border-radius: 3px;\n position: fixed;\n top: 50px;\n left: 50px;\n resize: both;\n overflow: auto;\n font-size: 14px;\n z-index: 999999999;\n }\n .lh-form-collector-element-wrapper input {\n height: 19px;\n padding: 3px 5px;\n }\n .lh-form-collector {\n height: calc(100% - 5px);\n }\n .lh-form-collector-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 5px 10px;\n }\n .lh-form-collector-header-title {\n margin-right: 15px;\n }\n .lh-form-collector-header-right {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .lh-move-icon {\n cursor: move;\n background: #2C3236;\n width: 30px;\n height: 30px;\n border: 1px solid transparent;\n border-radius: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .lh-close-icon {\n margin-left: 10px;\n background: #2C3236;\n width: 30px;\n height: 30px;\n border: 1px solid transparent;\n border-radius: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n .lh-move-icon:hover svg path, .lh-close-icon:hover svg path {\n fill: #FF4402;\n }\n\n .lh-form-collector-forms-list {\n column-count: 2;\n }\n .lh-form-collector-forms-list-body-title {\n margin-bottom: 5px;\n padding: 0 10px;\n }\n .lh-form-collector-forms-list-body {\n min-height: calc(100% - 40px);\n }\n .lh-form-collector-empty-forms-list {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 50px 0;\n }\n .lh-form-collector-forms-list-item:hover {\n cursor: pointer;\n text-decoration: underline;\n }\n .lh-form-collector-forms-list-wrapper {\n margin-right: 10px;\n }\n\n .lh-form-collector-forms-list-footer {\n display: flex;\n justify-content: flex-end;\n padding: 5px 10px 10px 10px;\n }\n .lh-form-collector-add-form, .lh-form-collector-form-editor-back-forms-list, .lh-form-collector-add-field-button, .lh-form-collector-form-editor-save-button, .lh-form-collector-form-editor-remove-button, .lh-form-collector-form-editor-find-button-selector {\n border: 1px solid;\n border-radius: 3px;\n padding: 3px 10px;\n cursor: pointer;\n user-select: none;\n }\n .lh-form-collector-add-form:hover, .lh-form-collector-form-editor-back-forms-list:hover, .lh-form-collector-add-field-button:hover, .lh-form-collector-add-field-button.active, .lh-form-collector-form-editor-save-button:hover, .lh-form-collector-form-editor-find-button-selector:hover, .lh-form-collector-form-editor-find-button-selector.active {\n background: #2C3236;\n color: #CFD0D1;\n border-color: #2C3236;\n }\n .lh-form-collector-form-editor-save-button {\n margin-right: 15px;\n }\n .lh-form-collector-form-editor-remove-button:hover {\n background: red;\n border-color: red;\n color: white;\n }\n .lh-form-collector-form-editor-find-button-selector-cont {\n display: flex;\n }\n .lh-form-collector-send-by-click-input {\n margin-right: 15px;\n }\n\n .lh-form-collector-form-editor-footer {\n display: flex;\n justify-content: space-between;\n margin-top: 20px;\n }\n .lh-form-collector-form-editor-save-remove-buttons {\n display: flex;\n }\n .lh-form-collector-form-editor-body {\n padding: 0 10px 10px 10px;\n min-width: fit-content;\n }\n .lh-form-collector-form-editor-content {\n min-width: 400px;\n }\n .lh-form-collector-form-editor-content-fields {\n border: 1px solid;\n border-radius: 3px;\n padding: 10px;\n }\n .lh-form-collector-form-editor-content-fields-container th {\n text-align: center;\n }\n .lh-form-collector-form-editor-content-fields-container td {\n padding-top: 3px;\n padding-bottom: 3px;\n }\n .lh-form-collector-form-editor-content-fields-container th:not(:last-child) {\n padding-right: 10px;\n }\n .lh-form-collector-form-editor-content-fields-container td:not(:last-child) {\n padding-right: 10px;\n }\n .lh-form-collector-form-editor-content-item {\n margin-bottom: 15px;\n }\n .lh-form-collector-form-editor-standart-form-checkbox {\n display: flex;\n align-items: center;\n display: none;\n }\n .lh-form-collector-form-editor-standart-form-checkbox label {\n margin-left: 3px;\n cursor: pointer\n }\n .lh-form-collector-form-editor-standart-form-checkbox input {\n cursor: pointer;\n }\n .lh-form-collector-form-editor-send-form-by-click {\n display: flex;\n align-items: center;\n }\n .lh-form-collector-form-editor-send-form-by-click label {\n margin-left: 3px;\n cursor: pointer\n }\n .lh-form-collector-form-editor-send-form-by-click input {\n cursor: pointer\n }\n .lh-form-collector-remove-form-field {\n background: red;\n border: 1px solid transparent;\n border-radius: 20px;\n width: 20px;\n height: 20px;\n margin: 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n .lh-form-collector-form-editor-add-field {\n margin-top: 15px;\n display: flex;\n }\n .lh-form-collector-form-editor-select-field-type select {\n padding: 3px 5px;\n height: 29px;\n }\n\n .lh-form-collector-display-none {\n display: none !important;\n }\n `\n if (cssElem.styleSheet) {\n cssElem.styleSheet.cssText = css\n } else {\n cssElem.appendChild(document.createTextNode(css))\n }\n\n let shadowContainer = document.createElement('div')\n shadowContainer.classList.add('lh-form-collector-shadow-continer')\n document.body.append(shadowContainer)\n shadowContainer.attachShadow({ mode: 'open' })\n\n shadowContainer.shadowRoot.append(cssElem)\n shadowContainer.shadowRoot.append(htmlElem)\n\n setTimeout(function () {\n this.updateFormsListHtmlInFormCollector()\n this.addFormCollectorEvents()\n }.bind(this), 0)\n }\n\n init () {\n let sess = Utils.readCookie('_lhtm_r')\n\n if (sess) {\n window.lh_vid = sess.split('|')[1]\n window.lh_ref = sess.split('|')[0]\n }\n\n this.store.state.isFirstVisit = !Utils.checkIsValidObjectIdForMongoDB(this.getUID())\n this.store.state.domain = location.host.replace('www.', '')\n window.lh_sf = this.saveFormToLocalStorage.bind(this)\n\n if (typeof window._lh_params !== 'undefined') {\n this.store.state.params = window._lh_params\n }\n\n this.debugLog('Leadhit init complete')\n\n // Legacy code for old widgets\n window.lh_banner_data = {}\n }\n}\n\nexport default Leadhit\n"],"sourceRoot":""}