{"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/common/patching/patch-utils.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/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/event-target-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/./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","errorEvent","filename","lineno","colno","stackTraces","stackParser","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","getTime","time","getDuration","start","end","parseInt","scheduleMicroTask","isPerfTimelineSupported","getEntriesByType","isPerfTypeSupported","type","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","span","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","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","SpanBase","options","sampleRate","timestamp","_start","startTime","_end","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","spans","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","ApmServer","loggingService","_loggingService","queue","throttleEvents","init","events","sendEvents","catch","_constructError","onThrottle","interval","counter","throttle","bind","_postJson","endPoint","payload","_this2","params","beforeSend","isCompressionStreamSupported","CompressionStream","compressedStream","Blob","stream","pipeThrough","Response","blob","compressPayload","_makeHttpRequest","responseText","_ref2","_ref2$timeout","timeout","xhr","open","header","onreadystatechange","readyState","onerror","canSend","send","fetchConfig","serviceName","_this3","configEndpoint","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","apiVersion","ndjson","metadataKey","ve","la","en","compressMetadata","ndjsonPayload","serverUrlPrefix","EventHandler","observers","observe","splice","sendOnly","obs","log","_extends","assign","_serviceCreators","Config","config","serviceVersion","serverUrl","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","missing","invalid","allowed","storage","sessionStorage","localStorage","getItem","setItem","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","eventTypes","eventTypeSymbols","et","shouldInstrumentEvent","eventType","listenerFn","Element","patchEventHandler","alreadyPatched","patchAll","fetch","Request","nativeFetch","input","request","fetchSelf","aborted","patchFetch","history","nativePushState","pushState","title","patchHistory","EventTarget","nativeAddEventListener","nativeRemoveEventListener","optionsOrCapture","wrappingListenerFn","createListenerWrapper","wrappingFn","getWrappingFn","findTaskIndex","existingTasks","capture","isCapture","eventSymbol","taskIndex","patchEventTarget","PerformanceMonitoring","_logginService","flags","TRANSACTION_END","createTransactionPayload","getHistorySub","getXHRSub","getFetchSub","getEventTargetSub","tagName","transactionName","dataset","getAttribute","startTransaction","managed","canReuse","reuseThreshold","classes","processAPICalls","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","redefine","trc","_onSpanEnd","addTask","isFinished","size","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","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","latestSpan","_i3","getLatestNonXHRSpan","transactionEnd","ignoreList","element","createServiceFactory","serviceFactory","_serviceFactory$getSe","_serviceFactory$getSe2","enabled","bootstrap","visibilityState","bootstrapPerf","ApmBase","disable","_disable","_initialized","isEnabled","isActive","disabledInstrumentations","_flags","getInstrumentationFlags","sendPageLoad","_sendPageLoadMetrics","fetchCentralConfig","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); }","import stackParser from 'error-stack-parser';\n\nfunction 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\nexport function createStackTraces(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 (stackTraces.length === 0) {\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 getLatestNonXHRSpan(spans) {\n var latestSpan = null;\n\n for (var _i3 = 0; _i3 < spans.length; _i3++) {\n var span = spans[_i3];\n\n if (String(span.type).indexOf('external') === -1 && (!latestSpan || latestSpan._end < span._end)) {\n latestSpan = span;\n }\n }\n\n return latestSpan;\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\nexport { extend, merge, isUndefined, noop, baseExtend, bytesToHex, isCORSSupported, isObject, isFunction, isPlatformSupported, isDtHeaderValid, parseDtHeaderValue, getServerTimingInfo, getDtHeaderValue, getTSHeaderValue, getCurrentScript, getElasticScript, getTimeOrigin, generateRandomId, getEarliestSpan, getLatestNonXHRSpan, getDuration, getTime, now, rng, checkSameOrigin, scheduleMacroTask, scheduleMicroTask, setLabel, setRequestHeader, stripQueryStringFromUrl, find, removeInvalidChars, PERF, isPerfTimelineSupported, isBrowser, isPerfTypeSupported };","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 = '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 USER_TIMING_THRESHOLD = 60;\nvar TRANSACTION_START = 'transaction:start';\nvar TRANSACTION_END = 'transaction:end';\nvar CONFIG_CHANGE = 'config:change';\nvar XMLHTTPREQUEST = 'xmlhttprequest';\nvar FETCH = 'fetch';\nvar HISTORY = 'history';\nvar EVENT_TARGET = 'eventtarget';\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 APM_SERVER = 'ApmServer';\nvar TRUNCATED_TYPE = '.truncated';\nvar KEYWORD_LIMIT = 1024;\nvar SESSION_TIMEOUT = 30 * 60000;\nexport { SCHEDULE, INVOKE, ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, RESOURCE_INITIATOR_TYPES, REUSABILITY_THRESHOLD, MAX_SPAN_DURATION, PAGE_LOAD, ROUTE_CHANGE, NAME_UNKNOWN, TYPE_CUSTOM, USER_TIMING_THRESHOLD, TRANSACTION_START, TRANSACTION_END, CONFIG_CHANGE, XMLHTTPREQUEST, FETCH, HISTORY, EVENT_TARGET, 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, APM_SERVER, TRUNCATED_TYPE, FIRST_INPUT, LAYOUT_SHIFT, OUTCOME_SUCCESS, OUTCOME_FAILURE, SESSION_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';\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(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;","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 { 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';\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 var payload = params.payload,\n headers = params.headers,\n beforeSend = params.beforeSend;\n var payloadStream = new Blob([payload]).stream();\n var compressedStream = payloadStream.pipeThrough(new CompressionStream(type));\n return new Response(compressedStream).blob().then(function (payload) {\n headers['Content-Encoding'] = type;\n return resolve({\n payload: payload,\n headers: headers,\n beforeSend: beforeSend\n });\n });\n });\n}","import Queue from './queue';\nimport throttle from './throttle';\nimport NDJSON from './ndjson';\nimport { XHR_IGNORE } from './patching/patch-utils';\nimport { truncateModel, METADATA_MODEL } from './truncate';\nimport { ERRORS, TRANSACTIONS } from './constants';\nimport { noop } from './utils';\nimport { Promise } from './polyfills';\nimport { compressMetadata, compressTransaction, compressError, compressPayload } from './compress';\nimport { __DEV__ } from '../state';\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\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 ? 10000 : _ref2$timeout,\n payload = _ref2.payload,\n headers = _ref2.headers,\n beforeSend = _ref2.beforeSend;\n\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\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 (status === 0 || status > 399 && status < 600) {\n reject({\n url: url,\n status: status,\n responseText: responseText\n });\n } else {\n resolve(xhr);\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 };\n\n _proto.fetchConfig = function fetchConfig(serviceName, environment) {\n var _this3 = this;\n\n var serverUrl = this._configService.get('serverUrl');\n\n var configEndpoint = serverUrl + \"/config/v1/rum/agents\";\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 var serverUrlPrefix = cfg.get('serverUrlPrefix') || \"/intake/v\" + apiVersion + \"/rum/events\";\n var endPoint = cfg.get('serverUrl') + serverUrlPrefix;\n return this._postJson(endPoint, ndjsonPayload);\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 };\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 errors = {\n missing: [],\n invalid: []\n };\n Object.keys(properties).forEach(function (key) {\n if (requiredKeys.indexOf(key) !== -1 && !properties[key]) {\n errors.missing.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 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 { SCHEDULE, INVOKE, ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, EVENT_TARGET } from '../constants';\nimport { apmSymbol } from './patch-utils';\nvar eventTypes = ['click'];\nvar eventTypeSymbols = {};\n\nfor (var i = 0; i < eventTypes.length; i++) {\n var et = eventTypes[i];\n eventTypeSymbols[et] = apmSymbol(et);\n}\n\nfunction shouldInstrumentEvent(target, eventType, listenerFn) {\n return target instanceof Element && eventTypes.indexOf(eventType) >= 0 && typeof listenerFn === 'function';\n}\n\nexport function patchEventTarget(callback) {\n if (!window.EventTarget) {\n return;\n }\n\n var proto = window.EventTarget.prototype;\n var nativeAddEventListener = proto[ADD_EVENT_LISTENER_STR];\n var nativeRemoveEventListener = proto[REMOVE_EVENT_LISTENER_STR];\n\n function findTaskIndex(existingTasks, eventType, listenerFn, capture) {\n for (var _i = 0; _i < existingTasks.length; _i++) {\n var task = existingTasks[_i];\n\n if (task.eventType === eventType && task.listenerFn === listenerFn && task.capture === capture) {\n return _i;\n }\n }\n\n return -1;\n }\n\n function isCapture(options) {\n var capture;\n\n if (typeof options === 'boolean') {\n capture = options;\n } else {\n capture = options ? !!options.capture : false;\n }\n\n return capture;\n }\n\n function createListenerWrapper(target, eventType, listenerFn, options) {\n var eventSymbol = eventTypeSymbols[eventType];\n if (!eventSymbol) return listenerFn;\n var existingTasks = target[eventSymbol];\n var capture = isCapture(options);\n\n if (existingTasks) {\n var taskIndex = findTaskIndex(existingTasks, eventType, listenerFn, capture);\n\n if (taskIndex !== -1) {\n var _task = existingTasks[taskIndex];\n return _task.wrappingFn;\n }\n } else {\n existingTasks = target[eventSymbol] = [];\n }\n\n var task = {\n source: EVENT_TARGET,\n target: target,\n eventType: eventType,\n listenerFn: listenerFn,\n capture: capture,\n wrappingFn: wrappingFn\n };\n existingTasks.push(task);\n\n function wrappingFn() {\n callback(SCHEDULE, task);\n var result;\n\n try {\n result = listenerFn.apply(this, arguments);\n } finally {\n callback(INVOKE, task);\n }\n\n return result;\n }\n\n return wrappingFn;\n }\n\n function getWrappingFn(target, eventType, listenerFn, options) {\n var eventSymbol = eventTypeSymbols[eventType];\n var existingTasks = target[eventSymbol];\n\n if (existingTasks) {\n var capture = isCapture(options);\n var taskIndex = findTaskIndex(existingTasks, eventType, listenerFn, capture);\n\n if (taskIndex !== -1) {\n var task = existingTasks[taskIndex];\n existingTasks.splice(taskIndex, 1);\n\n if (existingTasks.length === 0) {\n target[eventSymbol] = undefined;\n }\n\n return task.wrappingFn;\n }\n }\n\n return listenerFn;\n }\n\n proto[ADD_EVENT_LISTENER_STR] = function (eventType, listenerFn, optionsOrCapture) {\n var target = this;\n\n if (!shouldInstrumentEvent(target, eventType, listenerFn)) {\n return nativeAddEventListener.apply(target, arguments);\n }\n\n var wrappingListenerFn = createListenerWrapper(target, eventType, listenerFn, optionsOrCapture);\n var args = Array.prototype.slice.call(arguments);\n args[1] = wrappingListenerFn;\n return nativeAddEventListener.apply(target, args);\n };\n\n proto[REMOVE_EVENT_LISTENER_STR] = function (eventType, listenerFn, optionsOrCapture) {\n var target = this;\n\n if (!shouldInstrumentEvent(target, eventType, listenerFn)) {\n return nativeRemoveEventListener.apply(target, arguments);\n }\n\n var wrappingFn = getWrappingFn(target, eventType, listenerFn, optionsOrCapture);\n var args = Array.prototype.slice.call(arguments);\n args[1] = wrappingFn;\n return nativeRemoveEventListener.apply(target, args);\n };\n}","import { patchXMLHttpRequest } from './xhr-patch';\nimport { patchFetch } from './fetch-patch';\nimport { patchHistory } from './history-patch';\nimport { patchEventTarget } from './event-target-patch';\nimport EventHandler from '../event-handler';\nimport { HISTORY, FETCH, XMLHTTPREQUEST, EVENT_TARGET } 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 patchEventTarget(function (event, task) {\n patchEventHandler.send(EVENT_TARGET, [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';\nexport function patchFetch(callback) {\n if (!window.fetch || !window.Request) {\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 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 resolve(response);\n scheduleMicroTask(function () {\n task.data.response = response;\n invokeTask(task);\n });\n }, function (error) {\n reject(error);\n scheduleMicroTask(function () {\n task.data.error = error;\n invokeTask(task);\n });\n });\n globalState.fetchInProgress = false;\n });\n };\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, EVENT_TARGET, HTTP_REQUEST_TYPE, USER_INTERACTION, OUTCOME_FAILURE, OUTCOME_SUCCESS } 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 });\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 if (flags[EVENT_TARGET]) {\n patchEventHandler.observe(EVENT_TARGET, this.getEventTargetSub());\n }\n };\n\n _proto.getEventTargetSub = function getEventTargetSub() {\n var transactionService = this._transactionService;\n return function (event, task) {\n if (event === SCHEDULE && task.source === EVENT_TARGET && task.eventType === 'click') {\n var target = task.target;\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 var tr = transactionService.startTransaction(\"Click - \" + transactionName, USER_INTERACTION, {\n managed: true,\n canReuse: true,\n reuseThreshold: 300\n });\n\n if (tr) {\n var classes = target.getAttribute('class');\n\n if (classes) {\n tr.addContext({\n custom: {\n classes: classes\n }\n });\n }\n }\n }\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 (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') {\n if (status >= 400 || status == 0) {\n outcome = OUTCOME_FAILURE;\n } else {\n outcome = OUTCOME_SUCCESS;\n }\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 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: 0,\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 metrics.cls += entry.value;\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, 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 } 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;\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\n if (latestSpan && latestSpan._end > transaction._end) {\n transaction._end = latestSpan._end;\n }\n\n var transactionEnd = transaction._end;\n\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 { PAGE_LOAD, ERROR, CONFIG_SERVICE, LOGGING_SERVICE, APM_SERVER } 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, CONFIG_SERVICE, LOGGING_SERVICE, APM_SERVER, bootstrap };","import PerformanceMonitoring from './performance-monitoring';\nimport TransactionService from './transaction-service';\nimport { APM_SERVER, CONFIG_SERVICE, LOGGING_SERVICE } from '../common/constants';\nimport { serviceCreators } from '../common/service-factory';\n\nfunction registerServices() {\n serviceCreators['TransactionService'] = 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['PerformanceMonitoring'] = function (serviceFactory) {\n var _serviceFactory$getSe2 = serviceFactory.getService([APM_SERVER, CONFIG_SERVICE, LOGGING_SERVICE, 'TransactionService']),\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, APM_SERVER } from '../common/constants';\nimport { serviceCreators } from '../common/service-factory';\n\nfunction registerServices() {\n serviceCreators['ErrorLogging'] = function (serviceFactory) {\n var _serviceFactory$getSe = serviceFactory.getService([APM_SERVER, CONFIG_SERVICE, 'TransactionService']),\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 bootstrapPerf();\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}\nexport function bootstrapPerf() {\n if (document.visibilityState === 'hidden') {\n state.lastHiddenStart = 0;\n }\n\n window.addEventListener('visibilitychange', function () {\n if (document.visibilityState === 'hidden') {\n state.lastHiddenStart = performance.now();\n }\n }, {\n capture: true\n });\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,\n ERROR,\n CONFIG_SERVICE,\n LOGGING_SERVICE,\n APM_SERVER\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 [configService, loggingService] = this.serviceFactory.getService([\n CONFIG_SERVICE,\n LOGGING_SERVICE\n ])\n /**\n * Set Agent version to be sent as part of metadata to the APM Server\n */\n configService.setVersion('5.10.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 'PerformanceMonitoring'\n )\n performanceMonitoring.init(flags)\n\n if (flags[ERROR]) {\n const errorLogging = this.serviceFactory.getService('ErrorLogging')\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 } 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 // to make sure PerformanceTiming.loadEventEnd has a value\n setTimeout(() => tr.removeTask(PAGE_LOAD))\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 * }\n */\n config(config) {\n const configService = this.serviceFactory.getService(CONFIG_SERVICE)\n const { missing, invalid } = configService.validate(config)\n if (missing.length === 0 && invalid.length === 0) {\n configService.setConfig(config)\n } else {\n const loggingService = this.serviceFactory.getService(LOGGING_SERVICE)\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 'TransactionService'\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 'TransactionService'\n )\n return transactionService.startSpan(name, type, options)\n }\n }\n\n getCurrentTransaction() {\n if (this.isEnabled()) {\n var transactionService = this.serviceFactory.getService(\n 'TransactionService'\n )\n return transactionService.getCurrentTransaction()\n }\n }\n\n captureError(error) {\n if (this.isEnabled()) {\n var errorLogging = this.serviceFactory.getService('ErrorLogging')\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 } 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);\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 instanes 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":""}