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