{"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/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/performance-monitoring/metrics/inp/process.js","webpack://@elastic/apm-rum/../rum-core/dist/es/performance-monitoring/metrics/inp/report.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","isPerfInteractionCountSupported","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","ensureContext","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","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","inpState","minInteractionId","maxInteractionId","interactionCount","longestInteractions","processUserInteractions","getEntries","interactionId","updateInteractionCount","leastSlow","filteredInteraction","interaction","foundInteraction","b","storeUserInteraction","reportInp","inp","interactionIndex","floor","calculateInp","inpTr","navigations","hardNavigationUrl","inp_value","onPageHidden","unobserve","endManagedTransaction","unobserveDiscard","unobserveQueueAdd","observePageClicks","clickHandler","Element","_getTransactionMetada","dtName","fallbackName","getAttribute","closest","findCustomTransactionName","tagName","buildTransactionName","classes","getTransactionMetadata","createUserInteractionTransaction","removeEventListener","ApmBase","disable","_disable","_initialized","isEnabled","isActive","disabledInstrumentations","_flags","getInstrumentationFlags","sendPageLoad","_sendPageLoadMetrics","fetchCentralConfig","visibilityState","visibilityChangeHandler","pageHideHandler","observePageVisibility","isPerfCountSupported","durationThreshold","observeUserInteractions","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 isPerfInteractionCountSupported() {\n return 'interactionCount' in performance;\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, isPerfInteractionCountSupported, 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 PAGE_EXIT = 'page-exit';\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 TRANSACTION_IGNORE = 'transaction:ignore';\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 EVENT = 'event';\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, PAGE_EXIT, TYPE_CUSTOM, USER_TIMING_THRESHOLD, TRANSACTION_START, TRANSACTION_END, CONFIG_CHANGE, QUEUE_FLUSH, QUEUE_ADD_TRANSACTION, TRANSACTION_IGNORE, 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, EVENT, 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, PAGE_EXIT, 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_EXIT) {\n transaction.ensureContext();\n\n if (transaction.context.page && transaction.context.page.url) {\n pageContext.page.url = transaction.context.page.url;\n }\n } else 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, TRANSACTION_IGNORE } 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 this._configService.dispatchEvent(TRANSACTION_IGNORE);\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;","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 { 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, options) {\n if (options === void 0) {\n options = {\n buffered: true\n };\n }\n\n try {\n if (!isPerfTypeSupported(type)) {\n return;\n }\n\n this.po.observe(_extends({\n type: type\n }, options));\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/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, TRANSACTION_IGNORE, 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 _this3._config.dispatchEvent(TRANSACTION_IGNORE);\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 _this3._config.dispatchEvent(TRANSACTION_IGNORE);\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, observeUserInteractions } 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, observeUserInteractions, 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';\nimport { observeUserInteractions } from './metrics/inp/process';\nimport { reportInp } from './metrics/inp/report';\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, observeUserInteractions, reportInp };","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 { EVENT, FIRST_INPUT } from '../../../common/constants';\nimport { isPerfInteractionCountSupported } from '../../../common/utils';\nimport { PerfEntryRecorder } from '../metrics';\nvar INP_THRESHOLD = 40;\nvar MAX_INTERACTIONS_TO_CONSIDER = 10;\nexport var inpState = {\n minInteractionId: Infinity,\n maxInteractionId: 0,\n interactionCount: 0,\n longestInteractions: []\n};\nexport function observeUserInteractions(recorder) {\n if (recorder === void 0) {\n recorder = new PerfEntryRecorder(processUserInteractions);\n }\n\n var isPerfCountSupported = isPerfInteractionCountSupported();\n var durationThreshold = isPerfCountSupported ? INP_THRESHOLD : 16;\n recorder.start(EVENT, {\n buffered: true,\n durationThreshold: durationThreshold\n });\n\n if (!isPerfCountSupported) {\n recorder.start(FIRST_INPUT);\n }\n}\nexport function processUserInteractions(list) {\n var entries = list.getEntries();\n entries.forEach(function (entry) {\n if (!entry.interactionId) {\n return;\n }\n\n updateInteractionCount(entry);\n\n if (entry.duration < INP_THRESHOLD) {\n return;\n }\n\n storeUserInteraction(entry);\n });\n}\nexport function calculateInp() {\n if (inpState.longestInteractions.length === 0) {\n if (interactionCount() > 0) {\n return 0;\n }\n\n return;\n }\n\n var interactionIndex = Math.min(inpState.longestInteractions.length - 1, Math.floor(interactionCount() / 50));\n var inp = inpState.longestInteractions[interactionIndex].duration;\n return inp;\n}\nexport function interactionCount() {\n return performance.interactionCount || inpState.interactionCount;\n}\nexport function restoreINPState() {\n inpState.minInteractionId = Infinity;\n inpState.maxInteractionId = 0;\n inpState.interactionCount = 0;\n inpState.longestInteractions = [];\n}\n\nfunction storeUserInteraction(entry) {\n var leastSlow = inpState.longestInteractions[inpState.longestInteractions.length - 1];\n\n if (typeof leastSlow !== 'undefined' && entry.duration <= leastSlow.duration && entry.interactionId != leastSlow.id) {\n return;\n }\n\n var filteredInteraction = inpState.longestInteractions.filter(function (interaction) {\n return interaction.id === entry.interactionId;\n });\n\n if (filteredInteraction.length > 0) {\n var foundInteraction = filteredInteraction[0];\n foundInteraction.duration = Math.max(foundInteraction.duration, entry.duration);\n } else {\n inpState.longestInteractions.push({\n id: entry.interactionId,\n duration: entry.duration\n });\n }\n\n inpState.longestInteractions.sort(function (a, b) {\n return b.duration - a.duration;\n });\n inpState.longestInteractions.splice(MAX_INTERACTIONS_TO_CONSIDER);\n}\n\nfunction updateInteractionCount(entry) {\n if (isPerfInteractionCountSupported()) {\n return;\n }\n\n inpState.minInteractionId = Math.min(inpState.minInteractionId, entry.interactionId);\n inpState.maxInteractionId = Math.max(inpState.maxInteractionId, entry.interactionId);\n inpState.interactionCount = (inpState.maxInteractionId - inpState.minInteractionId) / 7 + 1;\n}","import { calculateInp, restoreINPState } from './process';\nimport { now } from '../../../common/utils';\nimport { PAGE_EXIT } from '../../../common/constants';\nexport function reportInp(transactionService) {\n var inp = calculateInp();\n\n if (inp >= 0) {\n var startTime = now();\n var inpTr = transactionService.startTransaction(PAGE_EXIT, PAGE_EXIT, {\n startTime: startTime\n });\n var navigations = performance.getEntriesByType('navigation');\n\n if (navigations.length > 0) {\n var hardNavigationUrl = navigations[0].name;\n inpTr.addContext({\n page: {\n url: hardNavigationUrl\n }\n });\n }\n\n inpTr.addLabels({\n inp_value: inp\n });\n var endTime = startTime + inp + 1;\n inpTr.end(endTime);\n restoreINPState();\n return inpTr;\n }\n}","import { QUEUE_ADD_TRANSACTION, QUEUE_FLUSH, TRANSACTION_IGNORE } from '../constants';\nimport { state } from '../../state';\nimport { now } from '../utils';\nimport { reportInp } from '../../performance-monitoring/metrics/inp/report';\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 inpTr = reportInp(transactionService);\n\n if (inpTr) {\n var unobserve = configService.observeEvent(QUEUE_ADD_TRANSACTION, function () {\n endManagedTransaction(configService, transactionService);\n unobserve();\n });\n } else {\n endManagedTransaction(configService, transactionService);\n }\n}\n\nfunction endManagedTransaction(configService, transactionService) {\n var tr = transactionService.getCurrentTransaction();\n\n if (tr) {\n var unobserveDiscard = configService.observeEvent(TRANSACTION_IGNORE, function () {\n state.lastHiddenStart = now();\n unobserveDiscard();\n unobserveQueueAdd();\n });\n var unobserveQueueAdd = configService.observeEvent(QUEUE_ADD_TRANSACTION, function () {\n configService.dispatchEvent(QUEUE_FLUSH);\n state.lastHiddenStart = now();\n unobserveQueueAdd();\n unobserveDiscard();\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 var trCustomNameAttribute = 'data-transaction-name';\n var fallbackName = target.getAttribute(trCustomNameAttribute);\n\n if (target.closest) {\n var element = target.closest(INTERACTIVE_SELECTOR);\n return element ? element.getAttribute(trCustomNameAttribute) : fallbackName;\n }\n\n return fallbackName;\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 observeUserInteractions\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.16.1')\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 observeUserInteractions()\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":""}