{"version":3,"sources":["webpack://@elastic/apm-rum/../node_modules/error-stack-parser/error-stack-parser.js","webpack://@elastic/apm-rum/../node_modules/stackframe/stackframe.js","webpack://@elastic/apm-rum/webpack/bootstrap","webpack://@elastic/apm-rum/webpack/runtime/compat get default export","webpack://@elastic/apm-rum/webpack/runtime/define property getters","webpack://@elastic/apm-rum/webpack/runtime/hasOwnProperty shorthand","webpack://@elastic/apm-rum/../node_modules/promise-polyfill/src/finally.js","webpack://@elastic/apm-rum/../node_modules/promise-polyfill/src/index.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/polyfills.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/utils.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/patching/patch-utils.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/constants.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/patching/xhr-patch.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/http/response-status.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/http/fetch.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/event-handler.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/patching/index.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/patching/fetch-patch.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/patching/history-patch.js","webpack://@elastic/apm-rum/../rum-core/dist/es/state.js","webpack://@elastic/apm-rum/../rum-core/dist/es/bootstrap.js","webpack://@elastic/apm-rum/../rum-core/dist/es/error-logging/stack-trace.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/url.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/context.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/truncate.js","webpack://@elastic/apm-rum/../rum-core/dist/es/error-logging/error-logging.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/queue.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/ndjson.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/navigation/marks.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/compress.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/http/xhr.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/apm-server.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/throttle.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/config-service.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/service-factory.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/logging-service.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/performance-monitoring.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/span-base.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/span.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/breakdown.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/transaction.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/metrics.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/navigation/utils.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/navigation/navigation-timing.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/navigation/resource-timing.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/navigation/capture-navigation.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/navigation/user-timing.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/transaction-service.js","webpack://@elastic/apm-rum/../rum-core/dist/es/index.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/index.js","webpack://@elastic/apm-rum/../rum-core/dist/es/error-logging/index.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/observers/page-visibility.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/observers/page-clicks.js","webpack://@elastic/apm-rum/./src/apm-base.js","webpack://@elastic/apm-rum/../rum-core/dist/es/common/instrument.js","webpack://@elastic/apm-rum/./src/index.js"],"names":["StackFrame","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","_map","array","fn","thisArg","Array","prototype","map","output","length","i","call","_filter","filter","push","parse","error","stacktrace","this","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","Error","extractLocation","urlLike","indexOf","parts","exec","replace","undefined","split","line","tokens","slice","locationParts","pop","functionName","join","fileName","target","_indexOf","e","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","args","_isNumber","n","isNaN","parseFloat","isFinite","lineNumber","columnNumber","source","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","v","String","getArgs","Object","toString","TypeError","getFileName","getLineNumber","Number","getColumnNumber","getSource","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","getter","__esModule","d","a","definition","key","o","defineProperty","enumerable","get","obj","prop","hasOwnProperty","callback","constructor","then","value","resolve","reason","reject","setTimeoutFunc","setTimeout","isArray","x","Boolean","noop","Promise","_state","_handled","_value","_deferreds","doResolve","handle","self","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","promise","newValue","finale","apply","arguments","_unhandledRejectionFn","Handler","done","ex","prom","all","arr","remaining","res","val","race","setImmediate","err","console","warn","local","isBrowser","window","PromisePollyfill","PERF","performance","byteToHex","substr","destination","Uint8Array","generateRandomId","buffer","hexOctets","_i","bytesToHex","crypto","getRandomValues","msCrypto","setRequestHeader","name","headers","append","checkSameOrigin","isSame","test","forEach","t","isPlatformSupported","Set","JSON","stringify","now","XMLHttpRequest","setLabel","skey","removeInvalidChars","valueType","stripQueryStringFromUrl","url","isObject","baseExtend","dst","objs","deep","ii","keys","j","jj","src","getCurrentScript","document","currentScript","scripts","getElementsByTagName","l","sc","getElasticScript","extend","merge","isUndefined","getLatestSpan","spans","typeFilter","latestSpan","_i3","span","type","_end","getTime","time","getDuration","start","end","parseInt","scheduleMicroTask","isPerfTimelineSupported","getEntriesByType","isPerfTypeSupported","PerformanceObserver","supportedEntryTypes","isRedirectInfoAvailable","timing","redirectStart","globalState","fetchInProgress","apmSymbol","patchMethod","patchFn","proto","getPrototypeOf","delegate","patched","original","propertyDesc","delegateName","desc","getOwnPropertyDescriptor","writable","set","patchDelegate","XHR_IGNORE","XHR_SYNC","XHR_URL","XHR_METHOD","INVOKE","RESOURCE_INITIATOR_TYPES","PAGE_LOAD","TRANSACTION_TYPE_ORDER","patchXMLHttpRequest","XMLHttpRequestPrototype","openNative","sendNative","task","state","data","method","sync","status","addListener","_ref","readyState","invokeTask","scheduleTask","isResponseSuccessful","_extends","assign","shouldUseFetchWithKeepAlive","payload","isFetchSupported","Request","size","Blob","calculateSize","fetch","EventHandler","observers","_proto","observe","_this","index","splice","sendOnly","obs","log","send","patchEventHandler","alreadyPatched","patchAll","event","nativeFetch","input","init","request","fetchSelf","isURL","URL","aborted","response","clonedResponse","clone","body","readStream","handleResponseError","isAbortError","stream","reader","getReader","read","patchFetch","history","nativePushState","pushState","title","patchHistory","bootstrapTime","lastHiddenStart","MIN_SAFE_INTEGER","enabled","bootstrap","createStackTraces","stackParser","errorEvent","filename","lineno","colno","stackTraces","isValidStackTrace","frame","fnName","_stack$functionName","fileUrl","origin","filePath","cleanFilePath","cleanedFileName","location","protocol","hostname","port","href","isFileInline","abs_path","function","RULES","NaN","PROTOCOL_REGEX","Url","_this$extractProtocol","extractProtocol","address","slashes","relative","getLocation","instructions","instruction","instLength","newIndex","lastIndexOf","Math","max","toLowerCase","path","charAt","host","isDefaultPort","auth","userpass","query","hash","globalVar","_excluded","getResponseContext","perfTimingEntry","respContext","transfer_size","transferSize","encoded_body_size","encodedBodySize","decoded_body_size","decodedBodySize","serverTimingStr","serverTimingEntries","serverTimingInfo","_i2","_serverTimingEntries$","duration","description","timingValue","valueSeparator","getServerTimingInfo","serverTiming","getDestination","parsedUrl","portNumber","getPortNumber","ipv6Hostname","charCodeAt","service","resource","getPageContext","page","referer","referrer","addSpanContext","context","statusCode","http","status_code","getExternalContext","entry","getResourceContext","getNavigationContext","addContext","addTransactionContext","transaction","_temp","configContext","tags","excluded","sourceKeys","_objectWithoutPropertiesLoose","pageContext","responseContext","entries","METADATA_MODEL","version","agent","environment","labels","RESPONSE_MODEL","CONTEXT_MODEL","user","id","email","username","SPAN_MODEL","trace_id","parent_id","transaction_id","subtype","action","TRANSACTION_MODEL","span_count","started","ERROR_MODEL","culprit","exception","isEmpty","replaceValue","currModel","limit","required","placeholder","substring","truncate","truncateModel","model","childTarget","emptyArr","_loop","currKey","IGNORE_KEYS","ErrorLogging","apmServer","configService","transactionService","_apmServer","_configService","_transactionService","createErrorDataModel","filteredFrames","frames","filterInvalidFrames","lastFrame","errorMessage","errorType","errorContext","customProperties","propertyFound","properties","toISOString","getErrorProperties","custom","currentTransaction","getCurrentTransaction","transactionContext","_this$_configService$","errorObject","traceId","sampled","logErrorEvent","addError","registerListeners","addEventListener","promiseRejectionEvent","logPromiseEvent","_parseRejectReason","logError","messageOrError","Queue","onFlush","opts","items","queueLimit","flushInterval","timeoutId","_setTimer","flush","_clear","clearTimeout","add","item","NDJSON","object","NAVIGATION_TIMING_MARKS","COMPRESSED_NAV_TIMING_MARKS","getPageLoadMarks","marks","fetchStart","navigationStart","responseStart","responseEnd","timingKey","m","getNavigationTimingMarks","navigationTiming","timeToFirstByte","domInteractive","domComplete","compressResponse","ts","ebs","dbs","compressContext","compressed","p","rf","h","mt","r","compressHTTP","dt","se","rc","ad","po","u","un","em","cu","compressMarks","compressedNtMarks","ntMarks","mark","mapping","compressNavigationTimingMarks","nt","compressAgentMarks","agentMarks","fb","rs","di","dc","fp","firstContentfulPaint","lp","largestContentfulPaint","compressPayload","params","isCompressionStreamSupported","CompressionStream","flagName","sessionStorage","getItem","URLSearchParams","isFlagSet","searchParams","has","setItem","isBeaconInspectionEnabled","beforeSend","compressedStream","pipeThrough","Response","blob","sendXHR","_ref$timeout","timeout","HTTP_REQUEST_TIMEOUT","sendCredentials","xhr","open","withCredentials","header","onreadystatechange","responseText","onerror","canSend","ApmServer","loggingService","_loggingService","queue","throttleEvents","events","sendEvents","catch","_constructError","onThrottle","interval","counter","throttle","bind","observeEvent","_postJson","endPoint","_this2","_makeHttpRequest","_ref2","_ref2$timeout","fetchResponse","_ref$keepalive","keepalive","timeoutConfig","AbortController","controller","signal","abort","credentials","text","bodyResponse","sendFetchRequest","fetchConfig","serviceName","_this3","configEndpoint","getEndpoints","localConfig","getLocalConfig","etag","apmRequest","remoteConfig","getResponseHeader","setLocalConfig","createMetaData","cfg","metadata","language","_this$throttleEvents","addTransaction","_this$throttleEvents2","ndjsonErrors","errors","compress","_NDJSON$stringify","cl","mg","st","ap","f","li","co","c","tid","pid","xid","sm","compressError","ndjsonMetricsets","metricsets","metricset","ndjsonTransactions","transactions","_this4","tr","_NDJSON$stringify2","breakdowns","breakdown","spanData","s","outcome","sr","sample_rate","sy","su","ac","k","me","samples","y","sa","ysc","yss","yc","sd","experience","_transaction$experien","cls","fid","tbt","longtask","exp","lt","session","_transaction$session","sequence","ses","seq","compressTransaction","_payload","_NDJSON$stringify3","filteredPayload","applyFilters","ndjson","metadataKey","ve","la","en","compressMetadata","ndjsonPayload","concat","intakeEndpoint","serverUrl","apiVersion","_serviceCreators","Config","config","serviceVersion","serverUrlPrefix","active","instrument","disableInstrumentations","logLevel","breakdownMetrics","ignoreTransactions","eventsLimit","distributedTracing","distributedTracingOrigins","distributedTracingHeaderName","pageLoadTraceId","pageLoadSpanId","pageLoadSampled","pageLoadTransactionName","propagateTracestate","transactionSampleRate","centralConfig","monitorLongtasks","filters","scriptData","node","dataAttrs","dataRegex","attrs","attributes","attr","nodeName","camelCasedkey","toUpperCase","nodeValue","getDataAttributesFromNode","setConfig","setVersion","addFilter","reduce","objKey","setUserContext","userContext","_userContext","setCustomContext","customContext","addLabels","_properties","round","validate","requiredKeys","allKeys","missing","invalid","unknown","allowed","sampleRate","storage","localStorage","dispatchEvent","LoggingService","spec","levels","level","prefix","resetLogMethods","shouldLog","setLevel","normalizedLevel","realMethod","serviceCreators","ConfigService","factory","_factory$getService","getService","ServiceFactory","instances","initialized","_this$getService","PerformanceMonitoring","_logginService","flags","TRANSACTION_END","createTransactionPayload","getHistorySub","getXHRSub","getFetchSub","startTransaction","managed","canReuse","processAPICalls","endpoints","some","endpoint","requestUrl","spanName","startSpan","blocking","isDtEnabled","dtOrigins","currentUrl","isSameOrigin","injectDtHeader","injectTSHeader","process","_data","_span","_target","endSpan","headerName","headerValue","parentId","dtVersion","getDtHeaderValue","getTSHeaderValue","extractDtHeader","parsed","parseDtHeaderValue","filterTransaction","isManaged","createTransactionDataModel","transactionStart","_start","transactionData","breakdownTimings","adjustedTransaction","filterdSpans","similarSpans","originalSpans","transDuration","threshold","sort","spanA","spanB","lastCount","lastSpan","isContinuouslySimilar","isLastSpan","groupSmallContinuouslySimilarSpans","resetFields","adjustTransaction","SpanBase","options","timestamp","startTime","ended","onEnd","ensureContext","ctx","_len","_key","endTime","callOnEnd","_setPrototypeOf","setPrototypeOf","__proto__","_SpanBase","subClass","superClass","Span","fields","create","pageLoadBreakdowns","getValue","getSpanBreakdown","transactionDetails","details","_ref$count","count","Transaction","_activeSpans","_activeTasks","blocked","captureTimings","random","addMarks","markTime","reuseThreshold","redefine","trc","_onSpanEnd","addTask","isFinished","detectFinish","sid","captureBreakdown","timings","current","spanMap","transactionSelfTime","span1","span2","spanEnd","spanStart","lastContinuousEnd","selfTime","calculateSelfTime","groupSpans","_key$split","_spanMap$key","_captureBreakdown","block","flag","taskId","removeTask","delete","metrics","fcp","Infinity","score","firstEntryTime","NEGATIVE_INFINITY","prevEntryTime","currentSessionScore","captureObserverEntries","list","isHardNavigation","trStart","longtaskEntries","longtasks","agg","_longtasks$i","attribution","_attribution$","_name","containerType","containerName","containerId","createLongTaskSpans","lcpEntries","lastLcpEntry","lcp","unloadDiff","fcpEntry","getEntriesByName","fidSpan","fidEntries","firstInput","processingStart","createFirstInputDelaySpan","min","blockingTime","calculateTotalBlockingTime","clsEntries","hadRecentInput","calculateCumulativeLayoutShift","PerfEntryRecorder","disconnect","buffered","_","stop","shouldCreateSpan","trEnd","baseTime","eventPairs","createResourceTimingSpan","resourceTimingEntry","initiatorType","kind","isCapturedByPatching","resourceStartTime","requestPatchTime","captureNavigation","customMarks","pageResponse","createNavigationTimingSpans","_trStart","_entries$i","createResourceTimingSpans","userTimingSpans","createUserTimingSpans","TransactionService","logger","_config","_logger","respIntervalId","recorder","_tr$spans","_captureObserverEntri","createCurrentTransaction","createOptions","perfOptions","startManagedTransaction","isRedefined","redefineType","currentTypeOrder","redefineTypeOrder","fireOnstartHook","handleTransactionEnd","shouldIgnoreTransaction","tbtObject","tbtSpan","sum","setSession","urlStr","depth","pathParts","specialCharsRegex","digitsRegex","lowerCaseRegex","upperCaseRegex","redactedParts","redactedBefore","part","numberOfDigits","numberofUpperCase","lowerCaseRate","upperCaseRate","slugifyUrl","adjustTransactionTime","Date","sessionConfig","earliestSpan","_i4","getEarliestSpan","latestSpanEnd","getLatestNonXHRSpan","transactionEndWithoutDelay","latestXHRSpanEnd","getLatestXHRSpan","truncateSpans","transactionEnd","transactionName","ignoreList","element","createServiceFactory","serviceFactory","_serviceFactory$getSe","_serviceFactory$getSe2","onPageHidden","unobserve","observePageClicks","clickHandler","Element","_getTransactionMetada","dtName","closest","dataset","findCustomTransactionName","tagName","getAttribute","buildTransactionName","classes","getTransactionMetadata","createUserInteractionTransaction","removeEventListener","ApmBase","disable","_disable","_initialized","isEnabled","isActive","disabledInstrumentations","_flags","getInstrumentationFlags","sendPageLoad","_sendPageLoadMetrics","fetchCentralConfig","visibilityState","visibilityChangeHandler","pageHideHandler","observePageVisibility","sendPageLoadMetrics","setInitialPageLoadName","captureError","apmBase","elasticApm","getApmBase"],"mappings":"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","file":"elastic-apm-rum.umd.min.js","sourcesContent":["(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n // @ts-ignore\n return constructor.reject(reason);\n });\n }\n );\n}\n\nexport default finallyConstructor;\n","import promiseFinally from './finally';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array} */\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (var i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n // @ts-ignore\n (typeof setImmediate === 'function' &&\n function(fn) {\n // @ts-ignore\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","import PromisePollyfill from 'promise-polyfill';\nimport { isBrowser } from './utils';\nvar local = {};\n\nif (isBrowser) {\n local = window;\n} else if (typeof self !== 'undefined') {\n local = self;\n}\n\nvar Promise = 'Promise' in local ? local.Promise : PromisePollyfill;\nexport { Promise };","import { Promise } from './polyfills';\nvar slice = [].slice;\nvar isBrowser = typeof window !== 'undefined';\nvar PERF = isBrowser && typeof performance !== 'undefined' ? performance : {};\n\nfunction isCORSSupported() {\n var xhr = new window.XMLHttpRequest();\n return 'withCredentials' in xhr;\n}\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToHex(buffer) {\n var hexOctets = [];\n\n for (var _i = 0; _i < buffer.length; _i++) {\n hexOctets.push(byteToHex[buffer[_i]]);\n }\n\n return hexOctets.join('');\n}\n\nvar destination = new Uint8Array(16);\n\nfunction rng() {\n if (typeof crypto != 'undefined' && typeof crypto.getRandomValues == 'function') {\n return crypto.getRandomValues(destination);\n } else if (typeof msCrypto != 'undefined' && typeof msCrypto.getRandomValues == 'function') {\n return msCrypto.getRandomValues(destination);\n }\n\n return destination;\n}\n\nfunction generateRandomId(length) {\n var id = bytesToHex(rng());\n return id.substr(0, length);\n}\n\nfunction getDtHeaderValue(span) {\n var dtVersion = '00';\n var dtUnSampledFlags = '00';\n var dtSampledFlags = '01';\n\n if (span && span.traceId && span.id && span.parentId) {\n var flags = span.sampled ? dtSampledFlags : dtUnSampledFlags;\n var id = span.sampled ? span.id : span.parentId;\n return dtVersion + '-' + span.traceId + '-' + id + '-' + flags;\n }\n}\n\nfunction parseDtHeaderValue(value) {\n var parsed = /^([\\da-f]{2})-([\\da-f]{32})-([\\da-f]{16})-([\\da-f]{2})$/.exec(value);\n\n if (parsed) {\n var flags = parsed[4];\n var sampled = flags !== '00';\n return {\n traceId: parsed[2],\n id: parsed[3],\n sampled: sampled\n };\n }\n}\n\nfunction isDtHeaderValid(header) {\n return /^[\\da-f]{2}-[\\da-f]{32}-[\\da-f]{16}-[\\da-f]{2}$/.test(header) && header.slice(3, 35) !== '00000000000000000000000000000000' && header.slice(36, 52) !== '0000000000000000';\n}\n\nfunction getTSHeaderValue(_ref) {\n var sampleRate = _ref.sampleRate;\n\n if (typeof sampleRate !== 'number' || String(sampleRate).length > 256) {\n return;\n }\n\n var NAMESPACE = 'es';\n var SEPARATOR = '=';\n return \"\" + NAMESPACE + SEPARATOR + \"s:\" + sampleRate;\n}\n\nfunction setRequestHeader(target, name, value) {\n if (typeof target.setRequestHeader === 'function') {\n target.setRequestHeader(name, value);\n } else if (target.headers && typeof target.headers.append === 'function') {\n target.headers.append(name, value);\n } else {\n target[name] = value;\n }\n}\n\nfunction checkSameOrigin(source, target) {\n var isSame = false;\n\n if (typeof target === 'string') {\n isSame = source === target;\n } else if (target && typeof target.test === 'function') {\n isSame = target.test(source);\n } else if (Array.isArray(target)) {\n target.forEach(function (t) {\n if (!isSame) {\n isSame = checkSameOrigin(source, t);\n }\n });\n }\n\n return isSame;\n}\n\nfunction isPlatformSupported() {\n return isBrowser && typeof Set === 'function' && typeof JSON.stringify === 'function' && PERF && typeof PERF.now === 'function' && isCORSSupported();\n}\n\nfunction setLabel(key, value, obj) {\n if (!obj || !key) return;\n var skey = removeInvalidChars(key);\n var valueType = typeof value;\n\n if (value != undefined && valueType !== 'boolean' && valueType !== 'number') {\n value = String(value);\n }\n\n obj[skey] = value;\n return obj;\n}\n\nfunction getServerTimingInfo(serverTimingEntries) {\n if (serverTimingEntries === void 0) {\n serverTimingEntries = [];\n }\n\n var serverTimingInfo = [];\n var entrySeparator = ', ';\n var valueSeparator = ';';\n\n for (var _i2 = 0; _i2 < serverTimingEntries.length; _i2++) {\n var _serverTimingEntries$ = serverTimingEntries[_i2],\n name = _serverTimingEntries$.name,\n duration = _serverTimingEntries$.duration,\n description = _serverTimingEntries$.description;\n var timingValue = name;\n\n if (description) {\n timingValue += valueSeparator + 'desc=' + description;\n }\n\n if (duration) {\n timingValue += valueSeparator + 'dur=' + duration;\n }\n\n serverTimingInfo.push(timingValue);\n }\n\n return serverTimingInfo.join(entrySeparator);\n}\n\nfunction getTimeOrigin() {\n return PERF.timing.fetchStart;\n}\n\nfunction stripQueryStringFromUrl(url) {\n return url && url.split('?')[0];\n}\n\nfunction isObject(value) {\n return value !== null && typeof value === 'object';\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nfunction baseExtend(dst, objs, deep) {\n for (var i = 0, ii = objs.length; i < ii; ++i) {\n var obj = objs[i];\n if (!isObject(obj) && !isFunction(obj)) continue;\n var keys = Object.keys(obj);\n\n for (var j = 0, jj = keys.length; j < jj; j++) {\n var key = keys[j];\n var src = obj[key];\n\n if (deep && isObject(src)) {\n if (!isObject(dst[key])) dst[key] = Array.isArray(src) ? [] : {};\n baseExtend(dst[key], [src], false);\n } else {\n dst[key] = src;\n }\n }\n }\n\n return dst;\n}\n\nfunction getElasticScript() {\n if (typeof document !== 'undefined') {\n var scripts = document.getElementsByTagName('script');\n\n for (var i = 0, l = scripts.length; i < l; i++) {\n var sc = scripts[i];\n\n if (sc.src.indexOf('elastic') > 0) {\n return sc;\n }\n }\n }\n}\n\nfunction getCurrentScript() {\n if (typeof document !== 'undefined') {\n var currentScript = document.currentScript;\n\n if (!currentScript) {\n return getElasticScript();\n }\n\n return currentScript;\n }\n}\n\nfunction extend(dst) {\n return baseExtend(dst, slice.call(arguments, 1), false);\n}\n\nfunction merge(dst) {\n return baseExtend(dst, slice.call(arguments, 1), true);\n}\n\nfunction isUndefined(obj) {\n return typeof obj === 'undefined';\n}\n\nfunction noop() {}\n\nfunction find(array, predicate, thisArg) {\n if (array == null) {\n throw new TypeError('array is null or not defined');\n }\n\n var o = Object(array);\n var len = o.length >>> 0;\n\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n\n var k = 0;\n\n while (k < len) {\n var kValue = o[k];\n\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n\n k++;\n }\n\n return undefined;\n}\n\nfunction removeInvalidChars(key) {\n return key.replace(/[.*\"]/g, '_');\n}\n\nfunction getLatestSpan(spans, typeFilter) {\n var latestSpan = null;\n\n for (var _i3 = 0; _i3 < spans.length; _i3++) {\n var span = spans[_i3];\n\n if (typeFilter && typeFilter(span.type) && (!latestSpan || latestSpan._end < span._end)) {\n latestSpan = span;\n }\n }\n\n return latestSpan;\n}\n\nfunction getLatestNonXHRSpan(spans) {\n return getLatestSpan(spans, function (type) {\n return String(type).indexOf('external') === -1;\n });\n}\n\nfunction getLatestXHRSpan(spans) {\n return getLatestSpan(spans, function (type) {\n return String(type).indexOf('external') !== -1;\n });\n}\n\nfunction getEarliestSpan(spans) {\n var earliestSpan = spans[0];\n\n for (var _i4 = 1; _i4 < spans.length; _i4++) {\n var span = spans[_i4];\n\n if (earliestSpan._start > span._start) {\n earliestSpan = span;\n }\n }\n\n return earliestSpan;\n}\n\nfunction now() {\n return PERF.now();\n}\n\nfunction getTime(time) {\n return typeof time === 'number' && time >= 0 ? time : now();\n}\n\nfunction getDuration(start, end) {\n if (isUndefined(end) || isUndefined(start)) {\n return null;\n }\n\n return parseInt(end - start);\n}\n\nfunction scheduleMacroTask(callback) {\n setTimeout(callback, 0);\n}\n\nfunction scheduleMicroTask(callback) {\n Promise.resolve().then(callback);\n}\n\nfunction isPerfTimelineSupported() {\n return typeof PERF.getEntriesByType === 'function';\n}\n\nfunction isPerfTypeSupported(type) {\n return typeof PerformanceObserver !== 'undefined' && PerformanceObserver.supportedEntryTypes && PerformanceObserver.supportedEntryTypes.indexOf(type) >= 0;\n}\n\nfunction isBeaconInspectionEnabled() {\n var flagName = '_elastic_inspect_beacon_';\n\n if (sessionStorage.getItem(flagName) != null) {\n return true;\n }\n\n if (!window.URL || !window.URLSearchParams) {\n return false;\n }\n\n try {\n var parsedUrl = new URL(window.location.href);\n var isFlagSet = parsedUrl.searchParams.has(flagName);\n\n if (isFlagSet) {\n sessionStorage.setItem(flagName, true);\n }\n\n return isFlagSet;\n } catch (e) {}\n\n return false;\n}\n\nfunction isRedirectInfoAvailable(timing) {\n return timing.redirectStart > 0;\n}\n\nexport { extend, merge, isUndefined, noop, baseExtend, bytesToHex, isCORSSupported, isObject, isFunction, isPlatformSupported, isDtHeaderValid, parseDtHeaderValue, getServerTimingInfo, getDtHeaderValue, getTSHeaderValue, getCurrentScript, getElasticScript, getTimeOrigin, generateRandomId, getEarliestSpan, getLatestNonXHRSpan, getLatestXHRSpan, getDuration, getTime, now, rng, checkSameOrigin, scheduleMacroTask, scheduleMicroTask, setLabel, setRequestHeader, stripQueryStringFromUrl, find, removeInvalidChars, PERF, isPerfTimelineSupported, isBrowser, isPerfTypeSupported, isBeaconInspectionEnabled, isRedirectInfoAvailable };","export var globalState = {\n fetchInProgress: false\n};\nexport function apmSymbol(name) {\n return '__apm_symbol__' + name;\n}\n\nfunction isPropertyWritable(propertyDesc) {\n if (!propertyDesc) {\n return true;\n }\n\n if (propertyDesc.writable === false) {\n return false;\n }\n\n return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');\n}\n\nfunction attachOriginToPatched(patched, original) {\n patched[apmSymbol('OriginalDelegate')] = original;\n}\n\nexport function patchMethod(target, name, patchFn) {\n var proto = target;\n\n while (proto && !proto.hasOwnProperty(name)) {\n proto = Object.getPrototypeOf(proto);\n }\n\n if (!proto && target[name]) {\n proto = target;\n }\n\n var delegateName = apmSymbol(name);\n var delegate;\n\n if (proto && !(delegate = proto[delegateName])) {\n delegate = proto[delegateName] = proto[name];\n var desc = proto && Object.getOwnPropertyDescriptor(proto, name);\n\n if (isPropertyWritable(desc)) {\n var patchDelegate = patchFn(delegate, delegateName, name);\n\n proto[name] = function () {\n return patchDelegate(this, arguments);\n };\n\n attachOriginToPatched(proto[name], delegate);\n }\n }\n\n return delegate;\n}\nexport var XHR_IGNORE = apmSymbol('xhrIgnore');\nexport var XHR_SYNC = apmSymbol('xhrSync');\nexport var XHR_URL = apmSymbol('xhrURL');\nexport var XHR_METHOD = apmSymbol('xhrMethod');","var SCHEDULE = 'schedule';\nvar INVOKE = 'invoke';\nvar ADD_EVENT_LISTENER_STR = 'addEventListener';\nvar REMOVE_EVENT_LISTENER_STR = 'removeEventListener';\nvar RESOURCE_INITIATOR_TYPES = ['link', 'css', 'script', 'img', 'xmlhttprequest', 'fetch', 'beacon', 'iframe'];\nvar REUSABILITY_THRESHOLD = 5000;\nvar MAX_SPAN_DURATION = 5 * 60 * 1000;\nvar PAGE_LOAD_DELAY = 1000;\nvar PAGE_LOAD = 'page-load';\nvar ROUTE_CHANGE = 'route-change';\nvar TYPE_CUSTOM = 'custom';\nvar USER_INTERACTION = 'user-interaction';\nvar HTTP_REQUEST_TYPE = 'http-request';\nvar TEMPORARY_TYPE = 'temporary';\nvar NAME_UNKNOWN = 'Unknown';\nvar TRANSACTION_TYPE_ORDER = [PAGE_LOAD, ROUTE_CHANGE, USER_INTERACTION, HTTP_REQUEST_TYPE, TYPE_CUSTOM, TEMPORARY_TYPE];\nvar OUTCOME_SUCCESS = 'success';\nvar OUTCOME_FAILURE = 'failure';\nvar OUTCOME_UNKNOWN = 'unknown';\nvar USER_TIMING_THRESHOLD = 60;\nvar TRANSACTION_START = 'transaction:start';\nvar TRANSACTION_END = 'transaction:end';\nvar CONFIG_CHANGE = 'config:change';\nvar QUEUE_FLUSH = 'queue:flush';\nvar QUEUE_ADD_TRANSACTION = 'queue:add_transaction';\nvar XMLHTTPREQUEST = 'xmlhttprequest';\nvar FETCH = 'fetch';\nvar HISTORY = 'history';\nvar EVENT_TARGET = 'eventtarget';\nvar CLICK = 'click';\nvar ERROR = 'error';\nvar BEFORE_EVENT = ':before';\nvar AFTER_EVENT = ':after';\nvar LOCAL_CONFIG_KEY = 'elastic_apm_config';\nvar LONG_TASK = 'longtask';\nvar PAINT = 'paint';\nvar MEASURE = 'measure';\nvar NAVIGATION = 'navigation';\nvar RESOURCE = 'resource';\nvar FIRST_CONTENTFUL_PAINT = 'first-contentful-paint';\nvar LARGEST_CONTENTFUL_PAINT = 'largest-contentful-paint';\nvar FIRST_INPUT = 'first-input';\nvar LAYOUT_SHIFT = 'layout-shift';\nvar ERRORS = 'errors';\nvar TRANSACTIONS = 'transactions';\nvar CONFIG_SERVICE = 'ConfigService';\nvar LOGGING_SERVICE = 'LoggingService';\nvar TRANSACTION_SERVICE = 'TransactionService';\nvar APM_SERVER = 'ApmServer';\nvar PERFORMANCE_MONITORING = 'PerformanceMonitoring';\nvar ERROR_LOGGING = 'ErrorLogging';\nvar TRUNCATED_TYPE = '.truncated';\nvar KEYWORD_LIMIT = 1024;\nvar SESSION_TIMEOUT = 30 * 60000;\nvar HTTP_REQUEST_TIMEOUT = 10000;\nexport { SCHEDULE, INVOKE, ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, RESOURCE_INITIATOR_TYPES, REUSABILITY_THRESHOLD, MAX_SPAN_DURATION, PAGE_LOAD_DELAY, PAGE_LOAD, ROUTE_CHANGE, NAME_UNKNOWN, TYPE_CUSTOM, USER_TIMING_THRESHOLD, TRANSACTION_START, TRANSACTION_END, CONFIG_CHANGE, QUEUE_FLUSH, QUEUE_ADD_TRANSACTION, XMLHTTPREQUEST, FETCH, HISTORY, EVENT_TARGET, CLICK, ERROR, BEFORE_EVENT, AFTER_EVENT, LOCAL_CONFIG_KEY, HTTP_REQUEST_TYPE, LONG_TASK, PAINT, MEASURE, NAVIGATION, RESOURCE, FIRST_CONTENTFUL_PAINT, LARGEST_CONTENTFUL_PAINT, KEYWORD_LIMIT, TEMPORARY_TYPE, USER_INTERACTION, TRANSACTION_TYPE_ORDER, ERRORS, TRANSACTIONS, CONFIG_SERVICE, LOGGING_SERVICE, TRANSACTION_SERVICE, APM_SERVER, PERFORMANCE_MONITORING, ERROR_LOGGING, TRUNCATED_TYPE, FIRST_INPUT, LAYOUT_SHIFT, OUTCOME_SUCCESS, OUTCOME_FAILURE, OUTCOME_UNKNOWN, SESSION_TIMEOUT, HTTP_REQUEST_TIMEOUT };","import { patchMethod, XHR_SYNC, XHR_URL, XHR_METHOD, XHR_IGNORE } from './patch-utils';\nimport { SCHEDULE, INVOKE, XMLHTTPREQUEST, ADD_EVENT_LISTENER_STR } from '../constants';\nexport function patchXMLHttpRequest(callback) {\n var XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n\n if (!XMLHttpRequestPrototype || !XMLHttpRequestPrototype[ADD_EVENT_LISTENER_STR]) {\n return;\n }\n\n var READY_STATE_CHANGE = 'readystatechange';\n var LOAD = 'load';\n var ERROR = 'error';\n var TIMEOUT = 'timeout';\n var ABORT = 'abort';\n\n function invokeTask(task, status) {\n if (task.state !== INVOKE) {\n task.state = INVOKE;\n task.data.status = status;\n callback(INVOKE, task);\n }\n }\n\n function scheduleTask(task) {\n if (task.state === SCHEDULE) {\n return;\n }\n\n task.state = SCHEDULE;\n callback(SCHEDULE, task);\n var target = task.data.target;\n\n function addListener(name) {\n target[ADD_EVENT_LISTENER_STR](name, function (_ref) {\n var type = _ref.type;\n\n if (type === READY_STATE_CHANGE) {\n if (target.readyState === 4 && target.status !== 0) {\n invokeTask(task, 'success');\n }\n } else {\n var status = type === LOAD ? 'success' : type;\n invokeTask(task, status);\n }\n });\n }\n\n addListener(READY_STATE_CHANGE);\n addListener(LOAD);\n addListener(TIMEOUT);\n addListener(ERROR);\n addListener(ABORT);\n }\n\n var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () {\n return function (self, args) {\n if (!self[XHR_IGNORE]) {\n self[XHR_METHOD] = args[0];\n self[XHR_URL] = args[1];\n self[XHR_SYNC] = args[2] === false;\n }\n\n return openNative.apply(self, args);\n };\n });\n var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () {\n return function (self, args) {\n if (self[XHR_IGNORE]) {\n return sendNative.apply(self, args);\n }\n\n var task = {\n source: XMLHTTPREQUEST,\n state: '',\n type: 'macroTask',\n data: {\n target: self,\n method: self[XHR_METHOD],\n sync: self[XHR_SYNC],\n url: self[XHR_URL],\n status: ''\n }\n };\n\n try {\n scheduleTask(task);\n return sendNative.apply(self, args);\n } catch (e) {\n invokeTask(task, ERROR);\n throw e;\n }\n };\n });\n}","export function isResponseSuccessful(status) {\n if (status === 0 || status > 399 && status < 600) {\n return false;\n }\n\n return true;\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { HTTP_REQUEST_TIMEOUT } from '../constants';\nimport { isResponseSuccessful } from './response-status';\nexport var BYTE_LIMIT = 60 * 1000;\nexport function shouldUseFetchWithKeepAlive(method, payload) {\n if (!isFetchSupported()) {\n return false;\n }\n\n var isKeepAliveSupported = ('keepalive' in new Request(''));\n\n if (!isKeepAliveSupported) {\n return false;\n }\n\n var size = calculateSize(payload);\n return method === 'POST' && size < BYTE_LIMIT;\n}\nexport function sendFetchRequest(method, url, _ref) {\n var _ref$keepalive = _ref.keepalive,\n keepalive = _ref$keepalive === void 0 ? false : _ref$keepalive,\n _ref$timeout = _ref.timeout,\n timeout = _ref$timeout === void 0 ? HTTP_REQUEST_TIMEOUT : _ref$timeout,\n payload = _ref.payload,\n headers = _ref.headers,\n sendCredentials = _ref.sendCredentials;\n var timeoutConfig = {};\n\n if (typeof AbortController === 'function') {\n var controller = new AbortController();\n timeoutConfig.signal = controller.signal;\n setTimeout(function () {\n return controller.abort();\n }, timeout);\n }\n\n var fetchResponse;\n return window.fetch(url, _extends({\n body: payload,\n headers: headers,\n method: method,\n keepalive: keepalive,\n credentials: sendCredentials ? 'include' : 'omit'\n }, timeoutConfig)).then(function (response) {\n fetchResponse = response;\n return fetchResponse.text();\n }).then(function (responseText) {\n var bodyResponse = {\n url: url,\n status: fetchResponse.status,\n responseText: responseText\n };\n\n if (!isResponseSuccessful(fetchResponse.status)) {\n throw bodyResponse;\n }\n\n return bodyResponse;\n });\n}\nexport function isFetchSupported() {\n return typeof window.fetch === 'function' && typeof window.Request === 'function';\n}\n\nfunction calculateSize(payload) {\n if (!payload) {\n return 0;\n }\n\n if (payload instanceof Blob) {\n return payload.size;\n }\n\n return new Blob([payload]).size;\n}","import { BEFORE_EVENT, AFTER_EVENT } from './constants';\n\nvar EventHandler = function () {\n function EventHandler() {\n this.observers = {};\n }\n\n var _proto = EventHandler.prototype;\n\n _proto.observe = function observe(name, fn) {\n var _this = this;\n\n if (typeof fn === 'function') {\n if (!this.observers[name]) {\n this.observers[name] = [];\n }\n\n this.observers[name].push(fn);\n return function () {\n var index = _this.observers[name].indexOf(fn);\n\n if (index > -1) {\n _this.observers[name].splice(index, 1);\n }\n };\n }\n };\n\n _proto.sendOnly = function sendOnly(name, args) {\n var obs = this.observers[name];\n\n if (obs) {\n obs.forEach(function (fn) {\n try {\n fn.apply(undefined, args);\n } catch (error) {\n console.log(error, error.stack);\n }\n });\n }\n };\n\n _proto.send = function send(name, args) {\n this.sendOnly(name + BEFORE_EVENT, args);\n this.sendOnly(name, args);\n this.sendOnly(name + AFTER_EVENT, args);\n };\n\n return EventHandler;\n}();\n\nexport default EventHandler;","import { patchXMLHttpRequest } from './xhr-patch';\nimport { patchFetch } from './fetch-patch';\nimport { patchHistory } from './history-patch';\nimport EventHandler from '../event-handler';\nimport { HISTORY, FETCH, XMLHTTPREQUEST } from '../constants';\nvar patchEventHandler = new EventHandler();\nvar alreadyPatched = false;\n\nfunction patchAll() {\n if (!alreadyPatched) {\n alreadyPatched = true;\n patchXMLHttpRequest(function (event, task) {\n patchEventHandler.send(XMLHTTPREQUEST, [event, task]);\n });\n patchFetch(function (event, task) {\n patchEventHandler.send(FETCH, [event, task]);\n });\n patchHistory(function (event, task) {\n patchEventHandler.send(HISTORY, [event, task]);\n });\n }\n\n return patchEventHandler;\n}\n\nexport { patchAll, patchEventHandler };","import { Promise } from '../polyfills';\nimport { globalState } from './patch-utils';\nimport { SCHEDULE, INVOKE, FETCH } from '../constants';\nimport { scheduleMicroTask } from '../utils';\nimport { isFetchSupported } from '../http/fetch';\nexport function patchFetch(callback) {\n if (!isFetchSupported()) {\n return;\n }\n\n function scheduleTask(task) {\n task.state = SCHEDULE;\n callback(SCHEDULE, task);\n }\n\n function invokeTask(task) {\n task.state = INVOKE;\n callback(INVOKE, task);\n }\n\n function handleResponseError(task, error) {\n task.data.aborted = isAbortError(error);\n task.data.error = error;\n invokeTask(task);\n }\n\n function readStream(stream, task) {\n var reader = stream.getReader();\n\n var read = function read() {\n reader.read().then(function (_ref) {\n var done = _ref.done;\n\n if (done) {\n invokeTask(task);\n } else {\n read();\n }\n }, function (error) {\n handleResponseError(task, error);\n });\n };\n\n read();\n }\n\n var nativeFetch = window.fetch;\n\n window.fetch = function (input, init) {\n var fetchSelf = this;\n var args = arguments;\n var request, url;\n var isURL = input instanceof URL;\n\n if (typeof input === 'string' || isURL) {\n request = new Request(input, init);\n\n if (isURL) {\n url = request.url;\n } else {\n url = input;\n }\n } else if (input) {\n request = input;\n url = request.url;\n } else {\n return nativeFetch.apply(fetchSelf, args);\n }\n\n var task = {\n source: FETCH,\n state: '',\n type: 'macroTask',\n data: {\n target: request,\n method: request.method,\n url: url,\n aborted: false\n }\n };\n return new Promise(function (resolve, reject) {\n globalState.fetchInProgress = true;\n scheduleTask(task);\n var promise;\n\n try {\n promise = nativeFetch.apply(fetchSelf, [request]);\n } catch (error) {\n reject(error);\n task.data.error = error;\n invokeTask(task);\n globalState.fetchInProgress = false;\n return;\n }\n\n promise.then(function (response) {\n var clonedResponse = response.clone ? response.clone() : {};\n resolve(response);\n scheduleMicroTask(function () {\n task.data.response = response;\n var body = clonedResponse.body;\n\n if (body) {\n readStream(body, task);\n } else {\n invokeTask(task);\n }\n });\n }, function (error) {\n reject(error);\n scheduleMicroTask(function () {\n handleResponseError(task, error);\n });\n });\n globalState.fetchInProgress = false;\n });\n };\n}\n\nfunction isAbortError(error) {\n return error && error.name === 'AbortError';\n}","import { INVOKE, HISTORY } from '../constants';\nexport function patchHistory(callback) {\n if (!window.history) {\n return;\n }\n\n var nativePushState = history.pushState;\n\n if (typeof nativePushState === 'function') {\n history.pushState = function (state, title, url) {\n var task = {\n source: HISTORY,\n data: {\n state: state,\n title: title,\n url: url\n }\n };\n callback(INVOKE, task);\n nativePushState.apply(this, arguments);\n };\n }\n}","var __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar state = {\n bootstrapTime: null,\n lastHiddenStart: Number.MIN_SAFE_INTEGER\n};\nexport { __DEV__, state };","import { isPlatformSupported, isBrowser, now } from './common/utils';\nimport { patchAll } from './common/patching';\nimport { state } from './state';\nvar enabled = false;\nexport function bootstrap() {\n if (isPlatformSupported()) {\n patchAll();\n state.bootstrapTime = now();\n enabled = true;\n } else if (isBrowser) {\n console.log('[Elastic APM] platform is not supported!');\n }\n\n return enabled;\n}","function filePathToFileName(fileUrl) {\n var origin = window.location.origin || window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n\n if (fileUrl.indexOf(origin) > -1) {\n fileUrl = fileUrl.replace(origin + '/', '');\n }\n\n return fileUrl;\n}\n\nfunction cleanFilePath(filePath) {\n if (filePath === void 0) {\n filePath = '';\n }\n\n if (filePath === '') {\n filePath = '';\n }\n\n return filePath;\n}\n\nfunction isFileInline(fileUrl) {\n if (fileUrl) {\n return window.location.href.indexOf(fileUrl) === 0;\n }\n\n return false;\n}\n\nfunction normalizeStackFrames(stackFrames) {\n return stackFrames.map(function (frame) {\n if (frame.functionName) {\n frame.functionName = normalizeFunctionName(frame.functionName);\n }\n\n return frame;\n });\n}\n\nfunction normalizeFunctionName(fnName) {\n var parts = fnName.split('/');\n\n if (parts.length > 1) {\n fnName = ['Object', parts[parts.length - 1]].join('.');\n } else {\n fnName = parts[0];\n }\n\n fnName = fnName.replace(/.<$/gi, '.');\n fnName = fnName.replace(/^Anonymous function$/, '');\n parts = fnName.split('.');\n\n if (parts.length > 1) {\n fnName = parts[parts.length - 1];\n } else {\n fnName = parts[0];\n }\n\n return fnName;\n}\n\nfunction isValidStackTrace(stackTraces) {\n if (stackTraces.length === 0) {\n return false;\n }\n\n if (stackTraces.length === 1) {\n var stackTrace = stackTraces[0];\n return 'lineNumber' in stackTrace;\n }\n\n return true;\n}\n\nexport function createStackTraces(stackParser, errorEvent) {\n var error = errorEvent.error,\n filename = errorEvent.filename,\n lineno = errorEvent.lineno,\n colno = errorEvent.colno;\n var stackTraces = [];\n\n if (error) {\n try {\n stackTraces = stackParser.parse(error);\n } catch (e) {}\n }\n\n if (!isValidStackTrace(stackTraces)) {\n stackTraces = [{\n fileName: filename,\n lineNumber: lineno,\n columnNumber: colno\n }];\n }\n\n var normalizedStackTraces = normalizeStackFrames(stackTraces);\n return normalizedStackTraces.map(function (stack) {\n var fileName = stack.fileName,\n lineNumber = stack.lineNumber,\n columnNumber = stack.columnNumber,\n _stack$functionName = stack.functionName,\n functionName = _stack$functionName === void 0 ? '' : _stack$functionName;\n\n if (!fileName && !lineNumber) {\n return {};\n }\n\n if (!columnNumber && !lineNumber) {\n return {};\n }\n\n var filePath = cleanFilePath(fileName);\n var cleanedFileName = filePathToFileName(filePath);\n\n if (isFileInline(filePath)) {\n cleanedFileName = '(inline script)';\n }\n\n return {\n abs_path: fileName,\n filename: cleanedFileName,\n function: functionName,\n lineno: lineNumber,\n colno: columnNumber\n };\n });\n}\nexport function filterInvalidFrames(frames) {\n return frames.filter(function (_ref) {\n var filename = _ref.filename,\n lineno = _ref.lineno;\n return typeof filename !== 'undefined' && typeof lineno !== 'undefined';\n });\n}","import { isBrowser } from './utils';\n\nfunction isDefaultPort(port, protocol) {\n switch (protocol) {\n case 'http:':\n return port === '80';\n\n case 'https:':\n return port === '443';\n }\n\n return true;\n}\n\nvar RULES = [['#', 'hash'], ['?', 'query'], ['/', 'path'], ['@', 'auth', 1], [NaN, 'host', undefined, 1]];\nvar PROTOCOL_REGEX = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i;\nexport var Url = function () {\n function Url(url) {\n var _this$extractProtocol = this.extractProtocol(url || ''),\n protocol = _this$extractProtocol.protocol,\n address = _this$extractProtocol.address,\n slashes = _this$extractProtocol.slashes;\n\n var relative = !protocol && !slashes;\n var location = this.getLocation();\n var instructions = RULES.slice();\n address = address.replace('\\\\', '/');\n\n if (!slashes) {\n instructions[2] = [NaN, 'path'];\n }\n\n var index;\n\n for (var i = 0; i < instructions.length; i++) {\n var instruction = instructions[i];\n var parse = instruction[0];\n var key = instruction[1];\n\n if (typeof parse === 'string') {\n index = address.indexOf(parse);\n\n if (~index) {\n var instLength = instruction[2];\n\n if (instLength) {\n var newIndex = address.lastIndexOf(parse);\n index = Math.max(index, newIndex);\n this[key] = address.slice(0, index);\n address = address.slice(index + instLength);\n } else {\n this[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else {\n this[key] = address;\n address = '';\n }\n\n this[key] = this[key] || (relative && instruction[3] ? location[key] || '' : '');\n if (instruction[3]) this[key] = this[key].toLowerCase();\n }\n\n if (relative && this.path.charAt(0) !== '/') {\n this.path = '/' + this.path;\n }\n\n this.relative = relative;\n this.protocol = protocol || location.protocol;\n this.hostname = this.host;\n this.port = '';\n\n if (/:\\d+$/.test(this.host)) {\n var value = this.host.split(':');\n var port = value.pop();\n var hostname = value.join(':');\n\n if (isDefaultPort(port, this.protocol)) {\n this.host = hostname;\n } else {\n this.port = port;\n }\n\n this.hostname = hostname;\n }\n\n this.origin = this.protocol && this.host && this.protocol !== 'file:' ? this.protocol + '//' + this.host : 'null';\n this.href = this.toString();\n }\n\n var _proto = Url.prototype;\n\n _proto.toString = function toString() {\n var result = this.protocol;\n result += '//';\n\n if (this.auth) {\n var REDACTED = '[REDACTED]';\n var userpass = this.auth.split(':');\n var username = userpass[0] ? REDACTED : '';\n var password = userpass[1] ? ':' + REDACTED : '';\n result += username + password + '@';\n }\n\n result += this.host;\n result += this.path;\n result += this.query;\n result += this.hash;\n return result;\n };\n\n _proto.getLocation = function getLocation() {\n var globalVar = {};\n\n if (isBrowser) {\n globalVar = window;\n }\n\n return globalVar.location;\n };\n\n _proto.extractProtocol = function extractProtocol(url) {\n var match = PROTOCOL_REGEX.exec(url);\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n address: match[3]\n };\n };\n\n return Url;\n}();\nexport function slugifyUrl(urlStr, depth) {\n if (depth === void 0) {\n depth = 2;\n }\n\n var parsedUrl = new Url(urlStr);\n var query = parsedUrl.query,\n path = parsedUrl.path;\n var pathParts = path.substring(1).split('/');\n var redactString = ':id';\n var wildcard = '*';\n var specialCharsRegex = /\\W|_/g;\n var digitsRegex = /[0-9]/g;\n var lowerCaseRegex = /[a-z]/g;\n var upperCaseRegex = /[A-Z]/g;\n var redactedParts = [];\n var redactedBefore = false;\n\n for (var index = 0; index < pathParts.length; index++) {\n var part = pathParts[index];\n\n if (redactedBefore || index > depth - 1) {\n if (part) {\n redactedParts.push(wildcard);\n }\n\n break;\n }\n\n var numberOfSpecialChars = (part.match(specialCharsRegex) || []).length;\n\n if (numberOfSpecialChars >= 2) {\n redactedParts.push(redactString);\n redactedBefore = true;\n continue;\n }\n\n var numberOfDigits = (part.match(digitsRegex) || []).length;\n\n if (numberOfDigits > 3 || part.length > 3 && numberOfDigits / part.length >= 0.3) {\n redactedParts.push(redactString);\n redactedBefore = true;\n continue;\n }\n\n var numberofUpperCase = (part.match(upperCaseRegex) || []).length;\n var numberofLowerCase = (part.match(lowerCaseRegex) || []).length;\n var lowerCaseRate = numberofLowerCase / part.length;\n var upperCaseRate = numberofUpperCase / part.length;\n\n if (part.length > 5 && (upperCaseRate > 0.3 && upperCaseRate < 0.6 || lowerCaseRate > 0.3 && lowerCaseRate < 0.6)) {\n redactedParts.push(redactString);\n redactedBefore = true;\n continue;\n }\n\n part && redactedParts.push(part);\n }\n\n var redacted = '/' + (redactedParts.length >= 2 ? redactedParts.join('/') : redactedParts.join('')) + (query ? '?{query}' : '');\n return redacted;\n}","var _excluded = [\"tags\"];\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { Url } from './url';\nimport { PAGE_LOAD, NAVIGATION } from './constants';\nimport { getServerTimingInfo, PERF, isPerfTimelineSupported } from './utils';\nvar LEFT_SQUARE_BRACKET = 91;\nvar RIGHT_SQUARE_BRACKET = 93;\nvar EXTERNAL = 'external';\nvar RESOURCE = 'resource';\nvar HARD_NAVIGATION = 'hard-navigation';\n\nfunction getPortNumber(port, protocol) {\n if (port === '') {\n port = protocol === 'http:' ? '80' : protocol === 'https:' ? '443' : '';\n }\n\n return port;\n}\n\nfunction getResponseContext(perfTimingEntry) {\n var transferSize = perfTimingEntry.transferSize,\n encodedBodySize = perfTimingEntry.encodedBodySize,\n decodedBodySize = perfTimingEntry.decodedBodySize,\n serverTiming = perfTimingEntry.serverTiming;\n var respContext = {\n transfer_size: transferSize,\n encoded_body_size: encodedBodySize,\n decoded_body_size: decodedBodySize\n };\n var serverTimingStr = getServerTimingInfo(serverTiming);\n\n if (serverTimingStr) {\n respContext.headers = {\n 'server-timing': serverTimingStr\n };\n }\n\n return respContext;\n}\n\nfunction getDestination(parsedUrl) {\n var port = parsedUrl.port,\n protocol = parsedUrl.protocol,\n hostname = parsedUrl.hostname;\n var portNumber = getPortNumber(port, protocol);\n var ipv6Hostname = hostname.charCodeAt(0) === LEFT_SQUARE_BRACKET && hostname.charCodeAt(hostname.length - 1) === RIGHT_SQUARE_BRACKET;\n var address = hostname;\n\n if (ipv6Hostname) {\n address = hostname.slice(1, -1);\n }\n\n return {\n service: {\n resource: hostname + ':' + portNumber,\n name: '',\n type: ''\n },\n address: address,\n port: Number(portNumber)\n };\n}\n\nfunction getResourceContext(data) {\n var entry = data.entry,\n url = data.url;\n var parsedUrl = new Url(url);\n var destination = getDestination(parsedUrl);\n return {\n http: {\n url: url,\n response: getResponseContext(entry)\n },\n destination: destination\n };\n}\n\nfunction getExternalContext(data) {\n var url = data.url,\n method = data.method,\n target = data.target,\n response = data.response;\n var parsedUrl = new Url(url);\n var destination = getDestination(parsedUrl);\n var context = {\n http: {\n method: method,\n url: parsedUrl.href\n },\n destination: destination\n };\n var statusCode;\n\n if (target && typeof target.status !== 'undefined') {\n statusCode = target.status;\n } else if (response) {\n statusCode = response.status;\n }\n\n context.http.status_code = statusCode;\n return context;\n}\n\nfunction getNavigationContext(data) {\n var url = data.url;\n var parsedUrl = new Url(url);\n var destination = getDestination(parsedUrl);\n return {\n destination: destination\n };\n}\n\nexport function getPageContext() {\n return {\n page: {\n referer: document.referrer,\n url: location.href\n }\n };\n}\nexport function addSpanContext(span, data) {\n if (!data) {\n return;\n }\n\n var type = span.type;\n var context;\n\n switch (type) {\n case EXTERNAL:\n context = getExternalContext(data);\n break;\n\n case RESOURCE:\n context = getResourceContext(data);\n break;\n\n case HARD_NAVIGATION:\n context = getNavigationContext(data);\n break;\n }\n\n span.addContext(context);\n}\nexport function addTransactionContext(transaction, _temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n tags = _ref.tags,\n configContext = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n var pageContext = getPageContext();\n var responseContext = {};\n\n if (transaction.type === PAGE_LOAD && isPerfTimelineSupported()) {\n var entries = PERF.getEntriesByType(NAVIGATION);\n\n if (entries && entries.length > 0) {\n responseContext = {\n response: getResponseContext(entries[0])\n };\n }\n }\n\n transaction.addContext(pageContext, responseContext, configContext);\n}","import { KEYWORD_LIMIT } from './constants';\nvar METADATA_MODEL = {\n service: {\n name: [KEYWORD_LIMIT, true],\n version: true,\n agent: {\n version: [KEYWORD_LIMIT, true]\n },\n environment: true\n },\n labels: {\n '*': true\n }\n};\nvar RESPONSE_MODEL = {\n '*': true,\n headers: {\n '*': true\n }\n};\nvar DESTINATION_MODEL = {\n address: [KEYWORD_LIMIT],\n service: {\n '*': [KEYWORD_LIMIT, true]\n }\n};\nvar CONTEXT_MODEL = {\n user: {\n id: true,\n email: true,\n username: true\n },\n tags: {\n '*': true\n },\n http: {\n response: RESPONSE_MODEL\n },\n destination: DESTINATION_MODEL,\n response: RESPONSE_MODEL\n};\nvar SPAN_MODEL = {\n name: [KEYWORD_LIMIT, true],\n type: [KEYWORD_LIMIT, true],\n id: [KEYWORD_LIMIT, true],\n trace_id: [KEYWORD_LIMIT, true],\n parent_id: [KEYWORD_LIMIT, true],\n transaction_id: [KEYWORD_LIMIT, true],\n subtype: true,\n action: true,\n context: CONTEXT_MODEL\n};\nvar TRANSACTION_MODEL = {\n name: true,\n parent_id: true,\n type: [KEYWORD_LIMIT, true],\n id: [KEYWORD_LIMIT, true],\n trace_id: [KEYWORD_LIMIT, true],\n span_count: {\n started: [KEYWORD_LIMIT, true]\n },\n context: CONTEXT_MODEL\n};\nvar ERROR_MODEL = {\n id: [KEYWORD_LIMIT, true],\n trace_id: true,\n transaction_id: true,\n parent_id: true,\n culprit: true,\n exception: {\n type: true\n },\n transaction: {\n type: true\n },\n context: CONTEXT_MODEL\n};\n\nfunction truncate(value, limit, required, placeholder) {\n if (limit === void 0) {\n limit = KEYWORD_LIMIT;\n }\n\n if (required === void 0) {\n required = false;\n }\n\n if (placeholder === void 0) {\n placeholder = 'N/A';\n }\n\n if (required && isEmpty(value)) {\n value = placeholder;\n }\n\n if (typeof value === 'string') {\n return value.substring(0, limit);\n }\n\n return value;\n}\n\nfunction isEmpty(value) {\n return value == null || value === '' || typeof value === 'undefined';\n}\n\nfunction replaceValue(target, key, currModel) {\n var value = truncate(target[key], currModel[0], currModel[1]);\n\n if (isEmpty(value)) {\n delete target[key];\n return;\n }\n\n target[key] = value;\n}\n\nfunction truncateModel(model, target, childTarget) {\n if (model === void 0) {\n model = {};\n }\n\n if (childTarget === void 0) {\n childTarget = target;\n }\n\n var keys = Object.keys(model);\n var emptyArr = [];\n\n var _loop = function _loop(i) {\n var currKey = keys[i];\n var currModel = model[currKey] === true ? emptyArr : model[currKey];\n\n if (!Array.isArray(currModel)) {\n truncateModel(currModel, target, childTarget[currKey]);\n } else {\n if (currKey === '*') {\n Object.keys(childTarget).forEach(function (key) {\n return replaceValue(childTarget, key, currModel);\n });\n } else {\n replaceValue(childTarget, currKey, currModel);\n }\n }\n };\n\n for (var i = 0; i < keys.length; i++) {\n _loop(i);\n }\n\n return target;\n}\n\nexport { truncate, truncateModel, SPAN_MODEL, TRANSACTION_MODEL, ERROR_MODEL, METADATA_MODEL, RESPONSE_MODEL };","var _excluded = [\"tags\"];\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { createStackTraces, filterInvalidFrames } from './stack-trace';\nimport { generateRandomId, merge, extend } from '../common/utils';\nimport { getPageContext } from '../common/context';\nimport { truncateModel, ERROR_MODEL } from '../common/truncate';\nimport stackParser from 'error-stack-parser';\nvar IGNORE_KEYS = ['stack', 'message'];\nvar PROMISE_REJECTION_PREFIX = 'Unhandled promise rejection: ';\n\nfunction getErrorProperties(error) {\n var propertyFound = false;\n var properties = {};\n Object.keys(error).forEach(function (key) {\n if (IGNORE_KEYS.indexOf(key) >= 0) {\n return;\n }\n\n var val = error[key];\n\n if (val == null || typeof val === 'function') {\n return;\n }\n\n if (typeof val === 'object') {\n if (typeof val.toISOString !== 'function') return;\n val = val.toISOString();\n }\n\n properties[key] = val;\n propertyFound = true;\n });\n\n if (propertyFound) {\n return properties;\n }\n}\n\nvar ErrorLogging = function () {\n function ErrorLogging(apmServer, configService, transactionService) {\n this._apmServer = apmServer;\n this._configService = configService;\n this._transactionService = transactionService;\n }\n\n var _proto = ErrorLogging.prototype;\n\n _proto.createErrorDataModel = function createErrorDataModel(errorEvent) {\n var frames = createStackTraces(stackParser, errorEvent);\n var filteredFrames = filterInvalidFrames(frames);\n var culprit = '(inline script)';\n var lastFrame = filteredFrames[filteredFrames.length - 1];\n\n if (lastFrame && lastFrame.filename) {\n culprit = lastFrame.filename;\n }\n\n var message = errorEvent.message,\n error = errorEvent.error;\n var errorMessage = message;\n var errorType = '';\n var errorContext = {};\n\n if (error && typeof error === 'object') {\n errorMessage = errorMessage || error.message;\n errorType = error.name;\n var customProperties = getErrorProperties(error);\n\n if (customProperties) {\n errorContext.custom = customProperties;\n }\n }\n\n if (!errorType) {\n if (errorMessage && errorMessage.indexOf(':') > -1) {\n errorType = errorMessage.split(':')[0];\n }\n }\n\n var currentTransaction = this._transactionService.getCurrentTransaction();\n\n var transactionContext = currentTransaction ? currentTransaction.context : {};\n\n var _this$_configService$ = this._configService.get('context'),\n tags = _this$_configService$.tags,\n configContext = _objectWithoutPropertiesLoose(_this$_configService$, _excluded);\n\n var pageContext = getPageContext();\n var context = merge({}, pageContext, transactionContext, configContext, errorContext);\n var errorObject = {\n id: generateRandomId(),\n culprit: culprit,\n exception: {\n message: errorMessage,\n stacktrace: filteredFrames,\n type: errorType\n },\n context: context\n };\n\n if (currentTransaction) {\n errorObject = extend(errorObject, {\n trace_id: currentTransaction.traceId,\n parent_id: currentTransaction.id,\n transaction_id: currentTransaction.id,\n transaction: {\n type: currentTransaction.type,\n sampled: currentTransaction.sampled\n }\n });\n }\n\n return truncateModel(ERROR_MODEL, errorObject);\n };\n\n _proto.logErrorEvent = function logErrorEvent(errorEvent) {\n if (typeof errorEvent === 'undefined') {\n return;\n }\n\n var errorObject = this.createErrorDataModel(errorEvent);\n\n if (typeof errorObject.exception.message === 'undefined') {\n return;\n }\n\n this._apmServer.addError(errorObject);\n };\n\n _proto.registerListeners = function registerListeners() {\n var _this = this;\n\n window.addEventListener('error', function (errorEvent) {\n return _this.logErrorEvent(errorEvent);\n });\n window.addEventListener('unhandledrejection', function (promiseRejectionEvent) {\n return _this.logPromiseEvent(promiseRejectionEvent);\n });\n };\n\n _proto.logPromiseEvent = function logPromiseEvent(promiseRejectionEvent) {\n var reason = promiseRejectionEvent.reason;\n\n if (reason == null) {\n reason = '';\n }\n\n var errorEvent;\n\n if (typeof reason.message === 'string') {\n var name = reason.name ? reason.name + ': ' : '';\n errorEvent = {\n error: reason,\n message: PROMISE_REJECTION_PREFIX + name + reason.message\n };\n } else {\n errorEvent = this._parseRejectReason(reason);\n }\n\n this.logErrorEvent(errorEvent);\n };\n\n _proto.logError = function logError(messageOrError) {\n var errorEvent = {};\n\n if (typeof messageOrError === 'string') {\n errorEvent.message = messageOrError;\n } else {\n errorEvent.error = messageOrError;\n }\n\n return this.logErrorEvent(errorEvent);\n };\n\n _proto._parseRejectReason = function _parseRejectReason(reason) {\n var errorEvent = {\n message: PROMISE_REJECTION_PREFIX\n };\n\n if (Array.isArray(reason)) {\n errorEvent.message += '';\n } else if (typeof reason === 'object') {\n try {\n errorEvent.message += JSON.stringify(reason);\n errorEvent.error = reason;\n } catch (error) {\n errorEvent.message += '';\n }\n } else if (typeof reason === 'function') {\n errorEvent.message += '';\n } else {\n errorEvent.message += reason;\n }\n\n return errorEvent;\n };\n\n return ErrorLogging;\n}();\n\nexport default ErrorLogging;","var Queue = function () {\n function Queue(onFlush, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n this.onFlush = onFlush;\n this.items = [];\n this.queueLimit = opts.queueLimit || -1;\n this.flushInterval = opts.flushInterval || 0;\n this.timeoutId = undefined;\n }\n\n var _proto = Queue.prototype;\n\n _proto._setTimer = function _setTimer() {\n var _this = this;\n\n this.timeoutId = setTimeout(function () {\n return _this.flush();\n }, this.flushInterval);\n };\n\n _proto._clear = function _clear() {\n if (typeof this.timeoutId !== 'undefined') {\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n }\n\n this.items = [];\n };\n\n _proto.flush = function flush() {\n this.onFlush(this.items);\n\n this._clear();\n };\n\n _proto.add = function add(item) {\n this.items.push(item);\n\n if (this.queueLimit !== -1 && this.items.length >= this.queueLimit) {\n this.flush();\n } else {\n if (typeof this.timeoutId === 'undefined') {\n this._setTimer();\n }\n }\n };\n\n return Queue;\n}();\n\nexport default Queue;","var NDJSON = function () {\n function NDJSON() {}\n\n NDJSON.stringify = function stringify(object) {\n return JSON.stringify(object) + '\\n';\n };\n\n return NDJSON;\n}();\n\nexport default NDJSON;","import { isRedirectInfoAvailable } from '../../common/utils';\nvar NAVIGATION_TIMING_MARKS = ['fetchStart', 'domainLookupStart', 'domainLookupEnd', 'connectStart', 'connectEnd', 'requestStart', 'responseStart', 'responseEnd', 'domLoading', 'domInteractive', 'domContentLoadedEventStart', 'domContentLoadedEventEnd', 'domComplete', 'loadEventStart', 'loadEventEnd'];\nvar COMPRESSED_NAV_TIMING_MARKS = ['fs', 'ls', 'le', 'cs', 'ce', 'qs', 'rs', 're', 'dl', 'di', 'ds', 'de', 'dc', 'es', 'ee'];\n\nfunction getPageLoadMarks(timing) {\n var marks = getNavigationTimingMarks(timing);\n\n if (marks == null) {\n return null;\n }\n\n return {\n navigationTiming: marks,\n agent: {\n timeToFirstByte: marks.responseStart,\n domInteractive: marks.domInteractive,\n domComplete: marks.domComplete\n }\n };\n}\n\nfunction getNavigationTimingMarks(timing) {\n var redirectStart = timing.redirectStart,\n fetchStart = timing.fetchStart,\n navigationStart = timing.navigationStart,\n responseStart = timing.responseStart,\n responseEnd = timing.responseEnd;\n\n if (fetchStart >= navigationStart && responseStart >= fetchStart && responseEnd >= responseStart) {\n var marks = {};\n NAVIGATION_TIMING_MARKS.forEach(function (timingKey) {\n var m = timing[timingKey];\n\n if (m && m >= fetchStart) {\n if (isRedirectInfoAvailable(timing)) {\n marks[timingKey] = parseInt(m - redirectStart);\n } else {\n marks[timingKey] = parseInt(m - fetchStart);\n }\n }\n });\n return marks;\n }\n\n return null;\n}\n\nexport { getPageLoadMarks, NAVIGATION_TIMING_MARKS, COMPRESSED_NAV_TIMING_MARKS };","import { Promise } from './polyfills';\nimport { NAVIGATION_TIMING_MARKS, COMPRESSED_NAV_TIMING_MARKS } from '../performance-monitoring/navigation/marks';\nimport { isBeaconInspectionEnabled } from './utils';\n\nfunction compressStackFrames(frames) {\n return frames.map(function (frame) {\n return {\n ap: frame.abs_path,\n f: frame.filename,\n fn: frame.function,\n li: frame.lineno,\n co: frame.colno\n };\n });\n}\n\nfunction compressResponse(response) {\n return {\n ts: response.transfer_size,\n ebs: response.encoded_body_size,\n dbs: response.decoded_body_size\n };\n}\n\nfunction compressHTTP(http) {\n var compressed = {};\n var method = http.method,\n status_code = http.status_code,\n url = http.url,\n response = http.response;\n compressed.url = url;\n\n if (method) {\n compressed.mt = method;\n }\n\n if (status_code) {\n compressed.sc = status_code;\n }\n\n if (response) {\n compressed.r = compressResponse(response);\n }\n\n return compressed;\n}\n\nfunction compressContext(context) {\n if (!context) {\n return null;\n }\n\n var compressed = {};\n var page = context.page,\n http = context.http,\n response = context.response,\n destination = context.destination,\n user = context.user,\n custom = context.custom;\n\n if (page) {\n compressed.p = {\n rf: page.referer,\n url: page.url\n };\n }\n\n if (http) {\n compressed.h = compressHTTP(http);\n }\n\n if (response) {\n compressed.r = compressResponse(response);\n }\n\n if (destination) {\n var service = destination.service;\n compressed.dt = {\n se: {\n n: service.name,\n t: service.type,\n rc: service.resource\n },\n ad: destination.address,\n po: destination.port\n };\n }\n\n if (user) {\n compressed.u = {\n id: user.id,\n un: user.username,\n em: user.email\n };\n }\n\n if (custom) {\n compressed.cu = custom;\n }\n\n return compressed;\n}\n\nfunction compressMarks(marks) {\n if (!marks) {\n return null;\n }\n\n var compressedNtMarks = compressNavigationTimingMarks(marks.navigationTiming);\n var compressed = {\n nt: compressedNtMarks,\n a: compressAgentMarks(compressedNtMarks, marks.agent)\n };\n return compressed;\n}\n\nfunction compressNavigationTimingMarks(ntMarks) {\n if (!ntMarks) {\n return null;\n }\n\n var compressed = {};\n COMPRESSED_NAV_TIMING_MARKS.forEach(function (mark, index) {\n var mapping = NAVIGATION_TIMING_MARKS[index];\n compressed[mark] = ntMarks[mapping];\n });\n return compressed;\n}\n\nfunction compressAgentMarks(compressedNtMarks, agentMarks) {\n var compressed = {};\n\n if (compressedNtMarks) {\n compressed = {\n fb: compressedNtMarks.rs,\n di: compressedNtMarks.di,\n dc: compressedNtMarks.dc\n };\n }\n\n if (agentMarks) {\n var fp = agentMarks.firstContentfulPaint;\n var lp = agentMarks.largestContentfulPaint;\n\n if (fp) {\n compressed.fp = fp;\n }\n\n if (lp) {\n compressed.lp = lp;\n }\n }\n\n if (Object.keys(compressed).length === 0) {\n return null;\n }\n\n return compressed;\n}\n\nexport function compressMetadata(metadata) {\n var service = metadata.service,\n labels = metadata.labels;\n var agent = service.agent,\n language = service.language;\n return {\n se: {\n n: service.name,\n ve: service.version,\n a: {\n n: agent.name,\n ve: agent.version\n },\n la: {\n n: language.name\n },\n en: service.environment\n },\n l: labels\n };\n}\nexport function compressTransaction(transaction) {\n var spans = transaction.spans.map(function (span) {\n var spanData = {\n id: span.id,\n n: span.name,\n t: span.type,\n s: span.start,\n d: span.duration,\n c: compressContext(span.context),\n o: span.outcome,\n sr: span.sample_rate\n };\n\n if (span.parent_id !== transaction.id) {\n spanData.pid = span.parent_id;\n }\n\n if (span.sync === true) {\n spanData.sy = true;\n }\n\n if (span.subtype) {\n spanData.su = span.subtype;\n }\n\n if (span.action) {\n spanData.ac = span.action;\n }\n\n return spanData;\n });\n var tr = {\n id: transaction.id,\n tid: transaction.trace_id,\n n: transaction.name,\n t: transaction.type,\n d: transaction.duration,\n c: compressContext(transaction.context),\n k: compressMarks(transaction.marks),\n me: compressMetricsets(transaction.breakdown),\n y: spans,\n yc: {\n sd: spans.length\n },\n sm: transaction.sampled,\n sr: transaction.sample_rate,\n o: transaction.outcome\n };\n\n if (transaction.experience) {\n var _transaction$experien = transaction.experience,\n cls = _transaction$experien.cls,\n fid = _transaction$experien.fid,\n tbt = _transaction$experien.tbt,\n longtask = _transaction$experien.longtask;\n tr.exp = {\n cls: cls,\n fid: fid,\n tbt: tbt,\n lt: longtask\n };\n }\n\n if (transaction.session) {\n var _transaction$session = transaction.session,\n id = _transaction$session.id,\n sequence = _transaction$session.sequence;\n tr.ses = {\n id: id,\n seq: sequence\n };\n }\n\n return tr;\n}\nexport function compressError(error) {\n var exception = error.exception;\n var compressed = {\n id: error.id,\n cl: error.culprit,\n ex: {\n mg: exception.message,\n st: compressStackFrames(exception.stacktrace),\n t: error.type\n },\n c: compressContext(error.context)\n };\n var transaction = error.transaction;\n\n if (transaction) {\n compressed.tid = error.trace_id;\n compressed.pid = error.parent_id;\n compressed.xid = error.transaction_id;\n compressed.x = {\n t: transaction.type,\n sm: transaction.sampled\n };\n }\n\n return compressed;\n}\nexport function compressMetricsets(breakdowns) {\n return breakdowns.map(function (_ref) {\n var span = _ref.span,\n samples = _ref.samples;\n return {\n y: {\n t: span.type\n },\n sa: {\n ysc: {\n v: samples['span.self_time.count'].value\n },\n yss: {\n v: samples['span.self_time.sum.us'].value\n }\n }\n };\n });\n}\nexport function compressPayload(params, type) {\n if (type === void 0) {\n type = 'gzip';\n }\n\n var isCompressionStreamSupported = typeof CompressionStream === 'function';\n return new Promise(function (resolve) {\n if (!isCompressionStreamSupported) {\n return resolve(params);\n }\n\n if (isBeaconInspectionEnabled()) {\n return resolve(params);\n }\n\n var payload = params.payload,\n headers = params.headers,\n beforeSend = params.beforeSend;\n var payloadStream = new Blob([payload]).stream();\n var compressedStream = payloadStream.pipeThrough(new CompressionStream(type));\n return new Response(compressedStream).blob().then(function (payload) {\n headers['Content-Encoding'] = type;\n return resolve({\n payload: payload,\n headers: headers,\n beforeSend: beforeSend\n });\n });\n });\n}","import { XHR_IGNORE } from '../patching/patch-utils';\nimport { isResponseSuccessful } from './response-status';\nimport { Promise } from '../polyfills';\nexport function sendXHR(method, url, _ref) {\n var _ref$timeout = _ref.timeout,\n timeout = _ref$timeout === void 0 ? HTTP_REQUEST_TIMEOUT : _ref$timeout,\n payload = _ref.payload,\n headers = _ref.headers,\n beforeSend = _ref.beforeSend,\n sendCredentials = _ref.sendCredentials;\n return new Promise(function (resolve, reject) {\n var xhr = new window.XMLHttpRequest();\n xhr[XHR_IGNORE] = true;\n xhr.open(method, url, true);\n xhr.timeout = timeout;\n xhr.withCredentials = sendCredentials;\n\n if (headers) {\n for (var header in headers) {\n if (headers.hasOwnProperty(header)) {\n xhr.setRequestHeader(header, headers[header]);\n }\n }\n }\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n var status = xhr.status,\n responseText = xhr.responseText;\n\n if (isResponseSuccessful(status)) {\n resolve(xhr);\n } else {\n reject({\n url: url,\n status: status,\n responseText: responseText\n });\n }\n }\n };\n\n xhr.onerror = function () {\n var status = xhr.status,\n responseText = xhr.responseText;\n reject({\n url: url,\n status: status,\n responseText: responseText\n });\n };\n\n var canSend = true;\n\n if (typeof beforeSend === 'function') {\n canSend = beforeSend({\n url: url,\n method: method,\n headers: headers,\n payload: payload,\n xhr: xhr\n });\n }\n\n if (canSend) {\n xhr.send(payload);\n } else {\n reject({\n url: url,\n status: 0,\n responseText: 'Request rejected by user configuration.'\n });\n }\n });\n}","import Queue from './queue';\nimport throttle from './throttle';\nimport NDJSON from './ndjson';\nimport { truncateModel, METADATA_MODEL } from './truncate';\nimport { ERRORS, HTTP_REQUEST_TIMEOUT, QUEUE_FLUSH, TRANSACTIONS } from './constants';\nimport { noop } from './utils';\nimport { Promise } from './polyfills';\nimport { compressMetadata, compressTransaction, compressError, compressPayload } from './compress';\nimport { __DEV__ } from '../state';\nimport { sendFetchRequest, shouldUseFetchWithKeepAlive } from './http/fetch';\nimport { sendXHR } from './http/xhr';\nvar THROTTLE_INTERVAL = 60000;\n\nvar ApmServer = function () {\n function ApmServer(configService, loggingService) {\n this._configService = configService;\n this._loggingService = loggingService;\n this.queue = undefined;\n this.throttleEvents = noop;\n }\n\n var _proto = ApmServer.prototype;\n\n _proto.init = function init() {\n var _this = this;\n\n var queueLimit = this._configService.get('queueLimit');\n\n var flushInterval = this._configService.get('flushInterval');\n\n var limit = this._configService.get('eventsLimit');\n\n var onFlush = function onFlush(events) {\n var promise = _this.sendEvents(events);\n\n if (promise) {\n promise.catch(function (reason) {\n _this._loggingService.warn('Failed sending events!', _this._constructError(reason));\n });\n }\n };\n\n this.queue = new Queue(onFlush, {\n queueLimit: queueLimit,\n flushInterval: flushInterval\n });\n this.throttleEvents = throttle(this.queue.add.bind(this.queue), function () {\n return _this._loggingService.warn('Dropped events due to throttling!');\n }, {\n limit: limit,\n interval: THROTTLE_INTERVAL\n });\n\n this._configService.observeEvent(QUEUE_FLUSH, function () {\n _this.queue.flush();\n });\n };\n\n _proto._postJson = function _postJson(endPoint, payload) {\n var _this2 = this;\n\n var headers = {\n 'Content-Type': 'application/x-ndjson'\n };\n\n var apmRequest = this._configService.get('apmRequest');\n\n var params = {\n payload: payload,\n headers: headers,\n beforeSend: apmRequest\n };\n return compressPayload(params).catch(function (error) {\n if (__DEV__) {\n _this2._loggingService.debug('Compressing the payload using CompressionStream API failed', error.message);\n }\n\n return params;\n }).then(function (result) {\n return _this2._makeHttpRequest('POST', endPoint, result);\n }).then(function (_ref) {\n var responseText = _ref.responseText;\n return responseText;\n });\n };\n\n _proto._constructError = function _constructError(reason) {\n var url = reason.url,\n status = reason.status,\n responseText = reason.responseText;\n\n if (typeof status == 'undefined') {\n return reason;\n }\n\n var message = url + ' HTTP status: ' + status;\n\n if (__DEV__ && responseText) {\n try {\n var serverErrors = [];\n var response = JSON.parse(responseText);\n\n if (response.errors && response.errors.length > 0) {\n response.errors.forEach(function (err) {\n return serverErrors.push(err.message);\n });\n message += ' ' + serverErrors.join(',');\n }\n } catch (e) {\n this._loggingService.debug('Error parsing response from APM server', e);\n }\n }\n\n return new Error(message);\n };\n\n _proto._makeHttpRequest = function _makeHttpRequest(method, url, _temp) {\n var _ref2 = _temp === void 0 ? {} : _temp,\n _ref2$timeout = _ref2.timeout,\n timeout = _ref2$timeout === void 0 ? HTTP_REQUEST_TIMEOUT : _ref2$timeout,\n payload = _ref2.payload,\n headers = _ref2.headers,\n beforeSend = _ref2.beforeSend;\n\n var sendCredentials = this._configService.get('sendCredentials');\n\n if (!beforeSend && shouldUseFetchWithKeepAlive(method, payload)) {\n return sendFetchRequest(method, url, {\n keepalive: true,\n timeout: timeout,\n payload: payload,\n headers: headers,\n sendCredentials: sendCredentials\n }).catch(function (reason) {\n if (reason instanceof TypeError) {\n return sendXHR(method, url, {\n timeout: timeout,\n payload: payload,\n headers: headers,\n beforeSend: beforeSend,\n sendCredentials: sendCredentials\n });\n }\n\n throw reason;\n });\n }\n\n return sendXHR(method, url, {\n timeout: timeout,\n payload: payload,\n headers: headers,\n beforeSend: beforeSend,\n sendCredentials: sendCredentials\n });\n };\n\n _proto.fetchConfig = function fetchConfig(serviceName, environment) {\n var _this3 = this;\n\n var _this$getEndpoints = this.getEndpoints(),\n configEndpoint = _this$getEndpoints.configEndpoint;\n\n if (!serviceName) {\n return Promise.reject('serviceName is required for fetching central config.');\n }\n\n configEndpoint += \"?service.name=\" + serviceName;\n\n if (environment) {\n configEndpoint += \"&service.environment=\" + environment;\n }\n\n var localConfig = this._configService.getLocalConfig();\n\n if (localConfig) {\n configEndpoint += \"&ifnonematch=\" + localConfig.etag;\n }\n\n var apmRequest = this._configService.get('apmRequest');\n\n return this._makeHttpRequest('GET', configEndpoint, {\n timeout: 5000,\n beforeSend: apmRequest\n }).then(function (xhr) {\n var status = xhr.status,\n responseText = xhr.responseText;\n\n if (status === 304) {\n return localConfig;\n } else {\n var remoteConfig = JSON.parse(responseText);\n var etag = xhr.getResponseHeader('etag');\n\n if (etag) {\n remoteConfig.etag = etag.replace(/[\"]/g, '');\n\n _this3._configService.setLocalConfig(remoteConfig, true);\n }\n\n return remoteConfig;\n }\n }).catch(function (reason) {\n var error = _this3._constructError(reason);\n\n return Promise.reject(error);\n });\n };\n\n _proto.createMetaData = function createMetaData() {\n var cfg = this._configService;\n var metadata = {\n service: {\n name: cfg.get('serviceName'),\n version: cfg.get('serviceVersion'),\n agent: {\n name: 'rum-js',\n version: cfg.version\n },\n language: {\n name: 'javascript'\n },\n environment: cfg.get('environment')\n },\n labels: cfg.get('context.tags')\n };\n return truncateModel(METADATA_MODEL, metadata);\n };\n\n _proto.addError = function addError(error) {\n var _this$throttleEvents;\n\n this.throttleEvents((_this$throttleEvents = {}, _this$throttleEvents[ERRORS] = error, _this$throttleEvents));\n };\n\n _proto.addTransaction = function addTransaction(transaction) {\n var _this$throttleEvents2;\n\n this.throttleEvents((_this$throttleEvents2 = {}, _this$throttleEvents2[TRANSACTIONS] = transaction, _this$throttleEvents2));\n };\n\n _proto.ndjsonErrors = function ndjsonErrors(errors, compress) {\n var key = compress ? 'e' : 'error';\n return errors.map(function (error) {\n var _NDJSON$stringify;\n\n return NDJSON.stringify((_NDJSON$stringify = {}, _NDJSON$stringify[key] = compress ? compressError(error) : error, _NDJSON$stringify));\n });\n };\n\n _proto.ndjsonMetricsets = function ndjsonMetricsets(metricsets) {\n return metricsets.map(function (metricset) {\n return NDJSON.stringify({\n metricset: metricset\n });\n }).join('');\n };\n\n _proto.ndjsonTransactions = function ndjsonTransactions(transactions, compress) {\n var _this4 = this;\n\n var key = compress ? 'x' : 'transaction';\n return transactions.map(function (tr) {\n var _NDJSON$stringify2;\n\n var spans = '',\n breakdowns = '';\n\n if (!compress) {\n if (tr.spans) {\n spans = tr.spans.map(function (span) {\n return NDJSON.stringify({\n span: span\n });\n }).join('');\n delete tr.spans;\n }\n\n if (tr.breakdown) {\n breakdowns = _this4.ndjsonMetricsets(tr.breakdown);\n delete tr.breakdown;\n }\n }\n\n return NDJSON.stringify((_NDJSON$stringify2 = {}, _NDJSON$stringify2[key] = compress ? compressTransaction(tr) : tr, _NDJSON$stringify2)) + spans + breakdowns;\n });\n };\n\n _proto.sendEvents = function sendEvents(events) {\n var _payload, _NDJSON$stringify3;\n\n if (events.length === 0) {\n return;\n }\n\n var transactions = [];\n var errors = [];\n\n for (var i = 0; i < events.length; i++) {\n var event = events[i];\n\n if (event[TRANSACTIONS]) {\n transactions.push(event[TRANSACTIONS]);\n }\n\n if (event[ERRORS]) {\n errors.push(event[ERRORS]);\n }\n }\n\n if (transactions.length === 0 && errors.length === 0) {\n return;\n }\n\n var cfg = this._configService;\n var payload = (_payload = {}, _payload[TRANSACTIONS] = transactions, _payload[ERRORS] = errors, _payload);\n var filteredPayload = cfg.applyFilters(payload);\n\n if (!filteredPayload) {\n this._loggingService.warn('Dropped payload due to filtering!');\n\n return;\n }\n\n var apiVersion = cfg.get('apiVersion');\n var compress = apiVersion > 2;\n var ndjson = [];\n var metadata = this.createMetaData();\n var metadataKey = compress ? 'm' : 'metadata';\n ndjson.push(NDJSON.stringify((_NDJSON$stringify3 = {}, _NDJSON$stringify3[metadataKey] = compress ? compressMetadata(metadata) : metadata, _NDJSON$stringify3)));\n ndjson = ndjson.concat(this.ndjsonErrors(filteredPayload[ERRORS], compress), this.ndjsonTransactions(filteredPayload[TRANSACTIONS], compress));\n var ndjsonPayload = ndjson.join('');\n\n var _this$getEndpoints2 = this.getEndpoints(),\n intakeEndpoint = _this$getEndpoints2.intakeEndpoint;\n\n return this._postJson(intakeEndpoint, ndjsonPayload);\n };\n\n _proto.getEndpoints = function getEndpoints() {\n var serverUrl = this._configService.get('serverUrl');\n\n var apiVersion = this._configService.get('apiVersion');\n\n var serverUrlPrefix = this._configService.get('serverUrlPrefix') || \"/intake/v\" + apiVersion + \"/rum/events\";\n var intakeEndpoint = serverUrl + serverUrlPrefix;\n var configEndpoint = serverUrl + \"/config/v1/rum/agents\";\n return {\n intakeEndpoint: intakeEndpoint,\n configEndpoint: configEndpoint\n };\n };\n\n return ApmServer;\n}();\n\nexport default ApmServer;","export default function throttle(fn, onThrottle, opts) {\n var context = this;\n var limit = opts.limit;\n var interval = opts.interval;\n var counter = 0;\n var timeoutId;\n return function () {\n counter++;\n\n if (typeof timeoutId === 'undefined') {\n timeoutId = setTimeout(function () {\n counter = 0;\n timeoutId = undefined;\n }, interval);\n }\n\n if (counter > limit && typeof onThrottle === 'function') {\n return onThrottle.apply(context, arguments);\n } else {\n return fn.apply(context, arguments);\n }\n };\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getCurrentScript, setLabel, merge, extend, isUndefined } from './utils';\nimport EventHandler from './event-handler';\nimport { CONFIG_CHANGE, LOCAL_CONFIG_KEY } from './constants';\n\nfunction getConfigFromScript() {\n var script = getCurrentScript();\n var config = getDataAttributesFromNode(script);\n return config;\n}\n\nfunction getDataAttributesFromNode(node) {\n if (!node) {\n return {};\n }\n\n var dataAttrs = {};\n var dataRegex = /^data-([\\w-]+)$/;\n var attrs = node.attributes;\n\n for (var i = 0; i < attrs.length; i++) {\n var attr = attrs[i];\n\n if (dataRegex.test(attr.nodeName)) {\n var key = attr.nodeName.match(dataRegex)[1];\n var camelCasedkey = key.split('-').map(function (value, index) {\n return index > 0 ? value.charAt(0).toUpperCase() + value.substring(1) : value;\n }).join('');\n dataAttrs[camelCasedkey] = attr.value || attr.nodeValue;\n }\n }\n\n return dataAttrs;\n}\n\nvar Config = function () {\n function Config() {\n this.config = {\n serviceName: '',\n serviceVersion: '',\n environment: '',\n serverUrl: 'http://localhost:8200',\n serverUrlPrefix: '',\n active: true,\n instrument: true,\n disableInstrumentations: [],\n logLevel: 'warn',\n breakdownMetrics: false,\n ignoreTransactions: [],\n eventsLimit: 80,\n queueLimit: -1,\n flushInterval: 500,\n distributedTracing: true,\n distributedTracingOrigins: [],\n distributedTracingHeaderName: 'traceparent',\n pageLoadTraceId: '',\n pageLoadSpanId: '',\n pageLoadSampled: false,\n pageLoadTransactionName: '',\n propagateTracestate: false,\n transactionSampleRate: 1.0,\n centralConfig: false,\n monitorLongtasks: true,\n apiVersion: 2,\n context: {},\n session: false,\n apmRequest: null,\n sendCredentials: false\n };\n this.events = new EventHandler();\n this.filters = [];\n this.version = '';\n }\n\n var _proto = Config.prototype;\n\n _proto.init = function init() {\n var scriptData = getConfigFromScript();\n this.setConfig(scriptData);\n };\n\n _proto.setVersion = function setVersion(version) {\n this.version = version;\n };\n\n _proto.addFilter = function addFilter(cb) {\n if (typeof cb !== 'function') {\n throw new Error('Argument to must be function');\n }\n\n this.filters.push(cb);\n };\n\n _proto.applyFilters = function applyFilters(data) {\n for (var i = 0; i < this.filters.length; i++) {\n data = this.filters[i](data);\n\n if (!data) {\n return;\n }\n }\n\n return data;\n };\n\n _proto.get = function get(key) {\n return key.split('.').reduce(function (obj, objKey) {\n return obj && obj[objKey];\n }, this.config);\n };\n\n _proto.setUserContext = function setUserContext(userContext) {\n if (userContext === void 0) {\n userContext = {};\n }\n\n var context = {};\n var _userContext = userContext,\n id = _userContext.id,\n username = _userContext.username,\n email = _userContext.email;\n\n if (typeof id === 'number' || typeof id === 'string') {\n context.id = id;\n }\n\n if (typeof username === 'string') {\n context.username = username;\n }\n\n if (typeof email === 'string') {\n context.email = email;\n }\n\n this.config.context.user = extend(this.config.context.user || {}, context);\n };\n\n _proto.setCustomContext = function setCustomContext(customContext) {\n if (customContext === void 0) {\n customContext = {};\n }\n\n this.config.context.custom = extend(this.config.context.custom || {}, customContext);\n };\n\n _proto.addLabels = function addLabels(tags) {\n var _this = this;\n\n if (!this.config.context.tags) {\n this.config.context.tags = {};\n }\n\n var keys = Object.keys(tags);\n keys.forEach(function (k) {\n return setLabel(k, tags[k], _this.config.context.tags);\n });\n };\n\n _proto.setConfig = function setConfig(properties) {\n if (properties === void 0) {\n properties = {};\n }\n\n var _properties = properties,\n transactionSampleRate = _properties.transactionSampleRate,\n serverUrl = _properties.serverUrl;\n\n if (serverUrl) {\n properties.serverUrl = serverUrl.replace(/\\/+$/, '');\n }\n\n if (!isUndefined(transactionSampleRate)) {\n if (transactionSampleRate < 0.0001 && transactionSampleRate > 0) {\n transactionSampleRate = 0.0001;\n }\n\n properties.transactionSampleRate = Math.round(transactionSampleRate * 10000) / 10000;\n }\n\n merge(this.config, properties);\n this.events.send(CONFIG_CHANGE, [this.config]);\n };\n\n _proto.validate = function validate(properties) {\n if (properties === void 0) {\n properties = {};\n }\n\n var requiredKeys = ['serviceName', 'serverUrl'];\n var allKeys = Object.keys(this.config);\n var errors = {\n missing: [],\n invalid: [],\n unknown: []\n };\n Object.keys(properties).forEach(function (key) {\n if (requiredKeys.indexOf(key) !== -1 && !properties[key]) {\n errors.missing.push(key);\n }\n\n if (allKeys.indexOf(key) === -1) {\n errors.unknown.push(key);\n }\n });\n\n if (properties.serviceName && !/^[a-zA-Z0-9 _-]+$/.test(properties.serviceName)) {\n errors.invalid.push({\n key: 'serviceName',\n value: properties.serviceName,\n allowed: 'a-z, A-Z, 0-9, _, -, '\n });\n }\n\n var sampleRate = properties.transactionSampleRate;\n\n if (typeof sampleRate !== 'undefined' && (typeof sampleRate !== 'number' || isNaN(sampleRate) || sampleRate < 0 || sampleRate > 1)) {\n errors.invalid.push({\n key: 'transactionSampleRate',\n value: sampleRate,\n allowed: 'Number between 0 and 1'\n });\n }\n\n return errors;\n };\n\n _proto.getLocalConfig = function getLocalConfig() {\n var storage = sessionStorage;\n\n if (this.config.session) {\n storage = localStorage;\n }\n\n var config = storage.getItem(LOCAL_CONFIG_KEY);\n\n if (config) {\n return JSON.parse(config);\n }\n };\n\n _proto.setLocalConfig = function setLocalConfig(config, merge) {\n if (config) {\n if (merge) {\n var prevConfig = this.getLocalConfig();\n config = _extends({}, prevConfig, config);\n }\n\n var storage = sessionStorage;\n\n if (this.config.session) {\n storage = localStorage;\n }\n\n storage.setItem(LOCAL_CONFIG_KEY, JSON.stringify(config));\n }\n };\n\n _proto.dispatchEvent = function dispatchEvent(name, args) {\n this.events.send(name, args);\n };\n\n _proto.observeEvent = function observeEvent(name, fn) {\n return this.events.observe(name, fn);\n };\n\n return Config;\n}();\n\nexport default Config;","var _serviceCreators;\n\nimport ApmServer from './apm-server';\nimport ConfigService from './config-service';\nimport LoggingService from './logging-service';\nimport { CONFIG_CHANGE, CONFIG_SERVICE, LOGGING_SERVICE, APM_SERVER } from './constants';\nimport { __DEV__ } from '../state';\nvar serviceCreators = (_serviceCreators = {}, _serviceCreators[CONFIG_SERVICE] = function () {\n return new ConfigService();\n}, _serviceCreators[LOGGING_SERVICE] = function () {\n return new LoggingService({\n prefix: '[Elastic APM] '\n });\n}, _serviceCreators[APM_SERVER] = function (factory) {\n var _factory$getService = factory.getService([CONFIG_SERVICE, LOGGING_SERVICE]),\n configService = _factory$getService[0],\n loggingService = _factory$getService[1];\n\n return new ApmServer(configService, loggingService);\n}, _serviceCreators);\n\nvar ServiceFactory = function () {\n function ServiceFactory() {\n this.instances = {};\n this.initialized = false;\n }\n\n var _proto = ServiceFactory.prototype;\n\n _proto.init = function init() {\n if (this.initialized) {\n return;\n }\n\n this.initialized = true;\n var configService = this.getService(CONFIG_SERVICE);\n configService.init();\n\n var _this$getService = this.getService([LOGGING_SERVICE, APM_SERVER]),\n loggingService = _this$getService[0],\n apmServer = _this$getService[1];\n\n configService.events.observe(CONFIG_CHANGE, function () {\n var logLevel = configService.get('logLevel');\n loggingService.setLevel(logLevel);\n });\n apmServer.init();\n };\n\n _proto.getService = function getService(name) {\n var _this = this;\n\n if (typeof name === 'string') {\n if (!this.instances[name]) {\n if (typeof serviceCreators[name] === 'function') {\n this.instances[name] = serviceCreators[name](this);\n } else if (__DEV__) {\n console.log('Cannot get service, No creator for: ' + name);\n }\n }\n\n return this.instances[name];\n } else if (Array.isArray(name)) {\n return name.map(function (n) {\n return _this.getService(n);\n });\n }\n };\n\n return ServiceFactory;\n}();\n\nexport { serviceCreators, ServiceFactory };","import { noop } from './utils';\n\nvar LoggingService = function () {\n function LoggingService(spec) {\n if (spec === void 0) {\n spec = {};\n }\n\n this.levels = ['trace', 'debug', 'info', 'warn', 'error'];\n this.level = spec.level || 'warn';\n this.prefix = spec.prefix || '';\n this.resetLogMethods();\n }\n\n var _proto = LoggingService.prototype;\n\n _proto.shouldLog = function shouldLog(level) {\n return this.levels.indexOf(level) >= this.levels.indexOf(this.level);\n };\n\n _proto.setLevel = function setLevel(level) {\n if (level === this.level) {\n return;\n }\n\n this.level = level;\n this.resetLogMethods();\n };\n\n _proto.resetLogMethods = function resetLogMethods() {\n var _this = this;\n\n this.levels.forEach(function (level) {\n _this[level] = _this.shouldLog(level) ? log : noop;\n\n function log() {\n var normalizedLevel = level;\n\n if (level === 'trace' || level === 'debug') {\n normalizedLevel = 'info';\n }\n\n var args = arguments;\n args[0] = this.prefix + args[0];\n\n if (console) {\n var realMethod = console[normalizedLevel] || console.log;\n\n if (typeof realMethod === 'function') {\n realMethod.apply(console, args);\n }\n }\n }\n });\n };\n\n return LoggingService;\n}();\n\nexport default LoggingService;","import { checkSameOrigin, isDtHeaderValid, parseDtHeaderValue, getDtHeaderValue, getTSHeaderValue, stripQueryStringFromUrl, setRequestHeader } from '../common/utils';\nimport { Url } from '../common/url';\nimport { patchEventHandler } from '../common/patching';\nimport { globalState } from '../common/patching/patch-utils';\nimport { SCHEDULE, INVOKE, TRANSACTION_END, AFTER_EVENT, FETCH, HISTORY, XMLHTTPREQUEST, HTTP_REQUEST_TYPE, OUTCOME_FAILURE, OUTCOME_SUCCESS, OUTCOME_UNKNOWN, QUEUE_ADD_TRANSACTION } from '../common/constants';\nimport { truncateModel, SPAN_MODEL, TRANSACTION_MODEL } from '../common/truncate';\nimport { __DEV__ } from '../state';\nvar SIMILAR_SPAN_TO_TRANSACTION_RATIO = 0.05;\nvar TRANSACTION_DURATION_THRESHOLD = 60000;\nexport function groupSmallContinuouslySimilarSpans(originalSpans, transDuration, threshold) {\n originalSpans.sort(function (spanA, spanB) {\n return spanA._start - spanB._start;\n });\n var spans = [];\n var lastCount = 1;\n originalSpans.forEach(function (span, index) {\n if (spans.length === 0) {\n spans.push(span);\n } else {\n var lastSpan = spans[spans.length - 1];\n var isContinuouslySimilar = lastSpan.type === span.type && lastSpan.subtype === span.subtype && lastSpan.action === span.action && lastSpan.name === span.name && span.duration() / transDuration < threshold && (span._start - lastSpan._end) / transDuration < threshold;\n var isLastSpan = originalSpans.length === index + 1;\n\n if (isContinuouslySimilar) {\n lastCount++;\n lastSpan._end = span._end;\n }\n\n if (lastCount > 1 && (!isContinuouslySimilar || isLastSpan)) {\n lastSpan.name = lastCount + 'x ' + lastSpan.name;\n lastCount = 1;\n }\n\n if (!isContinuouslySimilar) {\n spans.push(span);\n }\n }\n });\n return spans;\n}\nexport function adjustTransaction(transaction) {\n if (transaction.sampled) {\n var filterdSpans = transaction.spans.filter(function (span) {\n return span.duration() > 0 && span._start >= transaction._start && span._end <= transaction._end;\n });\n\n if (transaction.isManaged()) {\n var duration = transaction.duration();\n var similarSpans = groupSmallContinuouslySimilarSpans(filterdSpans, duration, SIMILAR_SPAN_TO_TRANSACTION_RATIO);\n transaction.spans = similarSpans;\n } else {\n transaction.spans = filterdSpans;\n }\n } else {\n transaction.resetFields();\n }\n\n return transaction;\n}\n\nvar PerformanceMonitoring = function () {\n function PerformanceMonitoring(apmServer, configService, loggingService, transactionService) {\n this._apmServer = apmServer;\n this._configService = configService;\n this._logginService = loggingService;\n this._transactionService = transactionService;\n }\n\n var _proto = PerformanceMonitoring.prototype;\n\n _proto.init = function init(flags) {\n var _this = this;\n\n if (flags === void 0) {\n flags = {};\n }\n\n this._configService.events.observe(TRANSACTION_END + AFTER_EVENT, function (tr) {\n var payload = _this.createTransactionPayload(tr);\n\n if (payload) {\n _this._apmServer.addTransaction(payload);\n\n _this._configService.dispatchEvent(QUEUE_ADD_TRANSACTION);\n }\n });\n\n if (flags[HISTORY]) {\n patchEventHandler.observe(HISTORY, this.getHistorySub());\n }\n\n if (flags[XMLHTTPREQUEST]) {\n patchEventHandler.observe(XMLHTTPREQUEST, this.getXHRSub());\n }\n\n if (flags[FETCH]) {\n patchEventHandler.observe(FETCH, this.getFetchSub());\n }\n };\n\n _proto.getHistorySub = function getHistorySub() {\n var transactionService = this._transactionService;\n return function (event, task) {\n if (task.source === HISTORY && event === INVOKE) {\n transactionService.startTransaction(task.data.title, 'route-change', {\n managed: true,\n canReuse: true\n });\n }\n };\n };\n\n _proto.getXHRSub = function getXHRSub() {\n var _this2 = this;\n\n return function (event, task) {\n if (task.source === XMLHTTPREQUEST && !globalState.fetchInProgress) {\n _this2.processAPICalls(event, task);\n }\n };\n };\n\n _proto.getFetchSub = function getFetchSub() {\n var _this3 = this;\n\n return function (event, task) {\n if (task.source === FETCH) {\n _this3.processAPICalls(event, task);\n }\n };\n };\n\n _proto.processAPICalls = function processAPICalls(event, task) {\n var configService = this._configService;\n var transactionService = this._transactionService;\n\n if (task.data && task.data.url) {\n var endpoints = this._apmServer.getEndpoints();\n\n var isOwnEndpoint = Object.keys(endpoints).some(function (endpoint) {\n return task.data.url.indexOf(endpoints[endpoint]) !== -1;\n });\n\n if (isOwnEndpoint) {\n return;\n }\n }\n\n if (event === SCHEDULE && task.data) {\n var data = task.data;\n var requestUrl = new Url(data.url);\n var spanName = data.method + ' ' + (requestUrl.relative ? requestUrl.path : stripQueryStringFromUrl(requestUrl.href));\n\n if (!transactionService.getCurrentTransaction()) {\n transactionService.startTransaction(spanName, HTTP_REQUEST_TYPE, {\n managed: true\n });\n }\n\n var span = transactionService.startSpan(spanName, 'external.http', {\n blocking: true\n });\n\n if (!span) {\n return;\n }\n\n var isDtEnabled = configService.get('distributedTracing');\n var dtOrigins = configService.get('distributedTracingOrigins');\n var currentUrl = new Url(window.location.href);\n var isSameOrigin = checkSameOrigin(requestUrl.origin, currentUrl.origin) || checkSameOrigin(requestUrl.origin, dtOrigins);\n var target = data.target;\n\n if (isDtEnabled && isSameOrigin && target) {\n this.injectDtHeader(span, target);\n var propagateTracestate = configService.get('propagateTracestate');\n\n if (propagateTracestate) {\n this.injectTSHeader(span, target);\n }\n } else if (__DEV__) {\n this._logginService.debug(\"Could not inject distributed tracing header to the request origin ('\" + requestUrl.origin + \"') from the current origin ('\" + currentUrl.origin + \"')\");\n }\n\n if (data.sync) {\n span.sync = data.sync;\n }\n\n data.span = span;\n } else if (event === INVOKE) {\n var _data = task.data;\n\n if (_data && _data.span) {\n var _span = _data.span,\n response = _data.response,\n _target = _data.target;\n var status;\n\n if (response) {\n status = response.status;\n } else {\n status = _target.status;\n }\n\n var outcome;\n\n if (_data.status != 'abort' && !_data.aborted) {\n if (status >= 400 || status == 0) {\n outcome = OUTCOME_FAILURE;\n } else {\n outcome = OUTCOME_SUCCESS;\n }\n } else {\n outcome = OUTCOME_UNKNOWN;\n }\n\n _span.outcome = outcome;\n var tr = transactionService.getCurrentTransaction();\n\n if (tr && tr.type === HTTP_REQUEST_TYPE) {\n tr.outcome = outcome;\n }\n\n transactionService.endSpan(_span, _data);\n }\n }\n };\n\n _proto.injectDtHeader = function injectDtHeader(span, target) {\n var headerName = this._configService.get('distributedTracingHeaderName');\n\n var headerValue = getDtHeaderValue(span);\n var isHeaderValid = isDtHeaderValid(headerValue);\n\n if (isHeaderValid && headerValue && headerName) {\n setRequestHeader(target, headerName, headerValue);\n }\n };\n\n _proto.injectTSHeader = function injectTSHeader(span, target) {\n var headerValue = getTSHeaderValue(span);\n\n if (headerValue) {\n setRequestHeader(target, 'tracestate', headerValue);\n }\n };\n\n _proto.extractDtHeader = function extractDtHeader(target) {\n var configService = this._configService;\n var headerName = configService.get('distributedTracingHeaderName');\n\n if (target) {\n return parseDtHeaderValue(target[headerName]);\n }\n };\n\n _proto.filterTransaction = function filterTransaction(tr) {\n var duration = tr.duration();\n\n if (!duration) {\n if (__DEV__) {\n var message = \"transaction(\" + tr.id + \", \" + tr.name + \") was discarded! \";\n\n if (duration === 0) {\n message += \"Transaction duration is 0\";\n } else {\n message += \"Transaction wasn't ended\";\n }\n\n this._logginService.debug(message);\n }\n\n return false;\n }\n\n if (tr.isManaged()) {\n if (duration > TRANSACTION_DURATION_THRESHOLD) {\n if (__DEV__) {\n this._logginService.debug(\"transaction(\" + tr.id + \", \" + tr.name + \") was discarded! Transaction duration (\" + duration + \") is greater than managed transaction threshold (\" + TRANSACTION_DURATION_THRESHOLD + \")\");\n }\n\n return false;\n }\n\n if (tr.sampled && tr.spans.length === 0) {\n if (__DEV__) {\n this._logginService.debug(\"transaction(\" + tr.id + \", \" + tr.name + \") was discarded! Transaction does not have any spans\");\n }\n\n return false;\n }\n }\n\n return true;\n };\n\n _proto.createTransactionDataModel = function createTransactionDataModel(transaction) {\n var transactionStart = transaction._start;\n var spans = transaction.spans.map(function (span) {\n var spanData = {\n id: span.id,\n transaction_id: transaction.id,\n parent_id: span.parentId || transaction.id,\n trace_id: transaction.traceId,\n name: span.name,\n type: span.type,\n subtype: span.subtype,\n action: span.action,\n sync: span.sync,\n start: parseInt(span._start - transactionStart),\n duration: span.duration(),\n context: span.context,\n outcome: span.outcome,\n sample_rate: span.sampleRate\n };\n return truncateModel(SPAN_MODEL, spanData);\n });\n var transactionData = {\n id: transaction.id,\n trace_id: transaction.traceId,\n session: transaction.session,\n name: transaction.name,\n type: transaction.type,\n duration: transaction.duration(),\n spans: spans,\n context: transaction.context,\n marks: transaction.marks,\n breakdown: transaction.breakdownTimings,\n span_count: {\n started: spans.length\n },\n sampled: transaction.sampled,\n sample_rate: transaction.sampleRate,\n experience: transaction.experience,\n outcome: transaction.outcome\n };\n return truncateModel(TRANSACTION_MODEL, transactionData);\n };\n\n _proto.createTransactionPayload = function createTransactionPayload(transaction) {\n var adjustedTransaction = adjustTransaction(transaction);\n var filtered = this.filterTransaction(adjustedTransaction);\n\n if (filtered) {\n return this.createTransactionDataModel(transaction);\n }\n };\n\n return PerformanceMonitoring;\n}();\n\nexport { PerformanceMonitoring as default };","import { generateRandomId, setLabel, merge, getDuration, getTime } from '../common/utils';\nimport { NAME_UNKNOWN, TYPE_CUSTOM } from '../common/constants';\n\nvar SpanBase = function () {\n function SpanBase(name, type, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (!name) {\n name = NAME_UNKNOWN;\n }\n\n if (!type) {\n type = TYPE_CUSTOM;\n }\n\n this.name = name;\n this.type = type;\n this.options = options;\n this.id = options.id || generateRandomId(16);\n this.traceId = options.traceId;\n this.sampled = options.sampled;\n this.sampleRate = options.sampleRate;\n this.timestamp = options.timestamp;\n this._start = getTime(options.startTime);\n this._end = undefined;\n this.ended = false;\n this.outcome = undefined;\n this.onEnd = options.onEnd;\n }\n\n var _proto = SpanBase.prototype;\n\n _proto.ensureContext = function ensureContext() {\n if (!this.context) {\n this.context = {};\n }\n };\n\n _proto.addLabels = function addLabels(tags) {\n this.ensureContext();\n var ctx = this.context;\n\n if (!ctx.tags) {\n ctx.tags = {};\n }\n\n var keys = Object.keys(tags);\n keys.forEach(function (k) {\n return setLabel(k, tags[k], ctx.tags);\n });\n };\n\n _proto.addContext = function addContext() {\n for (var _len = arguments.length, context = new Array(_len), _key = 0; _key < _len; _key++) {\n context[_key] = arguments[_key];\n }\n\n if (context.length === 0) return;\n this.ensureContext();\n merge.apply(void 0, [this.context].concat(context));\n };\n\n _proto.end = function end(endTime) {\n if (this.ended) {\n return;\n }\n\n this.ended = true;\n this._end = getTime(endTime);\n this.callOnEnd();\n };\n\n _proto.callOnEnd = function callOnEnd() {\n if (typeof this.onEnd === 'function') {\n this.onEnd(this);\n }\n };\n\n _proto.duration = function duration() {\n return getDuration(this._start, this._end);\n };\n\n return SpanBase;\n}();\n\nexport default SpanBase;","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport SpanBase from './span-base';\nimport { addSpanContext } from '../common/context';\n\nvar Span = function (_SpanBase) {\n _inheritsLoose(Span, _SpanBase);\n\n function Span(name, type, options) {\n var _this;\n\n _this = _SpanBase.call(this, name, type, options) || this;\n _this.parentId = _this.options.parentId;\n _this.subtype = undefined;\n _this.action = undefined;\n\n if (_this.type.indexOf('.') !== -1) {\n var fields = _this.type.split('.', 3);\n\n _this.type = fields[0];\n _this.subtype = fields[1];\n _this.action = fields[2];\n }\n\n _this.sync = _this.options.sync;\n return _this;\n }\n\n var _proto = Span.prototype;\n\n _proto.end = function end(endTime, data) {\n _SpanBase.prototype.end.call(this, endTime);\n\n addSpanContext(this, data);\n };\n\n return Span;\n}(SpanBase);\n\nexport default Span;","import { getDuration, PERF } from '../common/utils';\nimport { PAGE_LOAD, TRUNCATED_TYPE } from '../common/constants';\nvar pageLoadBreakdowns = [['domainLookupStart', 'domainLookupEnd', 'DNS'], ['connectStart', 'connectEnd', 'TCP'], ['requestStart', 'responseStart', 'Request'], ['responseStart', 'responseEnd', 'Response'], ['domLoading', 'domComplete', 'Processing'], ['loadEventStart', 'loadEventEnd', 'Load']];\n\nfunction getValue(value) {\n return {\n value: value\n };\n}\n\nfunction calculateSelfTime(transaction) {\n var spans = transaction.spans,\n _start = transaction._start,\n _end = transaction._end;\n\n if (spans.length === 0) {\n return transaction.duration();\n }\n\n spans.sort(function (span1, span2) {\n return span1._start - span2._start;\n });\n var span = spans[0];\n var spanEnd = span._end;\n var spanStart = span._start;\n var lastContinuousEnd = spanEnd;\n var selfTime = spanStart - _start;\n\n for (var i = 1; i < spans.length; i++) {\n span = spans[i];\n spanStart = span._start;\n spanEnd = span._end;\n\n if (spanStart > lastContinuousEnd) {\n selfTime += spanStart - lastContinuousEnd;\n lastContinuousEnd = spanEnd;\n } else if (spanEnd > lastContinuousEnd) {\n lastContinuousEnd = spanEnd;\n }\n }\n\n if (lastContinuousEnd < _end) {\n selfTime += _end - lastContinuousEnd;\n }\n\n return selfTime;\n}\n\nfunction groupSpans(transaction) {\n var spanMap = {};\n var transactionSelfTime = calculateSelfTime(transaction);\n spanMap['app'] = {\n count: 1,\n duration: transactionSelfTime\n };\n var spans = transaction.spans;\n\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n var duration = span.duration();\n\n if (duration === 0 || duration == null) {\n continue;\n }\n\n var type = span.type,\n subtype = span.subtype;\n var key = type.replace(TRUNCATED_TYPE, '');\n\n if (subtype) {\n key += '.' + subtype;\n }\n\n if (!spanMap[key]) {\n spanMap[key] = {\n duration: 0,\n count: 0\n };\n }\n\n spanMap[key].count++;\n spanMap[key].duration += duration;\n }\n\n return spanMap;\n}\n\nfunction getSpanBreakdown(transactionDetails, _ref) {\n var details = _ref.details,\n _ref$count = _ref.count,\n count = _ref$count === void 0 ? 1 : _ref$count,\n duration = _ref.duration;\n return {\n transaction: transactionDetails,\n span: details,\n samples: {\n 'span.self_time.count': getValue(count),\n 'span.self_time.sum.us': getValue(duration * 1000)\n }\n };\n}\n\nexport function captureBreakdown(transaction, timings) {\n if (timings === void 0) {\n timings = PERF.timing;\n }\n\n var breakdowns = [];\n var name = transaction.name,\n type = transaction.type,\n sampled = transaction.sampled;\n var transactionDetails = {\n name: name,\n type: type\n };\n\n if (!sampled) {\n return breakdowns;\n }\n\n if (type === PAGE_LOAD && timings) {\n for (var i = 0; i < pageLoadBreakdowns.length; i++) {\n var current = pageLoadBreakdowns[i];\n var start = timings[current[0]];\n var end = timings[current[1]];\n var duration = getDuration(start, end);\n\n if (duration === 0 || duration == null) {\n continue;\n }\n\n breakdowns.push(getSpanBreakdown(transactionDetails, {\n details: {\n type: current[2]\n },\n duration: duration\n }));\n }\n } else {\n var spanMap = groupSpans(transaction);\n Object.keys(spanMap).forEach(function (key) {\n var _key$split = key.split('.'),\n type = _key$split[0],\n subtype = _key$split[1];\n\n var _spanMap$key = spanMap[key],\n duration = _spanMap$key.duration,\n count = _spanMap$key.count;\n breakdowns.push(getSpanBreakdown(transactionDetails, {\n details: {\n type: type,\n subtype: subtype\n },\n duration: duration,\n count: count\n }));\n });\n }\n\n return breakdowns;\n}","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport Span from './span';\nimport SpanBase from './span-base';\nimport { generateRandomId, merge, now, getTime, extend, removeInvalidChars } from '../common/utils';\nimport { REUSABILITY_THRESHOLD, TRUNCATED_TYPE } from '../common/constants';\nimport { captureBreakdown as _captureBreakdown } from './breakdown';\n\nvar Transaction = function (_SpanBase) {\n _inheritsLoose(Transaction, _SpanBase);\n\n function Transaction(name, type, options) {\n var _this;\n\n _this = _SpanBase.call(this, name, type, options) || this;\n _this.traceId = generateRandomId();\n _this.marks = undefined;\n _this.spans = [];\n _this._activeSpans = {};\n _this._activeTasks = new Set();\n _this.blocked = false;\n _this.captureTimings = false;\n _this.breakdownTimings = [];\n _this.sampleRate = _this.options.transactionSampleRate;\n _this.sampled = Math.random() <= _this.sampleRate;\n return _this;\n }\n\n var _proto = Transaction.prototype;\n\n _proto.addMarks = function addMarks(obj) {\n this.marks = merge(this.marks || {}, obj);\n };\n\n _proto.mark = function mark(key) {\n var skey = removeInvalidChars(key);\n\n var markTime = now() - this._start;\n\n var custom = {};\n custom[skey] = markTime;\n this.addMarks({\n custom: custom\n });\n };\n\n _proto.canReuse = function canReuse() {\n var threshold = this.options.reuseThreshold || REUSABILITY_THRESHOLD;\n return !!this.options.canReuse && !this.ended && now() - this._start < threshold;\n };\n\n _proto.redefine = function redefine(name, type, options) {\n if (name) {\n this.name = name;\n }\n\n if (type) {\n this.type = type;\n }\n\n if (options) {\n this.options.reuseThreshold = options.reuseThreshold;\n extend(this.options, options);\n }\n };\n\n _proto.startSpan = function startSpan(name, type, options) {\n var _this2 = this;\n\n if (this.ended) {\n return;\n }\n\n var opts = extend({}, options);\n\n opts.onEnd = function (trc) {\n _this2._onSpanEnd(trc);\n };\n\n opts.traceId = this.traceId;\n opts.sampled = this.sampled;\n opts.sampleRate = this.sampleRate;\n\n if (!opts.parentId) {\n opts.parentId = this.id;\n }\n\n var span = new Span(name, type, opts);\n this._activeSpans[span.id] = span;\n\n if (opts.blocking) {\n this.addTask(span.id);\n }\n\n return span;\n };\n\n _proto.isFinished = function isFinished() {\n return !this.blocked && this._activeTasks.size === 0;\n };\n\n _proto.detectFinish = function detectFinish() {\n if (this.isFinished()) this.end();\n };\n\n _proto.end = function end(endTime) {\n if (this.ended) {\n return;\n }\n\n this.ended = true;\n this._end = getTime(endTime);\n\n for (var sid in this._activeSpans) {\n var span = this._activeSpans[sid];\n span.type = span.type + TRUNCATED_TYPE;\n span.end(endTime);\n }\n\n this.callOnEnd();\n };\n\n _proto.captureBreakdown = function captureBreakdown() {\n this.breakdownTimings = _captureBreakdown(this);\n };\n\n _proto.block = function block(flag) {\n this.blocked = flag;\n\n if (!this.blocked) {\n this.detectFinish();\n }\n };\n\n _proto.addTask = function addTask(taskId) {\n if (!taskId) {\n taskId = 'task-' + generateRandomId(16);\n }\n\n this._activeTasks.add(taskId);\n\n return taskId;\n };\n\n _proto.removeTask = function removeTask(taskId) {\n var deleted = this._activeTasks.delete(taskId);\n\n deleted && this.detectFinish();\n };\n\n _proto.resetFields = function resetFields() {\n this.spans = [];\n this.sampleRate = 0;\n };\n\n _proto._onSpanEnd = function _onSpanEnd(span) {\n this.spans.push(span);\n delete this._activeSpans[span.id];\n this.removeTask(span.id);\n };\n\n _proto.isManaged = function isManaged() {\n return !!this.options.managed;\n };\n\n return Transaction;\n}(SpanBase);\n\nexport default Transaction;","import { LONG_TASK, LARGEST_CONTENTFUL_PAINT, FIRST_CONTENTFUL_PAINT, FIRST_INPUT, LAYOUT_SHIFT } from '../common/constants';\nimport { noop, PERF, isPerfTypeSupported, isRedirectInfoAvailable } from '../common/utils';\nimport Span from './span';\nexport var metrics = {\n fid: 0,\n fcp: 0,\n tbt: {\n start: Infinity,\n duration: 0\n },\n cls: {\n score: 0,\n firstEntryTime: Number.NEGATIVE_INFINITY,\n prevEntryTime: Number.NEGATIVE_INFINITY,\n currentSessionScore: 0\n },\n longtask: {\n count: 0,\n duration: 0,\n max: 0\n }\n};\nvar LONG_TASK_THRESHOLD = 50;\nexport function createLongTaskSpans(longtasks, agg) {\n var spans = [];\n\n for (var i = 0; i < longtasks.length; i++) {\n var _longtasks$i = longtasks[i],\n name = _longtasks$i.name,\n startTime = _longtasks$i.startTime,\n duration = _longtasks$i.duration,\n attribution = _longtasks$i.attribution;\n var end = startTime + duration;\n var span = new Span(\"Longtask(\" + name + \")\", LONG_TASK, {\n startTime: startTime\n });\n agg.count++;\n agg.duration += duration;\n agg.max = Math.max(duration, agg.max);\n\n if (attribution.length > 0) {\n var _attribution$ = attribution[0],\n _name = _attribution$.name,\n containerType = _attribution$.containerType,\n containerName = _attribution$.containerName,\n containerId = _attribution$.containerId;\n var customContext = {\n attribution: _name,\n type: containerType\n };\n\n if (containerName) {\n customContext.name = containerName;\n }\n\n if (containerId) {\n customContext.id = containerId;\n }\n\n span.addContext({\n custom: customContext\n });\n }\n\n span.end(end);\n spans.push(span);\n }\n\n return spans;\n}\nexport function createFirstInputDelaySpan(fidEntries) {\n var firstInput = fidEntries[0];\n\n if (firstInput) {\n var startTime = firstInput.startTime,\n processingStart = firstInput.processingStart;\n var span = new Span('First Input Delay', FIRST_INPUT, {\n startTime: startTime\n });\n span.end(processingStart);\n return span;\n }\n}\nexport function createTotalBlockingTimeSpan(tbtObject) {\n var start = tbtObject.start,\n duration = tbtObject.duration;\n var tbtSpan = new Span('Total Blocking Time', LONG_TASK, {\n startTime: start\n });\n tbtSpan.end(start + duration);\n return tbtSpan;\n}\nexport function calculateTotalBlockingTime(longtaskEntries) {\n longtaskEntries.forEach(function (entry) {\n var name = entry.name,\n startTime = entry.startTime,\n duration = entry.duration;\n\n if (startTime < metrics.fcp) {\n return;\n }\n\n if (name !== 'self' && name.indexOf('same-origin') === -1) {\n return;\n }\n\n metrics.tbt.start = Math.min(metrics.tbt.start, startTime);\n var blockingTime = duration - LONG_TASK_THRESHOLD;\n\n if (blockingTime > 0) {\n metrics.tbt.duration += blockingTime;\n }\n });\n}\nexport function calculateCumulativeLayoutShift(clsEntries) {\n clsEntries.forEach(function (entry) {\n if (!entry.hadRecentInput && entry.value) {\n var shouldCreateNewSession = entry.startTime - metrics.cls.firstEntryTime > 5000 || entry.startTime - metrics.cls.prevEntryTime > 1000;\n\n if (shouldCreateNewSession) {\n metrics.cls.firstEntryTime = entry.startTime;\n metrics.cls.currentSessionScore = 0;\n }\n\n metrics.cls.prevEntryTime = entry.startTime;\n metrics.cls.currentSessionScore += entry.value;\n metrics.cls.score = Math.max(metrics.cls.score, metrics.cls.currentSessionScore);\n }\n });\n}\nexport function captureObserverEntries(list, _ref) {\n var isHardNavigation = _ref.isHardNavigation,\n trStart = _ref.trStart;\n var longtaskEntries = list.getEntriesByType(LONG_TASK).filter(function (entry) {\n return entry.startTime >= trStart;\n });\n var longTaskSpans = createLongTaskSpans(longtaskEntries, metrics.longtask);\n var result = {\n spans: longTaskSpans,\n marks: {}\n };\n\n if (!isHardNavigation) {\n return result;\n }\n\n var lcpEntries = list.getEntriesByType(LARGEST_CONTENTFUL_PAINT);\n var lastLcpEntry = lcpEntries[lcpEntries.length - 1];\n\n if (lastLcpEntry) {\n var lcp = parseInt(lastLcpEntry.startTime);\n metrics.lcp = lcp;\n result.marks.largestContentfulPaint = lcp;\n }\n\n var timing = PERF.timing;\n var unloadDiff = timing.fetchStart - timing.navigationStart;\n\n if (isRedirectInfoAvailable(timing)) {\n unloadDiff = 0;\n }\n\n var fcpEntry = list.getEntriesByName(FIRST_CONTENTFUL_PAINT)[0];\n\n if (fcpEntry) {\n var fcp = parseInt(unloadDiff >= 0 ? fcpEntry.startTime - unloadDiff : fcpEntry.startTime);\n metrics.fcp = fcp;\n result.marks.firstContentfulPaint = fcp;\n }\n\n var fidEntries = list.getEntriesByType(FIRST_INPUT);\n var fidSpan = createFirstInputDelaySpan(fidEntries);\n\n if (fidSpan) {\n metrics.fid = fidSpan.duration();\n result.spans.push(fidSpan);\n }\n\n calculateTotalBlockingTime(longtaskEntries);\n var clsEntries = list.getEntriesByType(LAYOUT_SHIFT);\n calculateCumulativeLayoutShift(clsEntries);\n return result;\n}\nexport var PerfEntryRecorder = function () {\n function PerfEntryRecorder(callback) {\n this.po = {\n observe: noop,\n disconnect: noop\n };\n\n if (window.PerformanceObserver) {\n this.po = new PerformanceObserver(callback);\n }\n }\n\n var _proto = PerfEntryRecorder.prototype;\n\n _proto.start = function start(type) {\n try {\n if (!isPerfTypeSupported(type)) {\n return;\n }\n\n this.po.observe({\n type: type,\n buffered: true\n });\n } catch (_) {}\n };\n\n _proto.stop = function stop() {\n this.po.disconnect();\n };\n\n return PerfEntryRecorder;\n}();","import { MAX_SPAN_DURATION } from '../../common/constants';\n\nfunction shouldCreateSpan(start, end, trStart, trEnd, baseTime) {\n if (baseTime === void 0) {\n baseTime = 0;\n }\n\n return typeof start === 'number' && typeof end === 'number' && start >= baseTime && end > start && start - baseTime >= trStart && end - baseTime <= trEnd && end - start < MAX_SPAN_DURATION && start - baseTime < MAX_SPAN_DURATION && end - baseTime < MAX_SPAN_DURATION;\n}\n\nexport { shouldCreateSpan };","import { shouldCreateSpan } from './utils';\nimport Span from '../span';\nvar eventPairs = [['redirectStart', 'redirectEnd', 'Redirect'], ['domainLookupStart', 'domainLookupEnd', 'Domain lookup'], ['connectStart', 'connectEnd', 'Making a connection to the server'], ['requestStart', 'responseEnd', 'Requesting and receiving the document'], ['domLoading', 'domInteractive', 'Parsing the document, executing sync. scripts'], ['domContentLoadedEventStart', 'domContentLoadedEventEnd', 'Fire \"DOMContentLoaded\" event'], ['loadEventStart', 'loadEventEnd', 'Fire \"load\" event']];\n\nfunction createNavigationTimingSpans(timings, baseTime, trStart, trEnd) {\n var spans = [];\n\n for (var i = 0; i < eventPairs.length; i++) {\n var start = timings[eventPairs[i][0]];\n var end = timings[eventPairs[i][1]];\n\n if (!shouldCreateSpan(start, end, trStart, trEnd, baseTime)) {\n continue;\n }\n\n var span = new Span(eventPairs[i][2], 'hard-navigation.browser-timing');\n var data = null;\n\n if (eventPairs[i][0] === 'requestStart') {\n span.pageResponse = true;\n data = {\n url: location.origin\n };\n }\n\n span._start = start - baseTime;\n span.end(end - baseTime, data);\n spans.push(span);\n }\n\n return spans;\n}\n\nexport { createNavigationTimingSpans };","import { stripQueryStringFromUrl } from '../../common/utils';\nimport { shouldCreateSpan } from './utils';\nimport { RESOURCE_INITIATOR_TYPES } from '../../common/constants';\nimport Span from '../span';\n\nfunction createResourceTimingSpan(resourceTimingEntry) {\n var name = resourceTimingEntry.name,\n initiatorType = resourceTimingEntry.initiatorType,\n startTime = resourceTimingEntry.startTime,\n responseEnd = resourceTimingEntry.responseEnd;\n var kind = 'resource';\n\n if (initiatorType) {\n kind += '.' + initiatorType;\n }\n\n var spanName = stripQueryStringFromUrl(name);\n var span = new Span(spanName, kind);\n span._start = startTime;\n span.end(responseEnd, {\n url: name,\n entry: resourceTimingEntry\n });\n return span;\n}\n\nfunction isCapturedByPatching(resourceStartTime, requestPatchTime) {\n return requestPatchTime != null && resourceStartTime > requestPatchTime;\n}\n\nfunction isIntakeAPIEndpoint(url) {\n return /intake\\/v\\d+\\/rum\\/events/.test(url);\n}\n\nfunction createResourceTimingSpans(entries, requestPatchTime, trStart, trEnd) {\n var spans = [];\n\n for (var i = 0; i < entries.length; i++) {\n var _entries$i = entries[i],\n initiatorType = _entries$i.initiatorType,\n name = _entries$i.name,\n startTime = _entries$i.startTime,\n responseEnd = _entries$i.responseEnd;\n\n if (RESOURCE_INITIATOR_TYPES.indexOf(initiatorType) === -1 || name == null) {\n continue;\n }\n\n if ((initiatorType === 'xmlhttprequest' || initiatorType === 'fetch') && (isIntakeAPIEndpoint(name) || isCapturedByPatching(startTime, requestPatchTime))) {\n continue;\n }\n\n if (shouldCreateSpan(startTime, responseEnd, trStart, trEnd)) {\n spans.push(createResourceTimingSpan(entries[i]));\n }\n }\n\n return spans;\n}\n\nexport { createResourceTimingSpans };","import { PERF, isPerfTimelineSupported, isRedirectInfoAvailable } from '../../common/utils';\nimport { PAGE_LOAD, RESOURCE, MEASURE } from '../../common/constants';\nimport { state } from '../../state';\nimport { createNavigationTimingSpans } from './navigation-timing';\nimport { createUserTimingSpans } from './user-timing';\nimport { createResourceTimingSpans } from './resource-timing';\nimport { getPageLoadMarks } from './marks';\n\nfunction captureNavigation(transaction) {\n if (!transaction.captureTimings) {\n if (transaction.type === PAGE_LOAD) {\n transaction._start = 0;\n }\n\n return;\n }\n\n var trEnd = transaction._end;\n\n if (transaction.type === PAGE_LOAD) {\n if (transaction.marks && transaction.marks.custom) {\n var customMarks = transaction.marks.custom;\n Object.keys(customMarks).forEach(function (key) {\n customMarks[key] += transaction._start;\n });\n }\n\n var trStart = 0;\n transaction._start = trStart;\n var timings = PERF.timing;\n var baseTime = isRedirectInfoAvailable(timings) ? timings.redirectStart : timings.fetchStart;\n createNavigationTimingSpans(timings, baseTime, trStart, trEnd).forEach(function (span) {\n span.traceId = transaction.traceId;\n span.sampled = transaction.sampled;\n\n if (span.pageResponse && transaction.options.pageLoadSpanId) {\n span.id = transaction.options.pageLoadSpanId;\n }\n\n transaction.spans.push(span);\n });\n transaction.addMarks(getPageLoadMarks(timings));\n }\n\n if (isPerfTimelineSupported()) {\n var _trStart = transaction._start;\n var resourceEntries = PERF.getEntriesByType(RESOURCE);\n createResourceTimingSpans(resourceEntries, state.bootstrapTime, _trStart, trEnd).forEach(function (span) {\n return transaction.spans.push(span);\n });\n var userEntries = PERF.getEntriesByType(MEASURE);\n createUserTimingSpans(userEntries, _trStart, trEnd).forEach(function (span) {\n return transaction.spans.push(span);\n });\n }\n}\n\nexport { captureNavigation, createNavigationTimingSpans, createResourceTimingSpans, createUserTimingSpans, getPageLoadMarks };","import { USER_TIMING_THRESHOLD } from '../../common/constants';\nimport { shouldCreateSpan } from './utils';\nimport Span from '../span';\n\nfunction createUserTimingSpans(entries, trStart, trEnd) {\n var userTimingSpans = [];\n\n for (var i = 0; i < entries.length; i++) {\n var _entries$i = entries[i],\n name = _entries$i.name,\n startTime = _entries$i.startTime,\n duration = _entries$i.duration;\n var end = startTime + duration;\n\n if (duration <= USER_TIMING_THRESHOLD || !shouldCreateSpan(startTime, end, trStart, trEnd)) {\n continue;\n }\n\n var kind = 'app';\n var span = new Span(name, kind);\n span._start = startTime;\n span.end(end);\n userTimingSpans.push(span);\n }\n\n return userTimingSpans;\n}\n\nexport { createUserTimingSpans };","import { Promise } from '../common/polyfills';\nimport Transaction from './transaction';\nimport { PerfEntryRecorder, captureObserverEntries, metrics, createTotalBlockingTimeSpan } from './metrics';\nimport { extend, getEarliestSpan, getLatestNonXHRSpan, getLatestXHRSpan, isPerfTypeSupported, generateRandomId } from '../common/utils';\nimport { captureNavigation } from './navigation/capture-navigation';\nimport { PAGE_LOAD, NAME_UNKNOWN, TRANSACTION_START, TRANSACTION_END, TEMPORARY_TYPE, TRANSACTION_TYPE_ORDER, LARGEST_CONTENTFUL_PAINT, LONG_TASK, PAINT, TRUNCATED_TYPE, FIRST_INPUT, LAYOUT_SHIFT, SESSION_TIMEOUT, PAGE_LOAD_DELAY } from '../common/constants';\nimport { addTransactionContext } from '../common/context';\nimport { __DEV__, state } from '../state';\nimport { slugifyUrl } from '../common/url';\n\nvar TransactionService = function () {\n function TransactionService(logger, config) {\n var _this = this;\n\n this._config = config;\n this._logger = logger;\n this.currentTransaction = undefined;\n this.respIntervalId = undefined;\n this.recorder = new PerfEntryRecorder(function (list) {\n var tr = _this.getCurrentTransaction();\n\n if (tr && tr.captureTimings) {\n var _tr$spans;\n\n var isHardNavigation = tr.type === PAGE_LOAD;\n\n var _captureObserverEntri = captureObserverEntries(list, {\n isHardNavigation: isHardNavigation,\n trStart: isHardNavigation ? 0 : tr._start\n }),\n spans = _captureObserverEntri.spans,\n marks = _captureObserverEntri.marks;\n\n (_tr$spans = tr.spans).push.apply(_tr$spans, spans);\n\n tr.addMarks({\n agent: marks\n });\n }\n });\n }\n\n var _proto = TransactionService.prototype;\n\n _proto.createCurrentTransaction = function createCurrentTransaction(name, type, options) {\n var tr = new Transaction(name, type, options);\n this.currentTransaction = tr;\n return tr;\n };\n\n _proto.getCurrentTransaction = function getCurrentTransaction() {\n if (this.currentTransaction && !this.currentTransaction.ended) {\n return this.currentTransaction;\n }\n };\n\n _proto.createOptions = function createOptions(options) {\n var config = this._config.config;\n var presetOptions = {\n transactionSampleRate: config.transactionSampleRate\n };\n var perfOptions = extend(presetOptions, options);\n\n if (perfOptions.managed) {\n perfOptions = extend({\n pageLoadTraceId: config.pageLoadTraceId,\n pageLoadSampled: config.pageLoadSampled,\n pageLoadSpanId: config.pageLoadSpanId,\n pageLoadTransactionName: config.pageLoadTransactionName\n }, perfOptions);\n }\n\n return perfOptions;\n };\n\n _proto.startManagedTransaction = function startManagedTransaction(name, type, perfOptions) {\n var tr = this.getCurrentTransaction();\n var isRedefined = false;\n\n if (!tr) {\n tr = this.createCurrentTransaction(name, type, perfOptions);\n } else if (tr.canReuse() && perfOptions.canReuse) {\n var redefineType = tr.type;\n var currentTypeOrder = TRANSACTION_TYPE_ORDER.indexOf(tr.type);\n var redefineTypeOrder = TRANSACTION_TYPE_ORDER.indexOf(type);\n\n if (currentTypeOrder >= 0 && redefineTypeOrder < currentTypeOrder) {\n redefineType = type;\n }\n\n if (__DEV__) {\n this._logger.debug(\"redefining transaction(\" + tr.id + \", \" + tr.name + \", \" + tr.type + \")\", 'to', \"(\" + (name || tr.name) + \", \" + redefineType + \")\", tr);\n }\n\n tr.redefine(name, redefineType, perfOptions);\n isRedefined = true;\n } else {\n if (__DEV__) {\n this._logger.debug(\"ending previous transaction(\" + tr.id + \", \" + tr.name + \")\", tr);\n }\n\n tr.end();\n tr = this.createCurrentTransaction(name, type, perfOptions);\n }\n\n if (tr.type === PAGE_LOAD) {\n if (!isRedefined) {\n this.recorder.start(LARGEST_CONTENTFUL_PAINT);\n this.recorder.start(PAINT);\n this.recorder.start(FIRST_INPUT);\n this.recorder.start(LAYOUT_SHIFT);\n }\n\n if (perfOptions.pageLoadTraceId) {\n tr.traceId = perfOptions.pageLoadTraceId;\n }\n\n if (perfOptions.pageLoadSampled) {\n tr.sampled = perfOptions.pageLoadSampled;\n }\n\n if (tr.name === NAME_UNKNOWN && perfOptions.pageLoadTransactionName) {\n tr.name = perfOptions.pageLoadTransactionName;\n }\n }\n\n if (!isRedefined && this._config.get('monitorLongtasks')) {\n this.recorder.start(LONG_TASK);\n }\n\n if (tr.sampled) {\n tr.captureTimings = true;\n }\n\n return tr;\n };\n\n _proto.startTransaction = function startTransaction(name, type, options) {\n var _this2 = this;\n\n var perfOptions = this.createOptions(options);\n var tr;\n var fireOnstartHook = true;\n\n if (perfOptions.managed) {\n var current = this.currentTransaction;\n tr = this.startManagedTransaction(name, type, perfOptions);\n\n if (current === tr) {\n fireOnstartHook = false;\n }\n } else {\n tr = new Transaction(name, type, perfOptions);\n }\n\n tr.onEnd = function () {\n return _this2.handleTransactionEnd(tr);\n };\n\n if (fireOnstartHook) {\n if (__DEV__) {\n this._logger.debug(\"startTransaction(\" + tr.id + \", \" + tr.name + \", \" + tr.type + \")\");\n }\n\n this._config.events.send(TRANSACTION_START, [tr]);\n }\n\n return tr;\n };\n\n _proto.handleTransactionEnd = function handleTransactionEnd(tr) {\n var _this3 = this;\n\n this.recorder.stop();\n var currentUrl = window.location.href;\n return Promise.resolve().then(function () {\n var name = tr.name,\n type = tr.type;\n var lastHiddenStart = state.lastHiddenStart;\n\n if (lastHiddenStart >= tr._start) {\n if (__DEV__) {\n _this3._logger.debug(\"transaction(\" + tr.id + \", \" + name + \", \" + type + \") was discarded! The page was hidden during the transaction!\");\n }\n\n return;\n }\n\n if (_this3.shouldIgnoreTransaction(name) || type === TEMPORARY_TYPE) {\n if (__DEV__) {\n _this3._logger.debug(\"transaction(\" + tr.id + \", \" + name + \", \" + type + \") is ignored\");\n }\n\n return;\n }\n\n if (type === PAGE_LOAD) {\n var pageLoadTransactionName = _this3._config.get('pageLoadTransactionName');\n\n if (name === NAME_UNKNOWN && pageLoadTransactionName) {\n tr.name = pageLoadTransactionName;\n }\n\n if (tr.captureTimings) {\n var cls = metrics.cls,\n fid = metrics.fid,\n tbt = metrics.tbt,\n longtask = metrics.longtask;\n\n if (tbt.duration > 0) {\n tr.spans.push(createTotalBlockingTimeSpan(tbt));\n }\n\n tr.experience = {};\n\n if (isPerfTypeSupported(LONG_TASK)) {\n tr.experience.tbt = tbt.duration;\n }\n\n if (isPerfTypeSupported(LAYOUT_SHIFT)) {\n tr.experience.cls = cls.score;\n }\n\n if (fid > 0) {\n tr.experience.fid = fid;\n }\n\n if (longtask.count > 0) {\n tr.experience.longtask = {\n count: longtask.count,\n sum: longtask.duration,\n max: longtask.max\n };\n }\n }\n\n _this3.setSession(tr);\n }\n\n if (tr.name === NAME_UNKNOWN) {\n tr.name = slugifyUrl(currentUrl);\n }\n\n captureNavigation(tr);\n\n _this3.adjustTransactionTime(tr);\n\n var breakdownMetrics = _this3._config.get('breakdownMetrics');\n\n if (breakdownMetrics) {\n tr.captureBreakdown();\n }\n\n var configContext = _this3._config.get('context');\n\n addTransactionContext(tr, configContext);\n\n _this3._config.events.send(TRANSACTION_END, [tr]);\n\n if (__DEV__) {\n _this3._logger.debug(\"end transaction(\" + tr.id + \", \" + tr.name + \", \" + tr.type + \")\", tr);\n }\n }, function (err) {\n if (__DEV__) {\n _this3._logger.debug(\"error ending transaction(\" + tr.id + \", \" + tr.name + \")\", err);\n }\n });\n };\n\n _proto.setSession = function setSession(tr) {\n var session = this._config.get('session');\n\n if (session) {\n if (typeof session == 'boolean') {\n tr.session = {\n id: generateRandomId(16),\n sequence: 1\n };\n } else {\n if (session.timestamp && Date.now() - session.timestamp > SESSION_TIMEOUT) {\n tr.session = {\n id: generateRandomId(16),\n sequence: 1\n };\n } else {\n tr.session = {\n id: session.id,\n sequence: session.sequence ? session.sequence + 1 : 1\n };\n }\n }\n\n var sessionConfig = {\n session: {\n id: tr.session.id,\n sequence: tr.session.sequence,\n timestamp: Date.now()\n }\n };\n\n this._config.setConfig(sessionConfig);\n\n this._config.setLocalConfig(sessionConfig, true);\n }\n };\n\n _proto.adjustTransactionTime = function adjustTransactionTime(transaction) {\n var spans = transaction.spans;\n var earliestSpan = getEarliestSpan(spans);\n\n if (earliestSpan && earliestSpan._start < transaction._start) {\n transaction._start = earliestSpan._start;\n }\n\n var latestSpan = getLatestNonXHRSpan(spans) || {};\n var latestSpanEnd = latestSpan._end || 0;\n\n if (transaction.type === PAGE_LOAD) {\n var transactionEndWithoutDelay = transaction._end - PAGE_LOAD_DELAY;\n var lcp = metrics.lcp || 0;\n var latestXHRSpan = getLatestXHRSpan(spans) || {};\n var latestXHRSpanEnd = latestXHRSpan._end || 0;\n transaction._end = Math.max(latestSpanEnd, latestXHRSpanEnd, lcp, transactionEndWithoutDelay);\n } else if (latestSpanEnd > transaction._end) {\n transaction._end = latestSpanEnd;\n }\n\n this.truncateSpans(spans, transaction._end);\n };\n\n _proto.truncateSpans = function truncateSpans(spans, transactionEnd) {\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n\n if (span._end > transactionEnd) {\n span._end = transactionEnd;\n span.type += TRUNCATED_TYPE;\n }\n\n if (span._start > transactionEnd) {\n span._start = transactionEnd;\n }\n }\n };\n\n _proto.shouldIgnoreTransaction = function shouldIgnoreTransaction(transactionName) {\n var ignoreList = this._config.get('ignoreTransactions');\n\n if (ignoreList && ignoreList.length) {\n for (var i = 0; i < ignoreList.length; i++) {\n var element = ignoreList[i];\n\n if (typeof element.test === 'function') {\n if (element.test(transactionName)) {\n return true;\n }\n } else if (element === transactionName) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n _proto.startSpan = function startSpan(name, type, options) {\n var tr = this.getCurrentTransaction();\n\n if (!tr) {\n tr = this.createCurrentTransaction(undefined, TEMPORARY_TYPE, this.createOptions({\n canReuse: true,\n managed: true\n }));\n }\n\n var span = tr.startSpan(name, type, options);\n\n if (__DEV__) {\n this._logger.debug(\"startSpan(\" + name + \", \" + span.type + \")\", \"on transaction(\" + tr.id + \", \" + tr.name + \")\");\n }\n\n return span;\n };\n\n _proto.endSpan = function endSpan(span, context) {\n if (!span) {\n return;\n }\n\n if (__DEV__) {\n var tr = this.getCurrentTransaction();\n tr && this._logger.debug(\"endSpan(\" + span.name + \", \" + span.type + \")\", \"on transaction(\" + tr.id + \", \" + tr.name + \")\");\n }\n\n span.end(null, context);\n };\n\n return TransactionService;\n}();\n\nexport default TransactionService;","import { registerServices as registerErrorServices } from './error-logging';\nimport { registerServices as registerPerfServices } from './performance-monitoring';\nimport { ServiceFactory } from './common/service-factory';\nimport { isPlatformSupported, scheduleMicroTask, scheduleMacroTask, isBrowser } from './common/utils';\nimport { patchAll, patchEventHandler } from './common/patching';\nimport { observePageVisibility, observePageClicks } from './common/observers';\nimport { PAGE_LOAD_DELAY, PAGE_LOAD, ERROR, CONFIG_SERVICE, LOGGING_SERVICE, TRANSACTION_SERVICE, APM_SERVER, PERFORMANCE_MONITORING, ERROR_LOGGING, EVENT_TARGET, CLICK } from './common/constants';\nimport { getInstrumentationFlags } from './common/instrument';\nimport afterFrame from './common/after-frame';\nimport { bootstrap } from './bootstrap';\nimport { createTracer } from './opentracing';\n\nfunction createServiceFactory() {\n registerPerfServices();\n registerErrorServices();\n var serviceFactory = new ServiceFactory();\n return serviceFactory;\n}\n\nexport { createServiceFactory, ServiceFactory, patchAll, patchEventHandler, isPlatformSupported, isBrowser, getInstrumentationFlags, createTracer, scheduleMicroTask, scheduleMacroTask, afterFrame, ERROR, PAGE_LOAD_DELAY, PAGE_LOAD, CONFIG_SERVICE, LOGGING_SERVICE, TRANSACTION_SERVICE, APM_SERVER, PERFORMANCE_MONITORING, ERROR_LOGGING, EVENT_TARGET, CLICK, bootstrap, observePageVisibility, observePageClicks };","import PerformanceMonitoring from './performance-monitoring';\nimport TransactionService from './transaction-service';\nimport { APM_SERVER, CONFIG_SERVICE, LOGGING_SERVICE, TRANSACTION_SERVICE, PERFORMANCE_MONITORING } from '../common/constants';\nimport { serviceCreators } from '../common/service-factory';\n\nfunction registerServices() {\n serviceCreators[TRANSACTION_SERVICE] = function (serviceFactory) {\n var _serviceFactory$getSe = serviceFactory.getService([LOGGING_SERVICE, CONFIG_SERVICE]),\n loggingService = _serviceFactory$getSe[0],\n configService = _serviceFactory$getSe[1];\n\n return new TransactionService(loggingService, configService);\n };\n\n serviceCreators[PERFORMANCE_MONITORING] = function (serviceFactory) {\n var _serviceFactory$getSe2 = serviceFactory.getService([APM_SERVER, CONFIG_SERVICE, LOGGING_SERVICE, TRANSACTION_SERVICE]),\n apmServer = _serviceFactory$getSe2[0],\n configService = _serviceFactory$getSe2[1],\n loggingService = _serviceFactory$getSe2[2],\n transactionService = _serviceFactory$getSe2[3];\n\n return new PerformanceMonitoring(apmServer, configService, loggingService, transactionService);\n };\n}\n\nexport { registerServices };","import ErrorLogging from './error-logging';\nimport { CONFIG_SERVICE, TRANSACTION_SERVICE, ERROR_LOGGING, APM_SERVER } from '../common/constants';\nimport { serviceCreators } from '../common/service-factory';\n\nfunction registerServices() {\n serviceCreators[ERROR_LOGGING] = function (serviceFactory) {\n var _serviceFactory$getSe = serviceFactory.getService([APM_SERVER, CONFIG_SERVICE, TRANSACTION_SERVICE]),\n apmServer = _serviceFactory$getSe[0],\n configService = _serviceFactory$getSe[1],\n transactionService = _serviceFactory$getSe[2];\n\n return new ErrorLogging(apmServer, configService, transactionService);\n };\n}\n\nexport { registerServices };","import { QUEUE_ADD_TRANSACTION, QUEUE_FLUSH } from '../constants';\nimport { state } from '../../state';\nimport { now } from '../utils';\nexport function observePageVisibility(configService, transactionService) {\n if (document.visibilityState === 'hidden') {\n state.lastHiddenStart = 0;\n }\n\n var visibilityChangeHandler = function visibilityChangeHandler() {\n if (document.visibilityState === 'hidden') {\n onPageHidden(configService, transactionService);\n }\n };\n\n var pageHideHandler = function pageHideHandler() {\n return onPageHidden(configService, transactionService);\n };\n\n var useCapture = true;\n window.addEventListener('visibilitychange', visibilityChangeHandler, useCapture);\n window.addEventListener('pagehide', pageHideHandler, useCapture);\n return function () {\n window.removeEventListener('visibilitychange', visibilityChangeHandler, useCapture);\n window.removeEventListener('pagehide', pageHideHandler, useCapture);\n };\n}\n\nfunction onPageHidden(configService, transactionService) {\n var tr = transactionService.getCurrentTransaction();\n\n if (tr) {\n var unobserve = configService.observeEvent(QUEUE_ADD_TRANSACTION, function () {\n configService.dispatchEvent(QUEUE_FLUSH);\n state.lastHiddenStart = now();\n unobserve();\n });\n tr.end();\n } else {\n configService.dispatchEvent(QUEUE_FLUSH);\n state.lastHiddenStart = now();\n }\n}","import { USER_INTERACTION } from '../constants';\nvar INTERACTIVE_SELECTOR = 'a[data-transaction-name], button[data-transaction-name]';\nexport function observePageClicks(transactionService) {\n var clickHandler = function clickHandler(event) {\n if (event.target instanceof Element) {\n createUserInteractionTransaction(transactionService, event.target);\n }\n };\n\n var eventName = 'click';\n var useCapture = true;\n window.addEventListener(eventName, clickHandler, useCapture);\n return function () {\n window.removeEventListener(eventName, clickHandler, useCapture);\n };\n}\n\nfunction createUserInteractionTransaction(transactionService, target) {\n var _getTransactionMetada = getTransactionMetadata(target),\n transactionName = _getTransactionMetada.transactionName,\n context = _getTransactionMetada.context;\n\n var tr = transactionService.startTransaction(\"Click - \" + transactionName, USER_INTERACTION, {\n managed: true,\n canReuse: true,\n reuseThreshold: 300\n });\n\n if (tr && context) {\n tr.addContext(context);\n }\n}\n\nfunction getTransactionMetadata(target) {\n var metadata = {\n transactionName: null,\n context: null\n };\n metadata.transactionName = buildTransactionName(target);\n var classes = target.getAttribute('class');\n\n if (classes) {\n metadata.context = {\n custom: {\n classes: classes\n }\n };\n }\n\n return metadata;\n}\n\nfunction buildTransactionName(target) {\n var dtName = findCustomTransactionName(target);\n\n if (dtName) {\n return dtName;\n }\n\n var tagName = target.tagName.toLowerCase();\n var name = target.getAttribute('name');\n\n if (!!name) {\n return tagName + \"[\\\"\" + name + \"\\\"]\";\n }\n\n return tagName;\n}\n\nfunction findCustomTransactionName(target) {\n if (target.closest) {\n var element = target.closest(INTERACTIVE_SELECTOR);\n return element ? element.dataset.transactionName : null;\n }\n\n return target.dataset.transactionName;\n}","/**\n * MIT License\n *\n * Copyright (c) 2017-present, Elasticsearch BV\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\nimport {\n getInstrumentationFlags,\n PAGE_LOAD_DELAY,\n PAGE_LOAD,\n ERROR,\n CONFIG_SERVICE,\n LOGGING_SERVICE,\n TRANSACTION_SERVICE,\n PERFORMANCE_MONITORING,\n ERROR_LOGGING,\n APM_SERVER,\n EVENT_TARGET,\n CLICK,\n observePageVisibility,\n observePageClicks\n} from '@elastic/apm-rum-core'\n\nexport default class ApmBase {\n constructor(serviceFactory, disable) {\n this._disable = disable\n this.serviceFactory = serviceFactory\n this._initialized = false\n }\n\n isEnabled() {\n return !this._disable\n }\n\n isActive() {\n const configService = this.serviceFactory.getService(CONFIG_SERVICE)\n return this.isEnabled() && this._initialized && configService.get('active')\n }\n\n init(config) {\n if (this.isEnabled() && !this._initialized) {\n this._initialized = true\n const [\n configService,\n loggingService,\n transactionService\n ] = this.serviceFactory.getService([\n CONFIG_SERVICE,\n LOGGING_SERVICE,\n TRANSACTION_SERVICE\n ])\n /**\n * Set Agent version to be sent as part of metadata to the APM Server\n */\n configService.setVersion('5.15.0')\n this.config(config)\n /**\n * Set level here to account for both active and inactive cases\n */\n const logLevel = configService.get('logLevel')\n loggingService.setLevel(logLevel)\n /**\n * Deactive agent when the active config flag is set to false\n */\n const isConfigActive = configService.get('active')\n if (isConfigActive) {\n this.serviceFactory.init()\n\n const flags = getInstrumentationFlags(\n configService.get('instrument'),\n configService.get('disableInstrumentations')\n )\n\n const performanceMonitoring = this.serviceFactory.getService(\n PERFORMANCE_MONITORING\n )\n performanceMonitoring.init(flags)\n\n if (flags[ERROR]) {\n const errorLogging = this.serviceFactory.getService(ERROR_LOGGING)\n errorLogging.registerListeners()\n }\n\n if (configService.get('session')) {\n let localConfig = configService.getLocalConfig()\n if (localConfig && localConfig.session) {\n configService.setConfig({\n session: localConfig.session\n })\n }\n }\n\n const sendPageLoad = () =>\n flags[PAGE_LOAD] && this._sendPageLoadMetrics()\n\n if (configService.get('centralConfig')) {\n /**\n * Waiting for the remote config before sending the page load transaction\n */\n this.fetchCentralConfig().then(sendPageLoad)\n } else {\n sendPageLoad()\n }\n\n observePageVisibility(configService, transactionService)\n if (flags[EVENT_TARGET] && flags[CLICK]) {\n observePageClicks(transactionService)\n }\n } else {\n this._disable = true\n loggingService.warn('RUM agent is inactive')\n }\n }\n return this\n }\n\n /**\n * `fetchCentralConfig` returns a promise that will always resolve\n * if the internal config fetch fails the the promise resolves to `undefined` otherwise\n * it resolves to the fetched config.\n */\n fetchCentralConfig() {\n const [\n apmServer,\n loggingService,\n configService\n ] = this.serviceFactory.getService([\n APM_SERVER,\n LOGGING_SERVICE,\n CONFIG_SERVICE\n ])\n\n return apmServer\n .fetchConfig(\n configService.get('serviceName'),\n configService.get('environment')\n )\n .then(config => {\n var transactionSampleRate = config['transaction_sample_rate']\n if (transactionSampleRate) {\n transactionSampleRate = Number(transactionSampleRate)\n const config = { transactionSampleRate }\n const { invalid } = configService.validate(config)\n if (invalid.length === 0) {\n configService.setConfig(config)\n } else {\n const { key, value, allowed } = invalid[0]\n loggingService.warn(\n `invalid value \"${value}\" for ${key}. Allowed: ${allowed}.`\n )\n }\n }\n return config\n })\n .catch(error => {\n loggingService.warn('failed fetching config:', error)\n })\n }\n\n _sendPageLoadMetrics() {\n /**\n * Name of the transaction is set in transaction service to\n * avoid duplicating the logic at multiple places\n */\n const tr = this.startTransaction(undefined, PAGE_LOAD, {\n managed: true,\n canReuse: true\n })\n\n if (!tr) {\n return\n }\n\n tr.addTask(PAGE_LOAD)\n const sendPageLoadMetrics = () => {\n // The reasons of this timeout are:\n // 1. to make sure PerformanceTiming.loadEventEnd has a value.\n // 2. to make sure the agent intercepts all the LCP entries triggered by the browser (adding a delay in the timeout).\n // The browser might need more time after the pageload event to render other elements (e.g. images).\n // That's important because a LCP is only triggered when the related element is completely rendered.\n // https://w3c.github.io/largest-contentful-paint/#sec-add-lcp-entry\n setTimeout(() => tr.removeTask(PAGE_LOAD), PAGE_LOAD_DELAY)\n }\n\n if (document.readyState === 'complete') {\n sendPageLoadMetrics()\n } else {\n window.addEventListener('load', sendPageLoadMetrics)\n }\n }\n\n observe(name, fn) {\n const configService = this.serviceFactory.getService(CONFIG_SERVICE)\n configService.events.observe(name, fn)\n }\n\n /**\n * When the required config keys are invalid, the agent is deactivated with\n * logging error to the console\n *\n * validation error format\n * {\n * missing: [ 'key1', 'key2'],\n * invalid: [{\n * key: 'a',\n * value: 'abcd',\n * allowed: 'string'\n * }],\n * unknown: ['key3', 'key4']\n * }\n */\n config(config) {\n const [configService, loggingService] = this.serviceFactory.getService([\n CONFIG_SERVICE,\n LOGGING_SERVICE\n ])\n const { missing, invalid, unknown } = configService.validate(config)\n if (unknown.length > 0) {\n const message =\n 'Unknown config options are specified for RUM agent: ' +\n unknown.join(', ')\n loggingService.warn(message)\n }\n\n if (missing.length === 0 && invalid.length === 0) {\n configService.setConfig(config)\n } else {\n const separator = ', '\n let message = \"RUM agent isn't correctly configured. \"\n\n if (missing.length > 0) {\n message += missing.join(separator) + ' is missing'\n if (invalid.length > 0) {\n message += separator\n }\n }\n\n invalid.forEach(({ key, value, allowed }, index) => {\n message +=\n `${key} \"${value}\" contains invalid characters! (allowed: ${allowed})` +\n (index !== invalid.length - 1 ? separator : '')\n })\n loggingService.error(message)\n configService.setConfig({ active: false })\n }\n }\n\n setUserContext(userContext) {\n var configService = this.serviceFactory.getService(CONFIG_SERVICE)\n configService.setUserContext(userContext)\n }\n\n setCustomContext(customContext) {\n var configService = this.serviceFactory.getService(CONFIG_SERVICE)\n configService.setCustomContext(customContext)\n }\n\n addLabels(labels) {\n var configService = this.serviceFactory.getService(CONFIG_SERVICE)\n configService.addLabels(labels)\n }\n\n // Should call this method before 'load' event on window is fired\n setInitialPageLoadName(name) {\n const configService = this.serviceFactory.getService(CONFIG_SERVICE)\n configService.setConfig({\n pageLoadTransactionName: name\n })\n }\n\n startTransaction(name, type, options) {\n if (this.isEnabled()) {\n var transactionService = this.serviceFactory.getService(\n TRANSACTION_SERVICE\n )\n return transactionService.startTransaction(name, type, options)\n }\n }\n\n startSpan(name, type, options) {\n if (this.isEnabled()) {\n var transactionService = this.serviceFactory.getService(\n TRANSACTION_SERVICE\n )\n return transactionService.startSpan(name, type, options)\n }\n }\n\n getCurrentTransaction() {\n if (this.isEnabled()) {\n var transactionService = this.serviceFactory.getService(\n TRANSACTION_SERVICE\n )\n return transactionService.getCurrentTransaction()\n }\n }\n\n captureError(error) {\n if (this.isEnabled()) {\n var errorLogging = this.serviceFactory.getService(ERROR_LOGGING)\n return errorLogging.logError(error)\n }\n }\n\n addFilter(fn) {\n var configService = this.serviceFactory.getService(CONFIG_SERVICE)\n configService.addFilter(fn)\n }\n}\n","import { XMLHTTPREQUEST, FETCH, HISTORY, PAGE_LOAD, ERROR, EVENT_TARGET, CLICK } from './constants';\nexport function getInstrumentationFlags(instrument, disabledInstrumentations) {\n var _flags;\n\n var flags = (_flags = {}, _flags[XMLHTTPREQUEST] = false, _flags[FETCH] = false, _flags[HISTORY] = false, _flags[PAGE_LOAD] = false, _flags[ERROR] = false, _flags[EVENT_TARGET] = false, _flags[CLICK] = false, _flags);\n\n if (!instrument) {\n return flags;\n }\n\n Object.keys(flags).forEach(function (key) {\n if (disabledInstrumentations.indexOf(key) === -1) {\n flags[key] = true;\n }\n });\n return flags;\n}","/**\n * MIT License\n *\n * Copyright (c) 2017-present, Elasticsearch BV\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\nimport {\n createServiceFactory,\n bootstrap,\n isBrowser\n} from '@elastic/apm-rum-core'\nimport ApmBase from './apm-base'\n\n/**\n * Use a single instance of ApmBase across all instance of the agent\n * including the instances used in framework specific integrations\n */\nfunction getApmBase() {\n if (isBrowser && window.elasticApm) {\n return window.elasticApm\n }\n const enabled = bootstrap()\n const serviceFactory = createServiceFactory()\n const apmBase = new ApmBase(serviceFactory, !enabled)\n\n if (isBrowser) {\n window.elasticApm = apmBase\n }\n\n return apmBase\n}\n\nconst apmBase = getApmBase()\n\nconst init = apmBase.init.bind(apmBase)\n\nexport default init\nexport { init, apmBase, ApmBase, apmBase as apm }\n"],"sourceRoot":""}