@dash0/sdk-web 0.18.4 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dash0.iife.js +1 -1
- package/dist/dash0.iife.js.map +1 -1
- package/dist/dash0.js +1 -1
- package/dist/dash0.js.map +1 -1
- package/dist/dash0.umd.cjs +1 -1
- package/dist/dash0.umd.cjs.map +1 -1
- package/dist/modules/api/init.js +11 -3
- package/dist/modules/api/init_test.js +74 -1
- package/dist/modules/semantic-conventions.js +1 -0
- package/dist/modules/utils/index.js +1 -0
- package/dist/modules/utils/sanitize.js +12 -0
- package/dist/modules/utils/sanitize_test.js +52 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/semantic-conventions.d.ts +1 -0
- package/dist/types/types/options.d.ts +11 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/sanitize.d.ts +9 -0
- package/dist/types/utils/sanitize_test.d.ts +1 -0
- package/package.json +1 -1
- package/src/api/init.ts +11 -1
- package/src/api/init_test.ts +95 -1
- package/src/semantic-conventions.ts +1 -0
- package/src/types/options.ts +12 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/sanitize.ts +13 -0
- package/src/utils/sanitize_test.ts +60 -0
package/dist/dash0.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dash0.umd.cjs","sources":["modules/utils/fn.js","modules/utils/debug.js","modules/utils/obj.js","modules/utils/globals.js","modules/utils/id.js","modules/utils/listeners.js","modules/utils/local-storage.js","modules/utils/time.js","modules/utils/timers.js","modules/utils/performance.js","modules/utils/constants.js","modules/utils/math.js","modules/utils/url.js","modules/utils/origin.js","modules/utils/wrap.js","modules/vars.js","modules/semantic-conventions.js","modules/utils/session-id.js","modules/api/session.js","../node_modules/.pnpm/web-vitals@5.0.3/node_modules/web-vitals/dist/web-vitals.js","modules/utils/on-last-chance.js","modules/transport/batcher.js","modules/transport/fetch.js","modules/transport/index.js","modules/utils/rate-limit.js","modules/utils/otel/attributes.js","modules/utils/otel/trace-context.js","modules/utils/trace-id.js","modules/utils/crc32.js","modules/utils/span-id.js","modules/utils/otel/span.js","modules/attributes/url.js","modules/utils/session-storage.js","modules/utils/tab-id.js","modules/attributes/common.js","modules/instrumentations/web-vitals.js","modules/utils/ignore-rules.js","modules/instrumentations/errors/unhandled-error.js","modules/instrumentations/errors/unhandled-promise-rejection.js","modules/instrumentations/errors/async-function-wrapping.js","modules/instrumentations/errors/event-handlers.js","modules/instrumentations/errors/timers.js","modules/instrumentations/errors/index.js","modules/instrumentations/http/utils.js","modules/instrumentations/http/fetch.js","modules/utils/otel/http.js","modules/utils/otel/error.js","modules/instrumentations/navigation/event.js","modules/instrumentations/navigation/page-load.js","modules/instrumentations/navigation/page-transition.js","modules/instrumentations/navigation/index.js","../node_modules/.pnpm/ts-deepmerge@7.0.3/node_modules/ts-deepmerge/esm/index.js","modules/api/init.js","modules/utils/pick.js","modules/api/attributes.js","modules/api/debug.js","modules/api/identify.js","modules/entrypoint/npm-package.js","modules/api/report-error.js","modules/api/events.js"],"sourcesContent":["export function noop() {\n // This function is intentionally empty.\n}\nexport function identity(a) {\n return a;\n}\n","import { noop } from \"./fn\";\nconst logLevels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\nlet activeLogLevel = logLevels.warn;\n/**\n * Changes the logging verbosity of Dash0's web SDK. By default, only warnings and errors are logged.\n */\nexport function setActiveLogLevel(level) {\n activeLogLevel = logLevels[level] ?? logLevels.warn;\n}\nexport const info = createLogger(\"info\");\nexport const warn = createLogger(\"warn\");\nexport const error = createLogger(\"error\");\nexport const debug = createLogger(\"debug\");\nfunction createLogger(logLevel) {\n if (typeof console !== \"undefined\" && console[logLevel] && typeof console[logLevel].apply === \"function\") {\n const numericLogLevel = logLevels[logLevel];\n return function () {\n if (numericLogLevel >= activeLogLevel) {\n console[logLevel].apply(console, arguments);\n }\n };\n }\n return noop;\n}\n","const globalHasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * protection against hasOwnProperty overrides.\n */\nexport function hasOwnProperty(obj, key) {\n return globalHasOwnProperty.call(obj, key);\n}\nexport function hasKey(obj, key) {\n return key in obj;\n}\n","// aliasing globals for improved minification\n// Avoid blowing up in an ssr context. It is important to check via typeof here because window might not even be declared when imported in ssr.\nexport const win = typeof window !== \"undefined\" ? window : undefined;\nexport const doc = win?.document;\nexport const nav = win?.navigator;\nexport const loc = typeof location !== \"undefined\" ? location : undefined;\nexport const perf = win?.performance || win?.webkitPerformance || win?.msPerformance || win?.mozPerformance;\nexport const encodeURIComponent = win?.encodeURIComponent;\nexport const fetch = win?.fetch;\nexport const localStorage = (function () {\n try {\n return win?.localStorage ?? null;\n }\n catch {\n // localStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\nexport const sessionStorage = (function () {\n try {\n return win?.sessionStorage ?? null;\n }\n catch {\n // sessionStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\n/**\n * Exposed via this module to enable testing.\n */\nexport function sendBeacon(url, data) {\n return nav?.sendBeacon(url, data) ?? false;\n}\n/* eslint-enable no-restricted-globals */\n","export const SPAN_ID_BYTES = 8;\nexport const TRACE_ID_BYTES = 16;\nexport const PAGE_LOAD_ID_BYTES = TRACE_ID_BYTES;\nexport const SESSION_ID_BYTES = SPAN_ID_BYTES;\nexport const TAB_ID_BYTES = SPAN_ID_BYTES;\nexport const WEB_EVENT_ID_BYTES = SPAN_ID_BYTES;\nconst SHARED_CHAR_CODES_ARRAY = Array(32);\nexport function generateUniqueId(byteCount) {\n for (let i = 0; i < byteCount * 2; i++) {\n SHARED_CHAR_CODES_ARRAY[i] = Math.floor(Math.random() * 16) + 48;\n // valid hex characters in the range 48-57 and 97-102\n if (SHARED_CHAR_CODES_ARRAY[i] >= 58) {\n SHARED_CHAR_CODES_ARRAY[i] += 39;\n }\n }\n return String.fromCharCode.apply(null, SHARED_CHAR_CODES_ARRAY.slice(0, byteCount * 2));\n}\n","// aliasing the global function for improved minification and\n// protection against hasOwnProperty overrides.\nexport function addEventListener(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n }\n else if (target.attachEvent) {\n target.attachEvent(\"on\" + eventType, callback);\n }\n}\nexport function removeEventListener(target, eventType, callback) {\n if (target.removeEventListener) {\n target.removeEventListener(eventType, callback, false);\n }\n else if (target.detachEvent) {\n target.detachEvent(\"on\" + eventType, callback);\n }\n}\n","// localStorage API re-exposed to allow testing.\nimport { localStorage } from \"./globals\";\nexport const isSupported = localStorage != null && typeof localStorage.getItem === \"function\" && typeof localStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && localStorage) {\n return localStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && localStorage) {\n localStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && localStorage) {\n localStorage.removeItem(k);\n }\n}\n","import { perf } from \"./globals\";\nexport function now() {\n return new Date().getTime();\n}\nexport function nowNanos() {\n const timeOrigin = getTimeOrigin();\n const currentDate = new Date();\n if (timeOrigin) {\n const perfTime = perf.now() + timeOrigin;\n const dateTime = currentDate.getTime();\n // Only return perf time measurement if it hasn't significantly drifted (60s).\n // Some browsers violate the performance api spec and do not tick the monotonic time while the OS sleeps or the browser hangs\n // See https://bugzil.la/1709767\n // See https://webkit.org/b/225610\n if (Math.abs(perfTime - dateTime) < 60000) {\n return String(perfTime * 1000000);\n }\n }\n return toNanosTs(currentDate);\n}\nexport function toNanosTs(time) {\n if (typeof time === \"object\") {\n return toNanosTs(time.getTime());\n }\n // We don't multiply, because we want to keep number precision\n return String(time) + \"000000\";\n}\nexport function getTimeOrigin() {\n let timeOrigin = perf?.timeOrigin;\n if (typeof timeOrigin !== \"number\") {\n timeOrigin = perf?.timing?.fetchStart;\n }\n return timeOrigin;\n}\nexport function domHRTimestampToNanos(ts) {\n return String(Math.round((ts + getTimeOrigin()) * 1000000));\n}\n","import { warn, debug } from \"./debug\";\nimport { win } from \"./globals\";\n// This module contains wrappers around the standard timer API. These wrappers can be used to\n// ensure that execution of timers happens outside of any Angular specific zones. This in turn\n// means that this script will never disturb Angular's stabilization phase.\n// https://angular.io/api/core/ApplicationRef#isStable\n// Please note that it may sometimes be necessary to deliberately execute code inside of\n// Angular's Zones. Always take care to make a deliberate decision when to use and when not to\n// use these wrappers.\n// We take a copy of all globals to ensure that no other script will change them all of a sudden.\n// This ensures that when we register a timeout/interval on one global, that we will be able to\n// de-register it again in all cases.\nconst globals = {\n setTimeout: win?.setTimeout,\n clearTimeout: win?.clearTimeout,\n setInterval: win?.setInterval,\n clearInterval: win?.clearInterval,\n};\n// If the globals don't exist at execution time of this file, then we know that the globals stored\n// above are not wrapped by Zone.js. This in turn can mean better performance for Angular users.\nexport const isRunningZoneJs = win != null && win[\"Zone\"] != null && win[\"Zone\"][\"root\"] != null && typeof win[\"Zone\"][\"root\"][\"run\"] === \"function\";\nif (isRunningZoneJs) {\n debug(\"Discovered Zone.js globals. Will attempt to register all timers inside the root Zone.\");\n}\nexport function setTimeout(..._) {\n return executeGlobally.apply(\"setTimeout\", arguments);\n}\nexport function clearTimeout(..._) {\n return executeGlobally.apply(\"clearTimeout\", arguments);\n}\nexport function setInterval(..._) {\n return executeGlobally.apply(\"setInterval\", arguments);\n}\nexport function clearInterval(..._) {\n return executeGlobally.apply(\"clearInterval\", arguments);\n}\nfunction executeGlobally() {\n // We don't want to incur a performance penalty for all users just because some\n // users are relying on zone.js. This API looks quite ridiculous, but it\n // allows for concise and efficient code, e.g. arguments does not need to be\n // translated into an array.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const globalFunctionName = this;\n if (isRunningZoneJs) {\n try {\n // Incurr a performance overhead for Zone.js users that we just cannot avoid:\n // Copy the arguments passed in here so that we can use them inside the root\n // zone.\n const args = Array.prototype.slice.apply(arguments);\n // @ts-expect-error necessary Zone.js types not added\n return win[\"Zone\"][\"root\"][\"run\"](globals[globalFunctionName], win, args);\n }\n catch (e) {\n warn(\"Failed to execute %s inside of zone (via Zone.js). Falling back to execution inside currently \" +\n \"active zone.\", globalFunctionName, e);\n // failure – maybe zone js not properly initialized? Fall back to execution\n // outside of Zone.js as a last resort (outside of try/catch and if)\n }\n }\n // Note: Explicitly passing win as 'this' even though we are getting the function from 'globals'\n return globals[globalFunctionName]?.apply(win, arguments);\n}\n","import { doc, perf, win } from \"./globals\";\nimport { now } from \"./time\";\nimport { noop } from \"./fn\";\nimport { setTimeout } from \"./timers\";\nimport { addEventListener, removeEventListener } from \"./listeners\";\nconst TEN_MINUTES_IN_MILLIS = 1000 * 60 * 10;\nconst ONE_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;\nconst OBSERVER_WAIT_TIME_MS = 300;\nconst MAX_RESOURCES_ENTRIES = 100;\nexport const isResourceTimingAvailable = !!(perf && perf.getEntriesByType);\nexport const isPerformanceObserverAvailable = perf && typeof win[\"PerformanceObserver\"] === \"function\" && typeof perf[\"now\"] === \"function\";\nexport const PerformanceTimingNames = Object.freeze({\n CONNECT_END: \"connectEnd\",\n CONNECT_START: \"connectStart\",\n DECODED_BODY_SIZE: \"decodedBodySize\",\n DOM_COMPLETE: \"domComplete\",\n DOM_CONTENT_LOADED_EVENT_END: \"domContentLoadedEventEnd\",\n DOM_CONTENT_LOADED_EVENT_START: \"domContentLoadedEventStart\",\n DOM_INTERACTIVE: \"domInteractive\",\n DOMAIN_LOOKUP_END: \"domainLookupEnd\",\n DOMAIN_LOOKUP_START: \"domainLookupStart\",\n ENCODED_BODY_SIZE: \"encodedBodySize\",\n FETCH_START: \"fetchStart\",\n LOAD_EVENT_END: \"loadEventEnd\",\n LOAD_EVENT_START: \"loadEventStart\",\n NAVIGATION_START: \"navigationStart\",\n REDIRECT_END: \"redirectEnd\",\n REDIRECT_START: \"redirectStart\",\n REQUEST_START: \"requestStart\",\n RESPONSE_END: \"responseEnd\",\n RESPONSE_START: \"responseStart\",\n SECURE_CONNECTION_START: \"secureConnectionStart\",\n START_TIME: \"startTime\",\n UNLOAD_EVENT_END: \"unloadEventEnd\",\n UNLOAD_EVENT_START: \"unloadEventStart\",\n});\nconst usedResources = new WeakSet();\nexport function observeResourcePerformance(opts) {\n if (!isPerformanceObserverAvailable)\n return observeWithoutPerformanceObserverSupport(opts.onEnd);\n // Used to calculate the duration when no resource was found.\n let startTime;\n let endTime;\n const resources = [];\n // Global resources that will need to be disposed\n let observer;\n let fallbackNoResourceFoundTimerHandle;\n let fallbackEndNeverCalledTimerHandle;\n return {\n start: onStart,\n end: onEnd,\n cancel: disposeGlobalResources,\n };\n function onStart() {\n startTime = perf.now();\n try {\n const PerformanceObserver = win?.PerformanceObserver;\n if (PerformanceObserver) {\n observer = new PerformanceObserver(onResourceFound);\n observer?.observe({ type: \"resource\" });\n }\n }\n catch (_e) {\n // Some browsers may not support the passed entryTypes and decide to throw an error.\n // This would then result in an error with a message like:\n //\n // entryTypes only contained unsupported types\n //\n // Swallow and ignore the error. Treat it like unavailable performance observer data.\n }\n fallbackEndNeverCalledTimerHandle = setTimeout(disposeGlobalResources, TEN_MINUTES_IN_MILLIS);\n }\n function onEnd(endTs) {\n // If endTime is already set, we are already terminating and should not do so again\n if (endTime)\n return;\n endTime = endTs ?? perf.now();\n cancelFallbackEndNeverCalledTimer();\n if (!isWaitingAcceptable()) {\n return end();\n }\n setTimeout(() => end(), Math.min(OBSERVER_WAIT_TIME_MS, opts.maxWaitForResourceMillis));\n addEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n fallbackNoResourceFoundTimerHandle = setTimeout(end, opts.maxWaitForResourceMillis);\n }\n function end() {\n disposeGlobalResources();\n const resource = findBestMatchingResource();\n // In some old web browsers, e.g. Chrome 31, the value provided as the duration\n // can be very wrong. We have seen cases where this value is measured in years.\n // If this does seem be the case, then we will ignore the duration property and\n // instead prefer our approximation.\n if (resource?.duration && resource.duration < ONE_DAY_IN_MILLIS) {\n opts.onEnd({ resource, duration: resource.duration });\n }\n else {\n opts.onEnd({ resource, duration: endTime - startTime });\n }\n }\n function onResourceFound(list) {\n list\n .getEntriesByType(\"resource\")\n .filter((e) => {\n // This polymorphism is not properly represented in the api types. The cast is safe since we're only accessing the resource timings.\n const entry = e;\n return entry.startTime >= startTime && opts.resourceMatcher(entry);\n })\n .forEach((entry) => {\n // Limit array size to prevent memory leaks on high-traffic pages\n if (resources.length >= MAX_RESOURCES_ENTRIES) {\n // Remove oldest entry (FIFO)\n // Timings are only reported once the resource is fully recorded (i.e. the request has ended), so timings ending\n // way before the `onEnd` is called are less likely to be good matches and we can ignore them.\n resources.shift();\n }\n resources.push(entry);\n });\n }\n function onVisibilityChanged() {\n if (!isWaitingAcceptable())\n end();\n }\n function disposeGlobalResources() {\n disconnectResourceObserver();\n cancelFallbackNoResourceFoundTimer();\n cancelFallbackEndNeverCalledTimer();\n stopVisibilityObservation();\n }\n function disconnectResourceObserver() {\n if (observer) {\n try {\n observer?.disconnect();\n }\n catch (_e) {\n // Observer disconnect may throw when connect attempt wasn't successful. Ignore this.\n }\n observer = undefined;\n }\n }\n function cancelFallbackNoResourceFoundTimer() {\n if (fallbackNoResourceFoundTimerHandle) {\n clearTimeout(fallbackNoResourceFoundTimerHandle);\n fallbackNoResourceFoundTimerHandle = undefined;\n }\n }\n function cancelFallbackEndNeverCalledTimer() {\n if (fallbackEndNeverCalledTimerHandle) {\n clearTimeout(fallbackEndNeverCalledTimerHandle);\n fallbackEndNeverCalledTimerHandle = undefined;\n }\n }\n function stopVisibilityObservation() {\n if (!doc)\n return;\n removeEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n }\n function findBestMatchingResource() {\n if (!resources.length)\n return undefined;\n let bestMatch;\n const matchingResources = resources.filter((res) => res.responseEnd <= endTime + opts.maxToleranceForResourceTimingsMillis && !usedResources.has(res));\n if (!matchingResources.length) {\n return undefined;\n }\n if (matchingResources.length === 1) {\n bestMatch = matchingResources[0];\n }\n let bestScore;\n if (!bestMatch) {\n for (const res of matchingResources) {\n const score = Math.abs(endTime - startTime - res.duration) + Math.abs(res.responseEnd - endTime);\n if (bestScore === undefined || score < bestScore) {\n bestScore = score;\n bestMatch = res;\n }\n }\n }\n if (!bestMatch)\n return;\n usedResources.add(bestMatch);\n return bestMatch;\n }\n}\n// We may only wait for resource data to arrive as long as the document is visible or in the process\n// of becoming visible. In all other cases we might lose data when waiting, e.g. when the document\n// is in the process of being disposed.\nfunction isWaitingAcceptable() {\n return doc?.visibilityState === \"visible\" || doc?.visibilityState === \"prerender\";\n}\nfunction observeWithoutPerformanceObserverSupport(onEnd) {\n let start = 0;\n return {\n start: () => {\n start = now();\n },\n end: () => onEnd({ duration: now() - start }),\n cancel: noop,\n };\n}\n","export const NO_VALUE_FALLBACK = \"undefined\";\nexport const INIT_MESSAGE = \"Initializing Dash0 Web SDK\";\n","export function roundToTwoDecimals(n) {\n return Math.round(n * 100) / 100;\n}\n","import { doc, loc } from \"./globals\";\n/**\n * Parses url using URL constructor. Supports URL objects as passthrough input to simplify implementations\n * May throw if parsing fails\n * @param url\n */\nexport function parseUrl(url) {\n if (typeof url !== \"string\")\n return url;\n return new URL(url, doc?.baseURI ?? loc?.href);\n}\n","import { parseUrl } from \"./url\";\n/** Returns the origin if present (if in browser context). */\nfunction getOrigin() {\n return typeof location !== \"undefined\" ? location.origin : undefined;\n}\nexport function isSameOrigin(url) {\n try {\n const parsedUrl = parseUrl(url);\n return parsedUrl.origin === getOrigin();\n }\n catch (_e) {\n return false;\n }\n}\n","import { debug } from \"./debug\";\nconst INSTRUMENTED_BY_DASH0_SYMBOL = Symbol.for(\"INSTRUMENTED_BY_DASH0\");\nfunction isAlreadyInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n return objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] === true;\n}\nfunction markAsInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] = true;\n}\nexport function wrap(module, target, wrapper) {\n const original = module[target];\n if (!original) {\n debug(`${String(target)} is not defined, unable to instrument`);\n return;\n }\n if (isAlreadyInstrumented(original)) {\n debug(`${String(target)} has already been instrumented, skipping`);\n return;\n }\n markAsInstrumented(original);\n module[target] = wrapper(original);\n}\n","import { identity } from \"./utils\";\nexport const vars = {\n endpoints: [],\n resource: {\n attributes: [],\n },\n scope: {\n name: \"dash0-web-sdk\",\n version: __sdkVersion,\n attributes: [],\n },\n signalAttributes: [],\n ignoreUrls: [],\n ignoreErrorMessages: [],\n wrapEventHandlers: true,\n wrapTimers: true,\n propagateTraceHeadersCorsURLs: [],\n maxWaitForResourceTimingsMillis: 10000,\n maxToleranceForResourceTimingsMillis: 50,\n headersToCapture: [],\n urlAttributeScrubber: identity,\n pageViewInstrumentation: {\n trackVirtualPageViews: true,\n includeParts: [],\n },\n enableTransportCompression: false,\n};\n","// Resource Attribute Keys\nexport const SERVICE_NAME = \"service.name\";\nexport const SERVICE_VERSION = \"service.version\";\nexport const DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\nexport const DEPLOYMENT_NAME = \"deployment.name\";\nexport const DEPLOYMENT_ID = \"deployment.id\";\n// Misc Signal Attribute Keys\nexport const EVENT_NAME = \"event.name\";\nexport const WEB_EVENT_TITLE = \"dash0.web.event.title\";\nexport const WEB_EVENT_ID = \"dash0.web.event.id\";\nexport const PAGE_LOAD_ID = \"page.load.id\";\nexport const SESSION_ID = \"session.id\";\nexport const USER_AGENT = \"user_agent.original\";\nexport const BROWSER_TAB_ID = \"browser.tab.id\";\nexport const WINDOW_WIDTH = \"browser.window.width\";\nexport const WINDOW_HEIGHT = \"browser.window.height\";\nexport const NETWORK_CONNECTION_TYPE = \"network.connection.subtype\";\nexport const EXCEPTION_COMPONENT_STACK = \"exception.component_stack\";\n// User Attribute Keys\nexport const USER_ID = \"user.id\";\nexport const USER_NAME = \"user.name\";\nexport const USER_FULL_NAME = \"user.full_name\";\nexport const USER_EMAIL = \"user.email\";\nexport const USER_HASH = \"user.hash\";\nexport const USER_ROLES = \"user.roles\";\n// Exception Attribute Keys\nexport const EXCEPTION_MESSAGE = \"exception.message\";\nexport const EXCEPTION_TYPE = \"exception.type\";\nexport const EXCEPTION_STACKTRACE = \"exception.stacktrace\";\n// Error Attribute Keys\nexport const ERROR_TYPE = \"error.type\";\n// URL Attribute Keys\nexport const PAGE_URL_ATTR_PREFIX = \"page\";\nexport const URL_DOMAIN = \"url.domain\";\nexport const URL_FRAGMENT = \"url.fragment\";\nexport const URL_FULL = \"url.full\";\nexport const URL_PATH = \"url.path\";\nexport const URL_QUERY = \"url.query\";\nexport const URL_SCHEME = \"url.scheme\";\n// Http Attribute Keys\nexport const HTTP_REQUEST_METHOD = \"http.request.method\";\nexport const HTTP_REQUEST_METHOD_ORIGINAL = \"http.request.method_original\";\nexport const HTTP_REQUEST_HEADER = \"http.request.header\";\nexport const HTTP_RESPONSE_STATUS_CODE = \"http.response.status_code\";\nexport const HTTP_RESPONSE_HEADER = \"http.response.header\";\nexport const HTTP_RESPONSE_BODY_SIZE = \"http.response.body.size\";\n// Event Names\nexport const EVENT_NAMES = {\n PAGE_VIEW: \"browser.page_view\",\n NAVIGATION_TIMING: \"browser.navigation_timing\",\n WEB_VITAL: \"browser.web_vital\",\n ERROR: \"browser.error\",\n};\nexport const SPAN_EVENT_NAME_EXCEPTION = \"exception\";\n// Log Severities\nexport const LOG_SEVERITIES = {\n UNSPECIFIED: 0,\n TRACE: 1,\n DEBUG: 5,\n INFO: 9,\n WARN: 13,\n ERROR: 17,\n FATAL: 21,\n};\n// Page View Event Attributes\n// SEE: https://github.com/open-telemetry/semantic-conventions/pull/1910/files\nexport const PAGE_VIEW_TYPE = \"type\";\nexport const PAGE_VIEW_TYPE_VALUES = {\n INITIAL: 0,\n VIRTUAL: 1,\n};\nexport const PAGE_VIEW_CHANGE_STATE = \"change_state\";\nexport const PAGE_VIEW_CHANGE_STATE_VALUES = {\n PUSH: \"pushState\",\n REPLACE: \"replaceState\",\n};\n// Span Status\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1; // This is here for completion, status ok is reserved for use by application developers\nexport const SPAN_STATUS_ERROR = 2;\n// Span Kind\n// See: https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\nexport const SPAN_KIND_CLIENT = 3;\n","import * as localStorage from \"./local-storage\";\nimport { generateUniqueId, SESSION_ID_BYTES } from \"./id\";\nconst SESSION_FLAGS = {\n EPHEMERAL_SESSION: 0x01, // 00000001 - if the browser does NOT support local storage we count the session as ephemeral because we cannot persist it\n};\nfunction encodeSessionFlags(flags) {\n let byte = 0;\n if (flags.ephemeralSession) {\n byte |= SESSION_FLAGS.EPHEMERAL_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateSessionId() {\n const sessionFlags = {\n ephemeralSession: !localStorage.isSupported,\n };\n return `${encodeSessionFlags(sessionFlags)}${generateUniqueId(SESSION_ID_BYTES - 1)}`;\n}\n","import { isSupported, getItem, setItem, removeItem } from \"../utils\";\nimport { debug, now } from \"../utils\";\nimport { info, warn } from \"../utils\";\nimport { generateSessionId } from \"../utils/session-id\";\nconst SESSION_STORAGE_KEY = \"d0_session\";\nconst STORAGE_SEPARATOR_KEY = \"#\";\nconst DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS = 1000 * 60 * 60 * 3;\nconst DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 6;\nconst MAX_ALLOWED_SESSION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 24;\nexport let sessionId = null;\nexport function trackSessions(sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n if (!isSupported) {\n debug(\"Storage API is not available and session tracking is therefore not supported.\");\n // we still generate a session ID to ensure that the session ID is always available\n sessionId = generateSessionId();\n return;\n }\n if (!sessionInactivityTimeoutMillis) {\n sessionInactivityTimeoutMillis = DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS;\n }\n if (!sessionTerminationTimeoutMillis) {\n sessionTerminationTimeoutMillis = DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS;\n }\n sessionInactivityTimeoutMillis = Math.min(sessionInactivityTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n sessionTerminationTimeoutMillis = Math.min(sessionTerminationTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n try {\n const storedValue = getItem(SESSION_STORAGE_KEY);\n let session = parseSession(storedValue);\n if (session && !isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis)) {\n session = null;\n }\n if (session) {\n session.lastActivityTime = now();\n }\n else {\n session = {\n id: generateSessionId(),\n startTime: now(),\n lastActivityTime: now(),\n };\n }\n setItem(SESSION_STORAGE_KEY, serializeSession(session));\n sessionId = session.id;\n }\n catch (e) {\n warn(\"Failed to record session information\", e);\n }\n}\n/**\n * The session will be terminated. This only takes effect on the next physical page load.\n */\nexport function terminateSession() {\n if (!isSupported) {\n return;\n }\n try {\n removeItem(SESSION_STORAGE_KEY);\n }\n catch (e) {\n info(\"Failed to terminate session\", e);\n }\n}\nfunction parseSession(storedValue) {\n if (!storedValue) {\n return null;\n }\n const values = storedValue.split(STORAGE_SEPARATOR_KEY);\n if (values.length < 3) {\n return null;\n }\n const id = values[0];\n const startTime = parseInt(values[1], 10);\n const lastActivityTime = parseInt(values[2], 10);\n if (!id || isNaN(startTime) || isNaN(lastActivityTime)) {\n return null;\n }\n return {\n id,\n startTime,\n lastActivityTime,\n };\n}\nfunction serializeSession(session) {\n return session.id + STORAGE_SEPARATOR_KEY + session.startTime + STORAGE_SEPARATOR_KEY + session.lastActivityTime;\n}\nfunction isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n const minAllowedLastActivityTime = now() - sessionInactivityTimeoutMillis;\n if (session.lastActivityTime < minAllowedLastActivityTime) {\n return false;\n }\n const minAllowedStartTime = now() - sessionTerminationTimeoutMillis;\n return session.startTime >= minAllowedStartTime;\n}\n","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let o,s;return r=>{t.value>=0&&(r||i)&&(s=t.value-(o??0),(s||void 0===o)&&(o=t.value,t.delta=s,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},o=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},s=()=>{const e=o();return e?.activationStart??0},r=(t,n=-1)=>{const i=o();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||s()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,m=e=>{\"hidden\"===document.visibilityState&&u>-1&&(u=\"visibilitychange\"===e.type?e.timeStamp:0,v())},g=()=>{addEventListener(\"visibilitychange\",m,!0),addEventListener(\"prerenderingchange\",m,!0)},v=()=>{removeEventListener(\"visibilitychange\",m,!0),removeEventListener(\"prerenderingchange\",m,!0)},p=()=>{if(u<0){const e=s(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??l(),g(),t((()=>{setTimeout((()=>{u=l(),g()}))}))}return{get firstHiddenTime(){return u}}},y=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},b=[1800,3e3],P=(e,o={})=>{y((()=>{const c=p();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-s(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,b,o.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,b,o.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},T=[.1,.25],E=(e,o={})=>{P(f((()=>{let s,c=r(\"CLS\",0);const f=a(o,d),u=e=>{for(const t of e)f.h(t);f.i>c.value&&(c.value=f.i,c.entries=f.o,s())},l=h(\"layout-shift\",u);l&&(s=n(e,c,T,o.reportAllChanges),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(u(l.takeRecords()),s(!0))})),t((()=>{f.i=0,c=r(\"CLS\",0),s=n(e,c,T,o.reportAllChanges),i((()=>s()))})),setTimeout(s))})))};let _=0,L=1/0,M=0;const C=e=>{for(const t of e)t.interactionId&&(L=Math.min(L,t.interactionId),M=Math.max(M,t.interactionId),_=M?(M-L)/7+1:0)};let I;const w=()=>I?_:performance.interactionCount??0,F=()=>{\"interactionCount\"in performance||I||(I=h(\"event\",C,{type:\"event\",buffered:!0,durationThreshold:0}))};let k=0;class A{u=[];l=new Map;m;v;p(){k=w(),this.u.length=0,this.l.clear()}P(){const e=Math.min(this.u.length-1,Math.floor((w()-k)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.T){if(n?e.duration>n.T?(n.entries=[e],n.T=e.duration):e.duration===n.T&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],T:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.T-e.T)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.v?.(n)}}}const B=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),document.addEventListener(\"visibilitychange\",e,{once:!0}),t((()=>{e(),document.removeEventListener(\"visibilitychange\",e)})))},N=[200,500],S=(e,i={})=>{globalThis.PerformanceEventTiming&&\"interactionId\"in PerformanceEventTiming.prototype&&y((()=>{F();let o,s=r(\"INP\");const c=a(i,A),d=e=>{B((()=>{for(const t of e)c.h(t);const t=c.P();t&&t.T!==s.value&&(s.value=t.T,s.entries=t.entries,o())}))},f=h(\"event\",d,{durationThreshold:i.durationThreshold??40});o=n(e,s,N,i.reportAllChanges),f&&(f.observe({type:\"first-input\",buffered:!0}),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(d(f.takeRecords()),o(!0))})),t((()=>{c.p(),s=r(\"INP\"),o=n(e,s,N,i.reportAllChanges)})))}))};class q{m;h(e){this.m?.(e)}}const x=[2500,4e3],O=(e,o={})=>{y((()=>{const c=p();let d,u=r(\"LCP\");const l=a(o,q),m=e=>{o.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-s(),0),u.entries=[t],d())},g=h(\"largest-contentful-paint\",m);if(g){d=n(e,u,x,o.reportAllChanges);const s=f((()=>{m(g.takeRecords()),g.disconnect(),d(!0)}));for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,(()=>B(s)),{capture:!0,once:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,x,o.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},$=[800,1800],D=e=>{document.prerendering?y((()=>D(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>D(e)),!0):setTimeout(e)},H=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,$,i.reportAllChanges);D((()=>{const d=o();d&&(c.value=Math.max(d.responseStart-s(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,$,i.reportAllChanges),a(!0)})))}))};export{T as CLSThresholds,b as FCPThresholds,N as INPThresholds,x as LCPThresholds,$ as TTFBThresholds,E as onCLS,P as onFCP,S as onINP,O as onLCP,H as onTTFB};\n","import { addEventListener } from \"./listeners\";\nimport { doc, win } from \"./globals\";\nlet isUnloading = false;\n/**\n * Triggers the `fn` when the HTML document is getting unloaded\n * (or when it looks like it might be). Useful to flush batch activities.\n */\nexport function onLastChance(fn) {\n if (isUnloading) {\n fn();\n }\n if (!doc || !win)\n return;\n addEventListener(doc, \"visibilitychange\", function () {\n if (doc.visibilityState !== \"visible\") {\n fn();\n }\n });\n addEventListener(win, \"pagehide\", function () {\n isUnloading = true;\n fn();\n });\n // According to the spec visibilitychange should be a replacement for\n // beforeunload, but the reality is different (as of 2019-04-17). Chrome will\n // close tabs without firing visibilitychange. beforeunload on the other hand\n // is fired.\n addEventListener(win, \"beforeunload\", function () {\n isUnloading = true;\n fn();\n });\n}\n","import { onLastChance } from \"../utils/on-last-chance\";\nimport { doc } from \"../utils\";\nimport { setTimeout } from \"../utils/timers\";\nconst SCHEDULE_DELAY_MILLIS = 1000;\nconst MAX_QUEUE_SIZE = 15;\nexport function newBatcher(sendInternal) {\n const queuedItems = [];\n let pendingFlushTimeout;\n // We attempt batching of messages to be more efficient on the client, network and\n // server-side. While the connection is either a persistent HTTP 2 connection or\n // an HTTP 1.1 connection with keep-alive, there is still some overhead involved\n // in having many small messages.\n //\n // For this reason we attempt batching. When batching we must be careful to\n // force a transmission when the document is unloaded.\n onLastChance(flush);\n return {\n send(item) {\n if (isWindowHidden()) {\n // We cannot guarantee that we will ever get time to transmit data in a batched\n // format when the window is hidden, as this might occur while the document is\n // being unloaded. Immediately force a transmission in these cases.\n sendInternal([item]);\n return;\n }\n queuedItems.push(item);\n if (queuedItems.length >= MAX_QUEUE_SIZE) {\n flush();\n }\n else if (pendingFlushTimeout == null) {\n pendingFlushTimeout = setTimeout(flush, SCHEDULE_DELAY_MILLIS);\n }\n },\n };\n function flush() {\n if (pendingFlushTimeout != null) {\n clearTimeout(pendingFlushTimeout);\n pendingFlushTimeout = null;\n }\n if (queuedItems.length > 0) {\n sendInternal(queuedItems.slice());\n queuedItems.length = 0;\n }\n }\n}\nfunction isWindowHidden() {\n return doc?.visibilityState !== \"visible\";\n}\n","import { vars } from \"../vars\";\nimport { noop, warn, fetch, debug } from \"../utils\";\n// The bacon api enforces a size limit across all pending beacon requests per fetch group\n// There also seems to be a limit of 15 pending requests at the same time\n// See: https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch subpoint 10\n// See: https://github.com/getsentry/sentry-javascript/pull/7553\nconst BEACON_BODY_SIZE_LIMIT = 60000;\nlet pendingBodySize = 0;\nlet pendingRequestCount = 0;\nexport async function send(path, body) {\n debug(\"Transmitting telemetry to endpoints\", body);\n const jsonString = JSON.stringify(body);\n let requestBody = jsonString;\n let byteLength = new Blob([jsonString]).size;\n let isCompressed = false;\n // Try to compress if supported\n if (typeof CompressionStream !== \"undefined\" && vars.enableTransportCompression) {\n requestBody = await compressWithGzip(jsonString);\n byteLength = requestBody.byteLength;\n isCompressed = true;\n }\n // Send to all endpoints in parallel\n await Promise.all(vars.endpoints.map(async (endpoint) => {\n try {\n const url = new URL(endpoint[\"url\"]);\n url.pathname = url.pathname + (url.pathname.endsWith(\"/\") ? path.substring(1) : path);\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${endpoint[\"authToken\"]}`,\n };\n if (endpoint.dataset) {\n headers[\"Dash0-Dataset\"] = endpoint[\"dataset\"];\n }\n // Try to compress if supported\n if (isCompressed) {\n headers[\"Content-Encoding\"] = \"gzip\";\n }\n if (!fetch) {\n warn(\"Unable to send telemetry, fetch is not defined\");\n return;\n }\n pendingBodySize += byteLength;\n pendingRequestCount++;\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: requestBody,\n // The keepalive flag is related to the window.sendBeacon API. This in turn has size limitations.\n keepalive: pendingBodySize <= BEACON_BODY_SIZE_LIMIT && pendingRequestCount <= 15,\n });\n // read the body so the connection can be closed\n response.text().catch(noop);\n if (!response.ok) {\n warn(`Failed to send telemetry to ${url}: ${response.status} ${response.statusText}`);\n }\n }\n catch (error) {\n warn(`Error sending telemetry to ${endpoint.url}${path}:`, error);\n }\n finally {\n pendingBodySize -= byteLength;\n pendingRequestCount--;\n }\n }));\n}\nasync function compressWithGzip(data) {\n const blob = new Blob([data]);\n const stream = blob.stream();\n const compressedStream = stream.pipeThrough(new CompressionStream(\"gzip\"));\n return new Response(compressedStream).arrayBuffer();\n}\n","import { newBatcher } from \"./batcher\";\nimport { send } from \"./fetch\";\nimport { vars } from \"../vars\";\nimport { debug, error, createRateLimiter } from \"../utils\";\nconst logBatcher = newBatcher(sendLogs);\nconst spanBatcher = newBatcher(sendSpans);\nlet rateLimiter;\nfunction isRateLimited() {\n if (!rateLimiter) {\n rateLimiter = createRateLimiter({\n maxCallsPerTenMinutes: 4096,\n maxCallsPerTenSeconds: 128,\n });\n }\n return rateLimiter();\n}\nexport function sendLog(log) {\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", log);\n return;\n }\n logBatcher.send(log);\n}\nfunction sendLogs(logs) {\n send(\"/v1/logs\", {\n resourceLogs: [\n {\n resource: vars.resource,\n scopeLogs: [\n {\n scope: vars.scope,\n logRecords: logs,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit logs\", err);\n });\n}\nexport function sendSpan(span) {\n if (!span)\n return;\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", span);\n return;\n }\n spanBatcher.send(span);\n}\nfunction sendSpans(spans) {\n send(\"/v1/traces\", {\n resourceSpans: [\n {\n resource: vars.resource,\n scopeSpans: [\n {\n scope: vars.scope,\n spans: spans,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit spans\", err);\n });\n}\n","import { setInterval } from \"./timers\";\nexport function createRateLimiter(opts) {\n const maxCallsPerTenMinutes = opts.maxCallsPerTenMinutes || 128;\n const maxCallsPerTenSeconds = opts.maxCallsPerTenSeconds || 32;\n let totalCallsInLastTenMinutes = 0;\n let totalCallsInLastTenSeconds = 0;\n setInterval(function () {\n totalCallsInLastTenMinutes = 0;\n }, 1000 * 60 * 10);\n setInterval(function () {\n totalCallsInLastTenSeconds = 0;\n }, 1000 * 10);\n return function isExcessiveUsage() {\n return ++totalCallsInLastTenMinutes > maxCallsPerTenMinutes || ++totalCallsInLastTenSeconds > maxCallsPerTenSeconds;\n };\n}\n","const ANY_VALUE_KEYS = [\n \"stringValue\",\n \"boolValue\",\n \"intValue\",\n \"doubleValue\",\n \"arrayValue\",\n \"kvlistValue\",\n \"bytesValue\",\n];\nfunction isAnyValue(value) {\n if (value == null || typeof value !== \"object\")\n return false;\n const keys = Object.keys(value);\n return keys.length === 1 && ANY_VALUE_KEYS.includes(keys[0]);\n}\nexport function toAnyValue(value) {\n if (value == null) {\n return undefined;\n }\n let anyValue = {};\n if (Array.isArray(value)) {\n anyValue[\"arrayValue\"] = { values: value.map((e) => toAnyValue(e)) };\n }\n else if (typeof value === \"string\") {\n anyValue[\"stringValue\"] = value;\n }\n else if (typeof value === \"number\") {\n anyValue[\"doubleValue\"] = value;\n }\n else if (typeof value === \"boolean\") {\n anyValue[\"boolValue\"] = value;\n }\n else if (isAnyValue(value)) {\n anyValue = value;\n }\n else if (typeof value === \"object\") {\n anyValue[\"kvlistValue\"] = { values: Object.entries(value).map(([key, value]) => toKeyValue(key, value)) };\n }\n return anyValue;\n}\nexport function toKeyValue(key, value) {\n return {\n key: key,\n value: toAnyValue(value),\n };\n}\n/**\n * Adds a single attribute to the provided attributes array\n */\nexport function addAttribute(attributes, key, value) {\n if (!key)\n return;\n attributes.push(toKeyValue(key, value));\n}\n/**\n * Adds multiple attributes to the provided attributes array\n */\nexport function addAttributes(\n/**\n * The attributes array to add to\n */\nattributes, \n/**\n * Additional attributes to add\n * If no attributes are provided, nothing is added\n */\nattrs) {\n if (!attrs)\n return;\n Object.entries(attrs).forEach(([key, value]) => addAttribute(attributes, key, value));\n}\n/**\n * Removes an attribute from the provided attributes array by its key\n */\nexport function removeAttribute(attributes, key) {\n const index = attributes.findIndex((attr) => attr[\"key\"] === key);\n if (index !== -1) {\n attributes.splice(index, 1);\n }\n}\nexport function withPrefix(prefix) {\n if (!prefix)\n return (attr) => attr;\n if (Array.isArray(prefix)) {\n return (attr) => [...prefix, attr].join(\".\");\n }\n return (attr) => `${prefix}.${attr}`;\n}\n","import { doc } from \"../globals\";\nimport { perf } from \"../globals\";\nconst TRACE_PARENT_HEADER = \"traceparent\";\n/**\n * See https://www.w3.org/TR/trace-context/#traceparent-header\n */\nconst w3cTraceparentFormat = /^00-([a-f0-9]{32})-([a-f0-9]{16})-[0-9]{1,2}$/;\nexport function getTraceContextForPageLoad() {\n const match = getTraceparentFromMetaElement().match(w3cTraceparentFormat) ||\n getTraceparentFromNavigationTiming().match(w3cTraceparentFormat);\n if (match) {\n return {\n traceId: match[1],\n spanId: match[2],\n };\n }\n return undefined;\n}\nfunction getTraceparentFromMetaElement() {\n return (Array.from(doc?.getElementsByTagName(\"meta\") ?? [])\n .find((e) => e.getAttribute(\"name\")?.toLowerCase() === TRACE_PARENT_HEADER)\n ?.content.trim() || \"\");\n}\nfunction getTraceparentFromNavigationTiming() {\n const nt = perf.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n return \"\";\n }\n if (!nt.serverTiming) {\n return \"\";\n }\n return getTraceparentFromServerTiming(nt.serverTiming);\n}\nfunction getTraceparentFromServerTiming(serverTimings) {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === TRACE_PARENT_HEADER) {\n return serverEntry.description.trim();\n }\n }\n return \"\";\n}\nexport function addW3CTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * W3C Traceparent header.\n * General format is ${version}-${trace-id}-${parent-id}-${trace-flags}\n *\n * The only spec'd version is currently 00\n * Trace flags are an 8 bit field of bit flags:\n * Sampled: 00000001 - Should only be set if a definite decision to record the trace was made.\n * If set downstream processors should also record the trace\n * Random Trace ID: 00000010 - IF set the component guarantees that the seven right most bytes of the trace-id\n * are randomly generated. Downstream processors are then able to rely on this for technical things like shard keys.\n *\n * NOTE: For now we just send the \"sampled\" flag because not all components support the random trace ID flag.\n *\n * References:\n * https://www.w3.org/TR/trace-context-2/#traceparent-header\n * https://www.w3.org/TR/trace-context-2/#trace-flags\n * https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\n */\n fn.call(ctx, \"traceparent\", `00-${span.traceId}-${span.spanId}-01`);\n}\nexport function addXRayTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * AWS X-Ray trace header.\n * General format is Root=${trace-id};Parent=${span-id};Sampled=${sampling-flag}\n *\n * Converts W3C trace ID format to X-Ray format:\n * W3C: 4efaaf4d1e8720b39541901950019ee5 (32 hex chars)\n * X-Ray: 1-4efaaf4d-1e8720b39541901950019ee5 (1-{8chars}-{24chars})\n *\n * References:\n * https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader\n */\n const xrayTraceId = convertW3CTraceIdToXRay(span.traceId);\n const xrayHeader = `Root=${xrayTraceId};Parent=${span.spanId};Sampled=1`;\n fn.call(ctx, \"X-Amzn-Trace-Id\", xrayHeader);\n}\nfunction convertW3CTraceIdToXRay(w3cTraceId) {\n // X-Ray trace ID format: 1-{timestamp}-{unique-id}\n // Split the 32-char W3C trace ID into 8-char timestamp and 24-char unique ID\n const timestamp = w3cTraceId.substring(0, 8);\n const uniqueId = w3cTraceId.substring(8, 32);\n return `1-${timestamp}-${uniqueId}`;\n}\n","import { generateUniqueId, SESSION_ID_BYTES, TRACE_ID_BYTES } from \"./id\";\nconst TRACE_ID_PREFIX = \"d042\";\nconst TRACE_FLAGS = {\n WITHOUT_SESSION: 0x01, // 00000001 - in some edge cases we do not have a session ID, so we need to mark the trace as such\n};\nfunction encodeTraceFlags(flags) {\n let byte = 0;\n if (flags.withoutSession) {\n byte |= TRACE_FLAGS.WITHOUT_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateTraceId(sessionId) {\n if (!sessionId) {\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: true })}${generateUniqueId(TRACE_ID_BYTES - 3)}`;\n }\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: false })}${sessionId}${generateUniqueId(TRACE_ID_BYTES - SESSION_ID_BYTES - 3)}`;\n}\n","const POLYNOMIAL = 0xedb88320; // This is the standard polynomial used in IEEE 802.3 and must be in sync with the one we are using in the backend.\nconst TABLE = new Uint32Array(256);\nfor (let i = 0; i < 256; i++) {\n let c = i;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? POLYNOMIAL ^ (c >>> 1) : c >>> 1;\n }\n TABLE[i] = c >>> 0;\n}\nexport function crc32(hexStr) {\n const bytes = new Uint8Array(hexStr.length / 2);\n for (let i = 0; i < hexStr.length; i += 2) {\n bytes[i / 2] = parseInt(hexStr.substring(i, i + 2), 16);\n }\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n crc = (crc >>> 8) ^ TABLE[(crc ^ byte) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n","import { generateUniqueId, SPAN_ID_BYTES } from \"./id\";\nimport { crc32 } from \"./crc32\";\nexport function generateSpanId(traceId) {\n const checksum = crc32(traceId);\n const prefix = checksum.toString(16).padStart(8, \"0\");\n return `${prefix}${generateUniqueId(SPAN_ID_BYTES - 4)}`;\n}\n","import { nowNanos } from \"../time\";\nimport { SPAN_KIND_CLIENT, SPAN_STATUS_UNSET, WEB_EVENT_ID } from \"../../semantic-conventions\";\nimport { sessionId } from \"../../api/session\";\nimport { generateTraceId } from \"../trace-id\";\nimport { generateSpanId } from \"../span-id\";\nimport { addAttribute } from \"./attributes\";\nimport { debug } from \"../debug\";\nexport function startSpan(name) {\n const traceId = generateTraceId(sessionId);\n const spanId = generateSpanId(traceId);\n const attributes = [];\n addAttribute(attributes, WEB_EVENT_ID, spanId);\n return {\n traceId,\n spanId,\n name,\n // Always CLIENT for now https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\n // Note: we directly define otlp here, this differs from the values used by oteljs internally.\n kind: SPAN_KIND_CLIENT,\n startTimeUnixNano: nowNanos(),\n attributes,\n events: [],\n links: [],\n status: { code: SPAN_STATUS_UNSET },\n };\n}\n/**\n * Ends the span by setting status and endTimeUnixNano on it. If the spand was already previously ended, this returns undefined\n * to prevent the span from being ended multiple times on accident.\n */\nexport function endSpan(span, status, durationNano) {\n // We cast here to avoid having to instantiate a copy of the span\n const s = span;\n if (s.endTimeUnixNano) {\n debug(\"Attempting to end already ended span. Dropping...\", s);\n return undefined;\n }\n if (status) {\n s.status = status;\n }\n s.endTimeUnixNano =\n durationNano != null ? String(Math.round(parseInt(s.startTimeUnixNano) + durationNano)) : nowNanos();\n return s;\n}\n/**\n * Adds an event to a span. Can optionally accept the events timestamp and attributes for the event.\n * The timestamp needs to be specified as nanoseconds since unix epoch in string format.\n */\nexport function addSpanEvent(span, name, attributesOrTs, attributes) {\n let ts = undefined;\n let attr = undefined;\n if (typeof attributesOrTs === \"string\") {\n ts = attributesOrTs;\n }\n else if (Array.isArray(attributesOrTs)) {\n attr = attributesOrTs;\n }\n if (attributes) {\n attr = attributes;\n }\n span.events.push({\n name,\n timeUnixNano: ts != null ? ts : nowNanos(),\n attributes: attr ?? [],\n });\n}\nexport function setSpanStatus(span, code, message) {\n span.status = {\n code,\n message,\n };\n}\n","import { addAttribute, withPrefix } from \"../utils/otel\";\nimport { URL_DOMAIN, URL_FRAGMENT, URL_FULL, URL_PATH, URL_QUERY, URL_SCHEME } from \"../semantic-conventions\";\nimport { identity, parseUrl } from \"../utils\";\nimport { vars } from \"../vars\";\nexport function addUrlAttributes(attributes, url, prefix) {\n const applyPrefix = withPrefix(prefix);\n try {\n const parsed = parseUrl(url);\n if (parsed.username)\n parsed.username = \"REDACTED\";\n if (parsed.password)\n parsed.password = \"REDACTED\";\n const attrs = vars.urlAttributeScrubber({\n [URL_FULL]: parsed.href,\n [URL_PATH]: parsed.pathname,\n [URL_DOMAIN]: parsed.hostname,\n [URL_SCHEME]: parsed.protocol.replace(\":\", \"\"),\n [URL_FRAGMENT]: parsed.hash ? parsed.hash.replace(\"#\", \"\") : undefined,\n [URL_QUERY]: parsed.search ? parsed.search.replace(\"?\", \"\") : undefined,\n });\n Object.entries(attrs).forEach(([key, value]) => {\n if (value !== undefined) {\n addAttribute(attributes, applyPrefix(key), value);\n }\n });\n }\n catch (_e) {\n // This is fallback handling in case the url failed to parse or the user defined attribute scrubber behaved unexpectedly\n // If the user did not attempt scrubbing we'll supply the full url for debugging purposes, otherwise we drop all url\n // attributes\n if (vars.urlAttributeScrubber === identity) {\n // `identity` is the default assignment for this option\n addAttribute(attributes, applyPrefix(URL_FULL), String(url));\n }\n }\n}\n","// sessionStorage API re-exposed to allow testing.\nimport { sessionStorage } from \"./globals\";\nexport const isSupported = sessionStorage != null &&\n typeof sessionStorage.getItem === \"function\" &&\n typeof sessionStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && sessionStorage) {\n return sessionStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && sessionStorage) {\n sessionStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && sessionStorage) {\n sessionStorage.removeItem(k);\n }\n}\n","import { getItem, isSupported, setItem } from \"./session-storage\";\nimport { debug, warn } from \"./debug\";\nimport { generateUniqueId, TAB_ID_BYTES } from \"./id\";\nconst TAB_ID_STORAGE_KEY = \"d0_tab\";\nexport let tabId = null;\n/**\n * We want to be able to identify what browser tab the user is looking at. We do this by identifying tabs through\n * random-generated IDs that are kept in session storage. To quote MDN:\n *\n * > sessionStorage is partitioned by both origin and browser tabs (top-level browsing contexts)\n */\nexport function initializeTabId() {\n if (!isSupported) {\n debug(\"Storage API is not available and tab tracking is therefore not supported.\");\n return;\n }\n try {\n const storedValue = getItem(TAB_ID_STORAGE_KEY);\n if (storedValue) {\n tabId = storedValue;\n return;\n }\n tabId = generateUniqueId(TAB_ID_BYTES);\n setItem(TAB_ID_STORAGE_KEY, tabId);\n }\n catch (e) {\n warn(\"Failed to record tab ID information\", e);\n }\n}\n","import { generateUniqueId, nav, NO_VALUE_FALLBACK, WEB_EVENT_ID_BYTES, win } from \"../utils\";\nimport { BROWSER_TAB_ID, NETWORK_CONNECTION_TYPE, PAGE_URL_ATTR_PREFIX, SESSION_ID, WEB_EVENT_ID, WINDOW_HEIGHT, WINDOW_WIDTH, } from \"../semantic-conventions\";\nimport { sessionId } from \"../api/session\";\nimport { vars } from \"../vars\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addUrlAttributes } from \"./url\";\nimport { tabId } from \"../utils/tab-id\";\nexport function addCommonAttributes(attributes, options) {\n if (attributes.find((attribute) => attribute.key === WEB_EVENT_ID) === undefined) {\n addAttribute(attributes, WEB_EVENT_ID, generateUniqueId(WEB_EVENT_ID_BYTES));\n }\n for (let i = 0; i < vars.signalAttributes.length; i++) {\n attributes.push(vars.signalAttributes[i]);\n }\n addUrlAttributes(attributes, options?.url ?? win?.location.href ?? NO_VALUE_FALLBACK, PAGE_URL_ATTR_PREFIX);\n if (sessionId) {\n addAttribute(attributes, SESSION_ID, sessionId);\n }\n if (tabId) {\n addAttribute(attributes, BROWSER_TAB_ID, tabId);\n }\n addAttribute(attributes, WINDOW_WIDTH, win?.innerWidth ?? NO_VALUE_FALLBACK);\n addAttribute(attributes, WINDOW_HEIGHT, win?.innerHeight ?? NO_VALUE_FALLBACK);\n // @ts-expect-error -- TypeScript is not aware of navigator.connection.effectiveType\n const connectionType = nav?.connection?.effectiveType;\n if (connectionType) {\n addAttribute(attributes, NETWORK_CONNECTION_TYPE, connectionType);\n }\n}\n","import { onLCP, onINP, onCLS } from \"web-vitals\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { nowNanos, roundToTwoDecimals } from \"../utils\";\nimport { sendLog } from \"../transport\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addCommonAttributes } from \"../attributes\";\nexport function startWebVitalsInstrumentation() {\n onLCP(onWebVital, { reportAllChanges: true });\n onINP(onWebVital, { reportAllChanges: true });\n onCLS(onWebVital, { reportAllChanges: true });\n}\nfunction onWebVital(metric) {\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.WEB_VITAL);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", metric.name);\n addAttribute(bodyAttributes, \"value\", roundToTwoDecimals(metric.value));\n addAttribute(bodyAttributes, \"delta\", roundToTwoDecimals(metric.delta));\n const log = {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n sendLog(log);\n}\n","import { vars } from \"../vars\";\nexport function matchesAny(regexp, s) {\n for (let i = 0, len = regexp.length; i < len; i++) {\n if (regexp[i].test(s)) {\n return true;\n }\n }\n return false;\n}\nconst DATA_URL_PREFIX = \"data:\";\nexport function isUrlIgnored(url) {\n if (!url) {\n return true;\n }\n // Force string conversion. During runtime we have seen that some URLs passed into this code path aren't actually\n // strings. Reason currently unknown.\n url = String(url);\n if (!url) {\n return true;\n }\n // We never want to track data URLs. Instead of matching these via regular expressions (which might be expensive),\n // we are explicitly doing a startsWith ignore case check\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n if (url.substring == null || url.substring(0, DATA_URL_PREFIX.length).toLowerCase() === DATA_URL_PREFIX) {\n return true;\n }\n // Disable monitoring of data transmission requests. The data transmission strategy already ensures\n // that data transmission requests are not picked up internally. However, we have seen some users\n // leverage custom (broken) XMLHttpRequest instrumentation to implement application code which\n // then break the detection of data transmission requests.\n if (isTransportRequest(url)) {\n return true;\n }\n return matchesAny(vars.ignoreUrls, url);\n}\nfunction isTransportRequest(url) {\n const lowerCaseUrl = url.toLowerCase();\n for (let i = 0, len = vars.endpoints.length; i < len; i++) {\n const endpoint = vars.endpoints[i];\n if (lowerCaseUrl.startsWith(endpoint.url)) {\n return true;\n }\n }\n return false;\n}\nexport function isErrorMessageIgnored(message) {\n return !message || matchesAny(vars.ignoreErrorMessages, message);\n}\n","import { hasOwnProperty, nowNanos, win } from \"../../utils\";\nimport { isErrorMessageIgnored } from \"../../utils/ignore-rules\";\nimport { sendLog } from \"../../transport\";\nimport { EVENT_NAME, EVENT_NAMES, EXCEPTION_COMPONENT_STACK, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, LOG_SEVERITIES, } from \"../../semantic-conventions\";\nimport { addAttribute, addAttributes } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nconst MAX_ERRORS_TO_REPORT = 100;\nconst MAX_STACK_SIZE = 30;\nconst MAX_NUMBER_OF_TRACKED_ERRORS = 20;\nlet reportedErrors = 0;\nlet numberOfDifferentErrorsSeen = 0;\nlet seenErrors = {};\nlet scheduledTransmissionTimeoutHandle;\n// We are wrapping global listeners. In these, we are catching and rethrowing errors.\n// In older browsers, rethrowing errors actually manipulates the error objects. As a\n// result, it is not possible to just mark an error as reported. The simplest way to\n// avoid double reporting is to temporarily disable the global onError handler…\nlet ignoreNextOnError = false;\nexport function ignoreNextOnErrorEvent() {\n ignoreNextOnError = true;\n}\nexport function startOnErrorInstrumentation() {\n if (!win)\n return;\n const globalOnError = win.onerror;\n win.onerror = function (message, fileName, lineNumber, columnNumber, error) {\n if (ignoreNextOnError) {\n ignoreNextOnError = false;\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n return;\n }\n let stack = error && error.stack;\n if (!stack) {\n stack = \"at \" + fileName + \" \" + lineNumber;\n if (columnNumber != null) {\n stack += \":\" + columnNumber;\n }\n }\n onUnhandledError({ message: String(message), stack });\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n };\n}\nexport function reportUnhandledError(error, opts) {\n if (!error) {\n return;\n }\n if (typeof error === \"string\") {\n onUnhandledError({ message: error, opts });\n }\n else {\n onUnhandledError({ message: error.message, type: error.name, stack: error.stack, opts });\n }\n}\nfunction onUnhandledError({ message, type, stack, opts }) {\n if (!message || reportedErrors > MAX_ERRORS_TO_REPORT) {\n return;\n }\n if (isErrorMessageIgnored(message)) {\n return;\n }\n if (numberOfDifferentErrorsSeen >= MAX_NUMBER_OF_TRACKED_ERRORS) {\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n }\n message = String(message).substring(0, 300);\n stack = shortenStackTrace(stack);\n const location = win?.location.href;\n const key = message + stack + location;\n let trackedError = seenErrors[key];\n if (trackedError) {\n trackedError.seenCount++;\n }\n else {\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.ERROR);\n addAttribute(attributes, EXCEPTION_MESSAGE, message);\n if (type) {\n addAttribute(attributes, EXCEPTION_TYPE, type);\n }\n if (stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, stack);\n }\n if (opts?.componentStack) {\n addAttribute(attributes, EXCEPTION_COMPONENT_STACK, opts?.componentStack.substring(0, 2048));\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n trackedError = {\n seenCount: 1,\n transmittedCount: 0,\n log: {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.ERROR,\n severityText: \"ERROR\",\n body: {\n stringValue: message,\n },\n },\n };\n seenErrors[key] = trackedError;\n numberOfDifferentErrorsSeen++;\n }\n scheduleTransmission();\n}\nexport function shortenStackTrace(stack) {\n return String(stack || \"\")\n .split(\"\\n\")\n .slice(0, MAX_STACK_SIZE)\n .join(\"\\n\");\n}\nfunction scheduleTransmission() {\n if (scheduledTransmissionTimeoutHandle) {\n return;\n }\n scheduledTransmissionTimeoutHandle = setTimeout(send, 1000);\n}\nfunction send() {\n if (scheduledTransmissionTimeoutHandle) {\n clearTimeout(scheduledTransmissionTimeoutHandle);\n scheduledTransmissionTimeoutHandle = null;\n }\n for (const key in seenErrors) {\n if (hasOwnProperty(seenErrors, key)) {\n const seenError = seenErrors[key];\n if (seenError.seenCount > seenError.transmittedCount) {\n sendLog(seenError.log);\n reportedErrors++;\n }\n }\n }\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n}\n","import { win } from \"../../utils\";\nimport { reportUnhandledError } from \"./unhandled-error\";\nconst MESSAGE_PREFIX = \"Unhandled promise rejection: \";\nconst STACK_UNAVAILABLE_MESSAGE = \"<unavailable because Promise wasn't rejected with an Error object>\";\nexport function startUnhandledRejectionInstrumentation() {\n if (typeof win?.addEventListener === \"function\") {\n win.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n }\n}\nexport function onUnhandledRejection(event) {\n if (event.reason == null) {\n reportUnhandledError({\n message: MESSAGE_PREFIX + \"<no reason defined>\",\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason.message === \"string\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason.message,\n stack: typeof event.reason.stack === \"string\" ? event.reason.stack : STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason !== \"object\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason,\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n}\n","const WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY = \"__dash0OriginalFunctions\";\n// Asynchronous function wrapping: The process of wrapping a listener which goes into one function, e.g.\n//\n// - EventTarget#addEventListener\n// - EventEmitter#on\n//\n// and is removed via another function, e.g.\n//\n// - EventTarget#removeEventListener\n// - EventEmitter#off\n//\n// What is complicated about this, is that these methods identify registered listeners by function reference.\n// When we wrap a function, we naturally change the reference. We must therefore keep track of which\n// original function belongs to what wrapped function.\n//\n// This file provides helpers that help in the typical cases. It is removed from all browser specific APIs\n// in order to allow simple unit test execution.\n//\n// Note that this file follows the behavior outlined in DOM specification. Among others, this means that it is not\n// possible to register the same listener twice.\n// http://dom.spec.whatwg.org\nexport function addWrappedFunction(storageTarget, wrappedFunction, valuesForEqualityCheck) {\n if (!storageTarget)\n return wrappedFunction;\n const storage = (storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] =\n storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] || []);\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index !== -1) {\n // already registered. Do not allow re-registration\n return storage[index].wrappedFunction;\n }\n storage.push({\n wrappedFunction,\n valuesForEqualityCheck,\n });\n return wrappedFunction;\n}\nfunction findInStorage(storageTarget, valuesForEqualityCheck) {\n const storage = storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n for (let i = 0; i < storage.length; i++) {\n const storageItem = storage[i];\n if (matchesEqualityCheck(storageItem.valuesForEqualityCheck, valuesForEqualityCheck)) {\n return i;\n }\n }\n return -1;\n}\nexport function popWrappedFunction(storageTarget, valuesForEqualityCheck, fallback) {\n const storage = storageTarget?.[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n if (storage == null) {\n return fallback;\n }\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index === -1) {\n return fallback;\n }\n const storageItem = storage[index];\n storage.splice(index, 1);\n return storageItem.wrappedFunction;\n}\nfunction matchesEqualityCheck(valuesForEqualityCheckA, valuesForEqualityCheckB) {\n if (valuesForEqualityCheckA.length !== valuesForEqualityCheckB.length) {\n return false;\n }\n for (let i = 0; i < valuesForEqualityCheckA.length; i++) {\n if (valuesForEqualityCheckA[i] !== valuesForEqualityCheckB[i]) {\n return false;\n }\n }\n return true;\n}\nexport function addWrappedDomEventListener(storageTarget, wrappedFunction, eventName, eventListener, optionsOrCapture) {\n return addWrappedFunction(storageTarget, wrappedFunction, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture));\n}\nfunction getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture) {\n return [eventName, eventListener, getDomEventListenerCaptureValue(optionsOrCapture)];\n}\nexport function getDomEventListenerCaptureValue(optionsOrCapture) {\n // > Let capture, passive, and once be the result of flattening more options.\n // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n //\n // > To flatten more options, run these steps:\n // > 1. Let capture be the result of flattening options.\n // https://dom.spec.whatwg.org/#event-flatten-more\n //\n // > To flatten options, run these steps:\n // > 1. If options is a boolean, then return options.\n // > 2. Return options’s capture.\n // https://dom.spec.whatwg.org/#concept-flatten-options\n //\n // > dictionary EventListenerOptions {\n // > boolean capture = false;\n // > };\n // https://dom.spec.whatwg.org/#dom-eventlisteneroptions-capture\n if (optionsOrCapture == null) {\n return false;\n }\n else if (typeof optionsOrCapture === \"object\") {\n return Boolean(optionsOrCapture.capture);\n }\n return Boolean(optionsOrCapture);\n}\nexport function popWrappedDomEventListener(storageTarget, eventName, eventListener, optionsOrCapture, fallback) {\n return popWrappedFunction(storageTarget, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture), fallback);\n}\n","import { vars } from \"../../vars\";\nimport { win } from \"../../utils\";\nimport { addWrappedDomEventListener, popWrappedDomEventListener, } from \"./async-function-wrapping\";\nimport { ignoreNextOnErrorEvent, reportUnhandledError } from \"./unhandled-error\";\nexport function startEventHandlerInstrumentation() {\n if (vars.wrapEventHandlers) {\n wrapEventTarget(win?.EventTarget);\n }\n}\nfunction wrapEventTarget(EventTarget) {\n if (!EventTarget ||\n typeof EventTarget.prototype.addEventListener !== \"function\" ||\n typeof EventTarget.prototype.removeEventListener !== \"function\") {\n return;\n }\n const originalAddEventListener = EventTarget.prototype.addEventListener;\n const originalRemoveEventListener = EventTarget.prototype.removeEventListener;\n EventTarget.prototype.addEventListener = function wrappedAddEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalAddEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = function wrappedEventListener() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportUnhandledError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n args[1] = addWrappedDomEventListener(this, args[1], eventName, fn, optionsOrCapture);\n return originalAddEventListener.apply(this, args);\n };\n EventTarget.prototype.removeEventListener = function wrappedRemoveEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalRemoveEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = popWrappedDomEventListener(this, eventName, fn, optionsOrCapture, fn);\n return originalRemoveEventListener.apply(this, args);\n };\n}\n","import { vars } from \"../../vars\";\nimport { isRunningZoneJs } from \"../../utils/timers\";\nimport { warn, win } from \"../../utils\";\nimport { ignoreNextOnErrorEvent } from \"./unhandled-error\";\nexport function startTimerInstrumentation() {\n if (vars.wrapTimers) {\n if (isRunningZoneJs) {\n warn(\"We discovered a usage of Zone.js. In order to avoid any incompatibility issues timer wrapping is not going to be enabled.\");\n return;\n }\n wrapTimer(\"setTimeout\");\n wrapTimer(\"setInterval\");\n }\n}\nfunction wrapTimer(name) {\n const original = win?.[name];\n if (typeof original !== \"function\") {\n // cannot wrap because fn is not a function – should actually never happen\n return;\n }\n win[name] = function wrappedTimerSetter(fn) {\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[0] = wrap(fn);\n return original.apply(this, args);\n };\n}\nfunction wrap(fn) {\n if (typeof fn !== \"function\") {\n // cannot wrap because fn is not a function\n return fn;\n }\n return function wrappedTimerHandler() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n}\n","import { startOnErrorInstrumentation } from \"./unhandled-error\";\nimport { startUnhandledRejectionInstrumentation } from \"./unhandled-promise-rejection\";\nimport { startEventHandlerInstrumentation } from \"./event-handlers\";\nimport { startTimerInstrumentation } from \"./timers\";\nexport function startErrorInstrumentation() {\n startOnErrorInstrumentation();\n startUnhandledRejectionInstrumentation();\n startEventHandlerInstrumentation();\n startTimerInstrumentation();\n}\n","import { addAttribute, addSpanEvent } from \"../../utils/otel\";\nimport { domHRTimestampToNanos, hasKey, PerformanceTimingNames } from \"../../utils\";\nimport { HTTP_RESPONSE_BODY_SIZE } from \"../../semantic-conventions\";\n// SEE: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/attributes-registry/http.md?plain=1#L67\nconst KNOWN_HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"CONNECT\", \"OPTIONS\", \"TRACE\", \"PATCH\"];\nexport const HTTP_METHOD_OTHER = \"_OTHER\";\nexport function isWellKnownHttpMethod(method) {\n return KNOWN_HTTP_METHODS.includes(method);\n}\nexport function addResourceNetworkEvents(span, resource) {\n const ignoreZeros = resource.startTime !== 0;\n addSpanNetworkEvent(span, PerformanceTimingNames.FETCH_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.SECURE_CONNECTION_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.REQUEST_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_END, resource, ignoreZeros);\n}\nfunction addSpanNetworkEvent(span, propertyName, resource, ignoreZeros = true) {\n if (!hasKey(resource, propertyName) ||\n typeof resource[propertyName] !== \"number\" ||\n (ignoreZeros && resource[propertyName] === 0)) {\n return;\n }\n addSpanEvent(span, propertyName, domHRTimestampToNanos(resource[propertyName]));\n}\nexport function addResourceSize(span, resource) {\n const encodedLength = resource.encodedBodySize;\n if (encodedLength != undefined) {\n addAttribute(span.attributes, HTTP_RESPONSE_BODY_SIZE, encodedLength);\n }\n}\n","import { debug, observeResourcePerformance, perf, win, setTimeout, isSameOrigin, wrap, parseUrl, clearTimeout, } from \"../../utils\";\nimport { isUrlIgnored, matchesAny } from \"../../utils/ignore-rules\";\nimport { addAttribute, setSpanStatus, addW3CTraceContextHttpHeaders, addXRayTraceContextHttpHeaders, endSpan, errorToSpanStatus, recordException, startSpan, } from \"../../utils/otel\";\nimport { ERROR_TYPE, HTTP_REQUEST_METHOD, HTTP_REQUEST_METHOD_ORIGINAL, HTTP_RESPONSE_STATUS_CODE, SPAN_STATUS_ERROR, SPAN_STATUS_UNSET, } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { httpRequestHeaderKey, httpResponseHeaderKey } from \"../../utils/otel/http\";\nimport { sendSpan } from \"../../transport\";\nimport { addResourceNetworkEvents, addResourceSize, HTTP_METHOD_OTHER, isWellKnownHttpMethod } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes } from \"../../attributes\";\nexport function instrumentFetch() {\n if (!win || !win.fetch || !win.Request) {\n debug(\"Browser does not support the Fetch API, skipping instrumentation\");\n return;\n }\n wrap(win, \"fetch\", wrapFetch);\n}\n// eslint-disable-next-line no-restricted-globals -- only used as type here\nfunction wrapFetch(original) {\n return async function fetchWithInstrumentation(input, init) {\n let copyOfInit = init ? Object.assign({}, init) : init;\n let body = null;\n if (copyOfInit?.body) {\n body = copyOfInit.body;\n copyOfInit.body = undefined;\n }\n const request = new Request(input, copyOfInit);\n if (body && copyOfInit) {\n copyOfInit.body = body;\n }\n const url = request.url;\n if (isUrlIgnored(url)) {\n debug(`Not creating span for fetch call because the url is ignored, URL: ${url}`);\n return original(input instanceof Request ? request : input, init);\n }\n // https://fetch.spec.whatwg.org/#concept-request-method\n // We'll match methods case insensitive here to make the user experience a bit less painful\n const originalMethod = request.method ?? \"GET\";\n const isWellKnownMethod = isWellKnownHttpMethod(originalMethod);\n const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n const method = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n const span = startSpan(`HTTP ${method}`);\n addCommonAttributes(span.attributes);\n addUrlAttributes(span.attributes, url);\n addGraphQlProperties(input, init, span);\n addAttribute(span.attributes, HTTP_REQUEST_METHOD, method);\n if (!isWellKnownMethod) {\n addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, originalMethod);\n }\n const propagatorTypes = determinePropagatorTypes(url);\n const shouldSetCorrelationHeaders = propagatorTypes.length > 0;\n if (shouldSetCorrelationHeaders) {\n if (copyOfInit?.headers) {\n // ensure we have a unified container for the headers\n copyOfInit.headers = new Headers(copyOfInit.headers);\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n else if (input instanceof Request) {\n addTraceContextHttpHeaders(request.headers.append, request.headers, span, propagatorTypes);\n }\n else {\n if (!copyOfInit) {\n copyOfInit = {};\n }\n copyOfInit.headers = new Headers();\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n }\n tryCaptureHttpHeaders(request.headers, span, (k) => httpRequestHeaderKey(k));\n const performanceObserver = observeResourcePerformance({\n // We match on both fetch and XHR here to support polyfills\n resourceMatcher: ({ initiatorType, name }) => (initiatorType === \"fetch\" || initiatorType === \"xmlhttprequest\") && name === parseUrl(url).href,\n maxWaitForResourceMillis: vars.maxWaitForResourceTimingsMillis,\n maxToleranceForResourceTimingsMillis: vars.maxToleranceForResourceTimingsMillis,\n onEnd: ({ duration, resource }) => {\n if (resource) {\n addResourceNetworkEvents(span, resource);\n addResourceSize(span, resource);\n }\n // duration is millis we need to convert to nanos\n sendSpan(endSpan(span, undefined, duration * 1000000));\n },\n });\n performanceObserver.start();\n try {\n const origResponse = await original(input instanceof Request ? request : input, copyOfInit);\n addResponseData(span, origResponse);\n return wrapResponse(origResponse, vars.maxToleranceForResourceTimingsMillis, () => performanceObserver.end(), (e) => {\n performanceObserver.cancel();\n endSpanOnError(span, e);\n });\n }\n catch (e) {\n performanceObserver.cancel();\n endSpanOnError(span, e);\n throw e;\n }\n };\n}\n// @ts-expect-error -- WIP\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction addGraphQlProperties(input, init, span) {\n try {\n if (!isGraphQLQuery(input, init))\n return;\n }\n catch (e) {\n debug(\"failed to analyze request for GraphQL insights\", e, input, init);\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction isGraphQLQuery(input, init) {\n /**\n * TODO: Add GraphQL support.\n * GraphQL queries are either POST or GET requests.\n * Identified by either setting Accept=application/graphql-response+json or the url matching a config field for graphql urls.\n * See: https://graphql.github.io/graphql-over-http/draft/\n * GET requests are queries carrying a query search param\n * POST requests are either queries or mutations, See: https://graphql.org/learn/serving-over-http/#post-request-and-body\n * and https://github.com/instana/weasel/blob/main/lib/hooks/Fetch.ts#L201\n */\n return false;\n}\nfunction tryCaptureHttpHeaders(headers, span, getAttributeKey) {\n try {\n if (!vars.headersToCapture.length)\n return;\n headers.forEach((value, key) => {\n if (vars.headersToCapture.some((rxp) => rxp.test(key))) {\n addAttribute(span.attributes, getAttributeKey(key), value);\n }\n });\n }\n catch (_e) {\n debug(\"unable to capture http headers due to CORS policy\");\n }\n}\nfunction addResponseData(span, response) {\n const status = response.status;\n setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR);\n if (status === 0) {\n addAttribute(span.attributes, ERROR_TYPE, response.type);\n }\n addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n tryCaptureHttpHeaders(response.headers, span, (k) => httpResponseHeaderKey(k));\n}\n/**\n * Wraps the response to be able to detect when it is fully read\n * @param originalResponse\n * @param readTimeoutMs Timeout applied between reading of response chunks, if exceeded the response is considered abandoned and onDone is called.\n * @param onDone Called when the response is completely read or with \"fallbackEndTs\" when reading timed out.\n * @param onError\n */\nfunction wrapResponse(originalResponse, readTimeoutMs, onDone, onError) {\n // When the response was wrapped (i.e. first available to js) we use this to replace or find the actual end timestamp\n // in case the response body is never read by js\n let fallbackTs = perf.now();\n const body = originalResponse.body;\n // For some reason browsers return a response body on responses that can't be constructed with one. In that case we can't wrap the body stream\n if (!body || !responseCanHaveBody(originalResponse)) {\n onDone();\n return originalResponse;\n }\n let cbCalled = false;\n const handleDone = (fallbackEndTs) => {\n if (cbCalled)\n return;\n onDone(fallbackEndTs);\n cbCalled = true;\n };\n const handleError = (e) => {\n if (cbCalled)\n return;\n onError(e);\n cbCalled = true;\n };\n let bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n const reader = body.getReader();\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n const { value, done } = await reader.read();\n if (done) {\n reader.releaseLock();\n controller.close();\n handleDone();\n }\n else {\n fallbackTs = perf.now();\n bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n controller.enqueue(value);\n }\n }\n catch (e) {\n handleError(e);\n controller.error(e);\n try {\n reader.releaseLock();\n }\n catch {\n // Spec reference:\n // https://streams.spec.whatwg.org/#default-reader-release-lock\n //\n // releaseLock() only throws if called on an invalid reader\n // (i.e. reader.[[stream]] is undefined, meaning the lock is already released\n // or the reader was never associated). In normal use this cannot happen.\n // This catch is defensive only.\n }\n }\n },\n cancel(reason) {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n handleDone();\n return reader.cancel(reason);\n },\n });\n return new Response(stream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: originalResponse.headers,\n });\n}\nfunction endSpanOnError(span, error) {\n recordException(span, error);\n sendSpan(endSpan(span, errorToSpanStatus(error), undefined));\n}\nfunction determinePropagatorTypes(url) {\n const matchingTypes = [];\n const isUrlSameOrigin = isSameOrigin(url);\n // For same-origin requests, always include traceparent + all configured propagators\n if (isUrlSameOrigin) {\n // Always add traceparent for same-origin requests\n matchingTypes.push(\"traceparent\");\n // Add all other configured propagator types for same-origin requests\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (propagator.type !== \"traceparent\" && !matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n // For cross-origin requests, use new propagators config if available\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (matchesAny(propagator.match, url)) {\n // Avoid duplicates\n if (!matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n return [];\n}\nfunction addTraceContextHttpHeaders(fn, ctx, span, types) {\n for (const type of types) {\n if (type === \"xray\") {\n addXRayTraceContextHttpHeaders(fn, ctx, span);\n }\n else {\n addW3CTraceContextHttpHeaders(fn, ctx, span);\n }\n }\n}\nfunction responseCanHaveBody(response) {\n const status = response.status;\n return status >= 200 && status != 204 && status != 205 && status != 304;\n}\n","import { HTTP_REQUEST_HEADER, HTTP_RESPONSE_HEADER } from \"../../semantic-conventions\";\nexport function httpRequestHeaderKey(key) {\n return `${HTTP_REQUEST_HEADER}.${key.toLowerCase()}`;\n}\nexport function httpResponseHeaderKey(key) {\n return `${HTTP_RESPONSE_HEADER}.${key.toLowerCase()}`;\n}\n","import { addSpanEvent } from \"./span\";\nimport { addAttribute } from \"./attributes\";\nimport { SPAN_EVENT_NAME_EXCEPTION, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, SPAN_STATUS_ERROR, } from \"../../semantic-conventions\";\nexport function recordException(span, exception) {\n const attributes = [];\n if (typeof exception === \"string\") {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception);\n }\n else if (exception) {\n if (exception.code) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.code.toString());\n }\n else if (exception.name) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.name);\n }\n if (exception.message) {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception.message);\n }\n if (exception.stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, exception.stack);\n }\n addSpanEvent(span, SPAN_EVENT_NAME_EXCEPTION, attributes);\n }\n}\nexport function errorToSpanStatus(e) {\n return {\n code: SPAN_STATUS_ERROR,\n message: e && typeof e === \"object\" && \"message\" in e ? e.message : String(e),\n };\n}\n","import { addAttribute, getTraceContextForPageLoad } from \"../../utils/otel\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES, PAGE_VIEW_CHANGE_STATE, PAGE_VIEW_CHANGE_STATE_VALUES, PAGE_VIEW_TYPE, PAGE_VIEW_TYPE_VALUES, } from \"../../semantic-conventions\";\nimport { doc, NO_VALUE_FALLBACK } from \"../../utils\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { sendLog } from \"../../transport\";\nimport { vars } from \"../../vars\";\nfunction getPageViewMeta(url) {\n if (!url)\n return {};\n return vars.pageViewInstrumentation.generateMetadata?.(url) ?? {};\n}\nexport function transmitPageViewEvent(timeUnixNano, url, virtual, replaced) {\n const meta = getPageViewMeta(url);\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.PAGE_VIEW);\n if (meta.attributes) {\n Object.entries(meta.attributes).forEach(([key, value]) => addAttribute(attributes, key, value));\n }\n addCommonAttributes(attributes, { url });\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"title\", meta.title ?? doc?.title ?? NO_VALUE_FALLBACK);\n if (doc?.referrer) {\n addAttribute(bodyAttributes, \"referrer\", doc.referrer);\n }\n addAttribute(bodyAttributes, PAGE_VIEW_TYPE, virtual ? PAGE_VIEW_TYPE_VALUES.VIRTUAL : PAGE_VIEW_TYPE_VALUES.INITIAL);\n addAttribute(bodyAttributes, PAGE_VIEW_CHANGE_STATE, replaced ? PAGE_VIEW_CHANGE_STATE_VALUES.REPLACE : PAGE_VIEW_CHANGE_STATE_VALUES.PUSH);\n const log = {\n timeUnixNano: timeUnixNano,\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\n","import { addEventListener, debug, doc, win, roundToTwoDecimals, error, toNanosTs, getTimeOrigin } from \"../../utils\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../../semantic-conventions\";\nimport { sendLog } from \"../../transport\";\nimport { getTraceContextForPageLoad, addAttribute } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { transmitPageViewEvent } from \"./event\";\n/**\n * Tracks page loads as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageLoadInstrumentation() {\n try {\n transmitPageViewEvent(getStartTimeUnixNanos(), win?.location.href ? new URL(win?.location.href) : undefined);\n }\n catch (e) {\n error(\"Failed to transmit initial page view event\", e);\n }\n if (doc?.readyState === \"complete\") {\n return onLoaded();\n }\n if (win) {\n addEventListener(win, \"load\", function () {\n // we want to get timing data for loadEventEnd,\n // so asynchronously process this\n setTimeout(onLoaded, 0);\n });\n }\n}\n/**\n * See https://github.com/open-telemetry/semantic-conventions/pull/1919\n */\nfunction onLoaded() {\n const nt = win?.performance.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n debug(\"Navigation timings not available. Cannot emit navigation timing log\");\n return;\n }\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.NAVIGATION_TIMING);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", nt.name);\n addNavigationTiming(bodyAttributes, nt, \"responseStatus\");\n addNavigationTiming(bodyAttributes, nt, \"fetchStart\");\n addNavigationTiming(bodyAttributes, nt, \"requestStart\");\n addNavigationTiming(bodyAttributes, nt, \"responseStart\");\n addNavigationTiming(bodyAttributes, nt, \"domInteractive\");\n addNavigationTiming(bodyAttributes, nt, \"domContentLoadedEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"domComplete\");\n addNavigationTiming(bodyAttributes, nt, \"loadEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"transferSize\");\n addNavigationTiming(bodyAttributes, nt, \"encodedBodySize\");\n addNavigationTiming(bodyAttributes, nt, \"decodedBodySize\");\n const log = {\n timeUnixNano: getStartTimeUnixNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\nfunction addNavigationTiming(attributes, nt, field) {\n // @ts-expect-error index access not recognized by TS, but this makes the code more reusable\n const value = nt[field];\n if (typeof value === \"number\" && !isNaN(value)) {\n addAttribute(attributes, field, Number.isInteger(value) ? value : roundToTwoDecimals(value));\n }\n}\nfunction getStartTimeUnixNanos() {\n return toNanosTs(Math.round(getTimeOrigin()));\n}\n","import { debug, nowNanos, win, wrap } from \"../../utils\";\nimport { vars } from \"../../vars\";\nimport { transmitPageViewEvent } from \"./event\";\nlet currentLocation = {};\nlet shouldIncludeHashChanges = false;\nlet shouldIncludeSearchChanges = false;\n/**\n * Tracks page transitions (virtual page views) as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageTransitionInstrumentation() {\n if (!win || !win.history) {\n debug(\"Browser does not support history API, skipping instrumentation\");\n return;\n }\n if (!vars.pageViewInstrumentation.trackVirtualPageViews) {\n return;\n }\n shouldIncludeSearchChanges = vars.pageViewInstrumentation.includeParts?.includes(\"SEARCH\") ?? false;\n shouldIncludeHashChanges = vars.pageViewInstrumentation.includeParts?.includes(\"HASH\") ?? false;\n /**\n * Not wrapping history.go, history.backward and history.forward here, because their call signatures don't receive\n * url information. For these cases we can use the popstate and hashchange events.\n */\n wrap(win.history, \"replaceState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined, true);\n return original.apply(this, [state, unused, url]);\n });\n wrap(win.history, \"pushState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined);\n return original.apply(this, [state, unused, url]);\n });\n win.addEventListener(\"hashchange\", onHashChange);\n win.addEventListener(\"popstate\", onPopState);\n try {\n updateCurrentLocation(new URL(win.location.href));\n }\n catch { }\n}\nfunction onPopState() {\n // popState event is fired after the location entry has been updated, so the location should already contain the new url.\n onUrlChange(win?.location.href);\n}\nfunction onHashChange(event) {\n onUrlChange(event.newURL);\n}\nfunction onUrlChange(url, replaced) {\n if (!url)\n return;\n try {\n const parsedUrl = new URL(url, win?.location.href);\n if (isLocationChange(parsedUrl)) {\n updateCurrentLocation(parsedUrl);\n transmitPageViewEvent(nowNanos(), parsedUrl, true, Boolean(replaced));\n }\n }\n catch (e) {\n debug(\"Failed to handle url change\", e);\n }\n}\nfunction updateCurrentLocation(url) {\n currentLocation.path = url.pathname;\n currentLocation.search = url.search;\n currentLocation.hash = url.hash;\n}\nfunction isLocationChange(newUrl) {\n return (newUrl.pathname !== currentLocation.path ||\n (shouldIncludeSearchChanges && newUrl.search !== currentLocation.search) ||\n (shouldIncludeHashChanges && newUrl.hash !== currentLocation.hash));\n}\n","import { startPageLoadInstrumentation } from \"./page-load\";\nimport { startPageTransitionInstrumentation } from \"./page-transition\";\nexport function startNavigationInstrumentation() {\n startPageLoadInstrumentation();\n startPageTransitionInstrumentation();\n}\n","// istanbul ignore next\nconst isObject = (obj) => {\n if (typeof obj === \"object\" && obj !== null) {\n if (typeof Object.getPrototypeOf === \"function\") {\n const prototype = Object.getPrototypeOf(obj);\n return prototype === Object.prototype || prototype === null;\n }\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n }\n return false;\n};\nexport const merge = (...objects) => objects.reduce((result, current) => {\n if (current === undefined) {\n return result;\n }\n if (Array.isArray(current)) {\n throw new TypeError(\"Arguments provided to ts-deepmerge must be objects, not arrays.\");\n }\n Object.keys(current).forEach((key) => {\n if ([\"__proto__\", \"constructor\", \"prototype\"].includes(key)) {\n return;\n }\n if (Array.isArray(result[key]) && Array.isArray(current[key])) {\n result[key] = merge.options.mergeArrays\n ? merge.options.uniqueArrayItems\n ? Array.from(new Set(result[key].concat(current[key])))\n : [...result[key], ...current[key]]\n : current[key];\n }\n else if (isObject(result[key]) && isObject(current[key])) {\n result[key] = merge(result[key], current[key]);\n }\n else if (!isObject(result[key]) && isObject(current[key])) {\n result[key] = merge(current[key], undefined);\n }\n else {\n result[key] =\n current[key] === undefined\n ? merge.options.allowUndefinedOverrides\n ? current[key]\n : result[key]\n : current[key];\n }\n });\n return result;\n}, {});\nconst defaultOptions = {\n allowUndefinedOverrides: true,\n mergeArrays: true,\n uniqueArrayItems: true,\n};\nmerge.options = defaultOptions;\nmerge.withOptions = (options, ...objects) => {\n merge.options = Object.assign(Object.assign({}, defaultOptions), options);\n const result = merge(...objects);\n merge.options = defaultOptions;\n return result;\n};\n","import { vars } from \"../vars\";\nimport { DEPLOYMENT_ENVIRONMENT_NAME, DEPLOYMENT_ID, DEPLOYMENT_NAME, PAGE_LOAD_ID, SERVICE_NAME, SERVICE_VERSION, USER_AGENT, } from \"../semantic-conventions\";\nimport { fetch, generateUniqueId, PAGE_LOAD_ID_BYTES, warn, debug, perf, nav, win, NO_VALUE_FALLBACK, pick, loc, } from \"../utils\";\nimport { trackSessions } from \"./session\";\nimport { startWebVitalsInstrumentation } from \"../instrumentations/web-vitals\";\nimport { startErrorInstrumentation } from \"../instrumentations/errors\";\nimport { addAttribute } from \"../utils/otel\";\nimport { instrumentFetch } from \"../instrumentations/http/fetch\";\nimport { startNavigationInstrumentation } from \"../instrumentations/navigation\";\nimport { merge } from \"ts-deepmerge\";\nimport { initializeTabId } from \"../utils/tab-id\";\nlet hasBeenInitialised = false;\nexport function init(opts) {\n if (hasBeenInitialised) {\n debug(\"Dash0 SDK is being reinitialized, skipping ...\");\n return;\n }\n if (!isClient()) {\n debug(\"Looks like we are not running in a browser context. Stopping Dash0 Web SDK initialization.\");\n return;\n }\n if (!isSupported()) {\n debug(\"Stopping Dash0 Web SDK initialization. This browser does not support the necessary APIs.\");\n return;\n }\n if (!opts.serviceName.trim()) {\n debug(\"Missing or empty serviceName value. Falling back to location.hostname.\");\n opts.serviceName = loc?.hostname ?? \"unknown\";\n }\n vars.endpoints = opts.endpoint instanceof Array ? opts.endpoint : [opts.endpoint];\n if (vars.endpoints.length === 0) {\n warn(\"No telemetry endpoint configured. Aborting Dash0 Web SDK initialization process.\");\n return;\n }\n Object.assign(vars, merge(vars, pick(opts, [\n \"ignoreUrls\",\n \"ignoreErrorMessages\",\n \"wrapEventHandlers\",\n \"wrapTimers\",\n \"propagateTraceHeadersCorsURLs\",\n \"maxWaitForResourceTimingsMillis\",\n \"maxToleranceForResourceTimingsMillis\",\n \"headersToCapture\",\n \"urlAttributeScrubber\",\n \"pageViewInstrumentation\",\n \"enableTransportCompression\",\n ])));\n initializePropagators(opts);\n initializeResourceAttributes(opts);\n initializeSignalAttributes(opts);\n initializeTabId();\n trackSessions(opts.sessionInactivityTimeoutMillis, opts.sessionTerminationTimeoutMillis);\n if (isInstrumentationEnabled(\"@dash0/navigation\", opts)) {\n startNavigationInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/web-vitals\", opts)) {\n startWebVitalsInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/error\", opts)) {\n startErrorInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/fetch\", opts)) {\n instrumentFetch();\n }\n hasBeenInitialised = true;\n}\nfunction initializeResourceAttributes(opts) {\n addAttribute(vars.resource.attributes, SERVICE_NAME, opts[\"serviceName\"]);\n if (opts.serviceVersion) {\n addAttribute(vars.resource.attributes, SERVICE_VERSION, opts[\"serviceVersion\"]);\n }\n const env = detectEnvironment(opts);\n if (env) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ENVIRONMENT_NAME, env);\n }\n const deploymentName = detectDeploymentName(opts);\n if (deploymentName) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_NAME, deploymentName);\n }\n const deploymentId = detectDeploymentId(opts);\n if (deploymentId) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ID, deploymentId);\n }\n}\nfunction initializeSignalAttributes(opts) {\n addAttribute(vars.signalAttributes, PAGE_LOAD_ID, generateUniqueId(PAGE_LOAD_ID_BYTES));\n addAttribute(vars.signalAttributes, USER_AGENT, nav?.userAgent ?? NO_VALUE_FALLBACK);\n if (opts.additionalSignalAttributes) {\n Object.entries(opts.additionalSignalAttributes).forEach(([key, value]) => {\n addAttribute(vars.signalAttributes, key, value);\n });\n }\n}\nfunction isSupported() {\n return typeof fetch === \"function\" && perf && perf.getEntriesByType;\n}\nfunction isClient() {\n return win != null;\n}\nfunction detectEnvironment(opts) {\n // if there is a manually specified value we use that\n if (opts.environment) {\n return opts.environment;\n }\n // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n // plugins like webpack define work.\n try {\n // vercel\n // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n return process?.env?.NEXT_PUBLIC_VERCEL_ENV;\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentName(opts) {\n if (opts.deploymentName) {\n return opts.deploymentName;\n }\n // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n // plugins like webpack define work.\n try {\n // vercel\n // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n return process?.env?.NEXT_PUBLIC_VERCEL_TARGET_ENV;\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentId(opts) {\n if (opts.deploymentId) {\n return opts.deploymentId;\n }\n // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n // plugins like webpack define work.\n try {\n // vercel\n // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n return process?.env?.NEXT_PUBLIC_VERCEL_BRANCH_URL;\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction initializePropagators(opts) {\n if (opts.propagators) {\n if (opts.propagateTraceHeadersCorsURLs) {\n warn(\"Both 'propagators' and deprecated 'propagateTraceHeadersCorsURLs' were provided. Using 'propagators' configuration. Please migrate to the new 'propagators' config.\");\n }\n vars.propagators = opts.propagators;\n }\n // Handle legacy configuration\n else if (opts.propagateTraceHeadersCorsURLs && opts.propagateTraceHeadersCorsURLs.length > 0) {\n warn(\"'propagateTraceHeadersCorsURLs' is deprecated. Please use the new 'propagators' configuration.\");\n // Convert legacy config to new format - only include cross-origin URLs since same-origin is automatic\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [...opts.propagateTraceHeadersCorsURLs],\n },\n ];\n }\n // Default configuration - traceparent with empty match array\n // Same-origin requests get ALL configured propagators, so this ensures traceparent for same-origin\n else {\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [],\n },\n ];\n }\n}\nfunction isInstrumentationEnabled(name, opts) {\n const instrumentations = opts.enabledInstrumentations;\n if (!instrumentations)\n return true;\n return instrumentations.includes(name);\n}\n","/**\n * Creates a new object by picking specified properties from the source object.\n * Similar to TypeScript's Pick<T, K> utility type but as a runtime function.\n *\n * @param obj - The source object to pick properties from\n * @param keys - Array of property keys to pick from the source object\n * @returns A new object containing only the specified properties\n */\nexport function pick(obj, keys) {\n const result = {};\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n","import { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { vars } from \"../vars\";\n/**\n * Adds a signal attribute to be transmitted with every signal.\n * Note: if you need to ensure attributes are included with signals transmitted on initial page load, you should use\n * the \"additionalSignalAttributes\" property of the init call instead\n */\nexport function addSignalAttribute(name, value) {\n addAttribute(vars.signalAttributes, name, value);\n}\n/**\n * Removes a previously added signal attribute\n */\nexport function removeSignalAttribute(name) {\n removeAttribute(vars.signalAttributes, name);\n}\n","import { vars } from \"../vars\";\nimport { debug as debugLogger } from \"../utils/debug\";\nexport function debug() {\n debugLogger(\"Dash0 Web SDK configuration state:\", vars);\n}\n","import { vars } from \"../vars\";\nimport { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { USER_EMAIL, USER_FULL_NAME, USER_HASH, USER_ID, USER_NAME, USER_ROLES } from \"../semantic-conventions\";\nexport function identify(id, opts) {\n removeAttribute(vars.signalAttributes, USER_ID);\n if (id != null) {\n addAttribute(vars.signalAttributes, USER_ID, id);\n }\n removeAttribute(vars.signalAttributes, USER_NAME);\n if (opts?.name != null) {\n addAttribute(vars.signalAttributes, USER_NAME, opts.name);\n }\n removeAttribute(vars.signalAttributes, USER_FULL_NAME);\n if (opts?.fullName != null) {\n addAttribute(vars.signalAttributes, USER_FULL_NAME, opts.fullName);\n }\n removeAttribute(vars.signalAttributes, USER_EMAIL);\n if (opts?.email != null) {\n addAttribute(vars.signalAttributes, USER_EMAIL, opts.email);\n }\n removeAttribute(vars.signalAttributes, USER_HASH);\n if (opts?.hash != null) {\n addAttribute(vars.signalAttributes, USER_HASH, opts.hash);\n }\n removeAttribute(vars.signalAttributes, USER_ROLES);\n if (opts?.roles != null) {\n addAttribute(vars.signalAttributes, USER_ROLES, opts.roles);\n }\n}\n","import { debug, INIT_MESSAGE } from \"../utils\";\nimport { init as initApi } from \"../api/init\";\nexport * from \"../api/identify\";\nexport * from \"../api/debug\";\nexport * from \"../api/attributes\";\nexport * from \"../api/events\";\nexport * from \"../api/log-level\";\nexport { terminateSession } from \"../api/session\";\nexport { reportError } from \"../api/report-error\";\nexport function init(opts) {\n debug(`${INIT_MESSAGE} (via package)`);\n initApi(opts);\n}\n","import { reportUnhandledError as reportErrorInternal } from \"../instrumentations/errors/unhandled-error\";\nexport function reportError(error, opts) {\n reportErrorInternal(error, opts);\n}\n","import { EVENT_NAME, EVENT_NAMES, WEB_EVENT_TITLE, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { sendLog } from \"../transport\";\nimport { addCommonAttributes } from \"../attributes\";\nimport { addAttribute, addAttributes, toAnyValue } from \"../utils/otel\";\nimport { nowNanos, toNanosTs, warn } from \"../utils\";\n/**\n * Sends a custom event.\n * @param name The event name. Can not be any of the internal event names. See: EVENT_NAMES in src/semantic-conventions.\n * @param opts Additional event details.\n */\nexport function sendEvent(name, opts) {\n if (Object.values(EVENT_NAMES).includes(name)) {\n warn(`Unable to send custom event ${name}. You are not allowed to use an internal event name while sending a custom event. Dropping event...`);\n return;\n }\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, name);\n if (opts?.title) {\n addAttribute(attributes, WEB_EVENT_TITLE, opts.title);\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n sendLog({\n timeUnixNano: opts?.timestamp != null ? toNanosTs(opts.timestamp) : nowNanos(),\n attributes,\n body: toAnyValue(opts?.data),\n severityText: opts?.severity,\n severityNumber: opts?.severity ? LOG_SEVERITIES[opts.severity] : undefined,\n });\n}\n"],"names":["noop","identity","a","logLevels","debug","info","warn","error","activeLogLevel","createLogger","logLevel","console","apply","numericLogLevel","arguments","globalHasOwnProperty","Object","prototype","hasOwnProperty","obj","key","call","win","window","undefined","doc","document","nav","navigator","loc","location","perf","performance","webkitPerformance","msPerformance","mozPerformance","encodeURIComponent","fetch","localStorage","_win$localStorage","_unused","sessionStorage","_win$sessionStorage","_unused2","SHARED_CHAR_CODES_ARRAY","Array","generateUniqueId","byteCount","i","Math","floor","random","String","fromCharCode","slice","addEventListener","target","eventType","callback","attachEvent","isSupported","getItem","setItem","now","Date","getTime","nowNanos","timeOrigin","getTimeOrigin","currentDate","perfTime","dateTime","abs","toNanosTs","time","_typeof","_perf$timing","timing","fetchStart","globals","setTimeout","clearTimeout","setInterval","clearInterval","isRunningZoneJs","_len","length","_","_key","executeGlobally","_len2","_key2","_len3","_key3","_globals$globalFuncti","globalFunctionName","this","args","e","getEntriesByType","isPerformanceObserverAvailable","PerformanceTimingNames","freeze","CONNECT_END","CONNECT_START","DECODED_BODY_SIZE","DOM_COMPLETE","DOM_CONTENT_LOADED_EVENT_END","DOM_CONTENT_LOADED_EVENT_START","DOM_INTERACTIVE","DOMAIN_LOOKUP_END","DOMAIN_LOOKUP_START","ENCODED_BODY_SIZE","FETCH_START","LOAD_EVENT_END","LOAD_EVENT_START","NAVIGATION_START","REDIRECT_END","REDIRECT_START","REQUEST_START","RESPONSE_END","RESPONSE_START","SECURE_CONNECTION_START","START_TIME","UNLOAD_EVENT_END","UNLOAD_EVENT_START","usedResources","WeakSet","observeResourcePerformance","opts","onEnd","start","end","duration","cancel","observeWithoutPerformanceObserverSupport","startTime","endTime","observer","fallbackNoResourceFoundTimerHandle","fallbackEndNeverCalledTimerHandle","resources","_observer","PerformanceObserver","onResourceFound","observe","type","_e","disposeGlobalResources","endTs","cancelFallbackEndNeverCalledTimer","isWaitingAcceptable","min","maxWaitForResourceMillis","onVisibilityChanged","resource","bestMatch","bestScore","matchingResources","filter","res","responseEnd","maxToleranceForResourceTimingsMillis","has","_step","_iterator","_createForOfIteratorHelper","s","n","done","value","score","err","f","add","findBestMatchingResource","list","entry","resourceMatcher","forEach","shift","push","_observer2","disconnect","disconnectResourceObserver","removeEventListener","detachEvent","stopVisibilityObservation","visibilityState","NO_VALUE_FALLBACK","roundToTwoDecimals","round","parseUrl","url","_doc$baseURI","URL","baseURI","href","isSameOrigin","origin","INSTRUMENTED_BY_DASH0_SYMBOL","Symbol","for","wrap","module","wrapper","original","objOrFunction","markAsInstrumented","concat","vars","endpoints","attributes","scope","name","version","__sdkVersion","signalAttributes","ignoreUrls","ignoreErrorMessages","wrapEventHandlers","wrapTimers","propagateTraceHeadersCorsURLs","maxWaitForResourceTimingsMillis","headersToCapture","urlAttributeScrubber","pageViewInstrumentation","trackVirtualPageViews","includeParts","enableTransportCompression","SERVICE_NAME","SERVICE_VERSION","DEPLOYMENT_ENVIRONMENT_NAME","DEPLOYMENT_NAME","DEPLOYMENT_ID","EVENT_NAME","WEB_EVENT_ID","PAGE_LOAD_ID","USER_AGENT","USER_ID","USER_NAME","USER_FULL_NAME","USER_EMAIL","USER_HASH","USER_ROLES","EXCEPTION_MESSAGE","EXCEPTION_TYPE","EXCEPTION_STACKTRACE","URL_FULL","EVENT_NAMES","PAGE_VIEW","NAVIGATION_TIMING","WEB_VITAL","ERROR","LOG_SEVERITIES","UNSPECIFIED","TRACE","DEBUG","INFO","WARN","FATAL","PAGE_VIEW_TYPE_VALUES","PAGE_VIEW_CHANGE_STATE_VALUES","SESSION_FLAGS","generateSessionId","flags","byte","ephemeralSession","toString","padStart","SESSION_ID_BYTES","SESSION_STORAGE_KEY","STORAGE_SEPARATOR_KEY","MAX_ALLOWED_SESSION_TIMEOUT_MILLIS","sessionId","trackSessions","sessionInactivityTimeoutMillis","sessionTerminationTimeoutMillis","storedValue","k","session","values","split","id","parseInt","lastActivityTime","isNaN","parseSession","minAllowedLastActivityTime","minAllowedStartTime","isSessionValid","v","serializeSession","t","persisted","timeStamp","o","r","delta","rating","requestAnimationFrame","responseStart","_e$activationStart","activationStart","prerendering","wasDiscarded","replace","entries","navigationType","c","WeakMap","get","set","I","d","_createClass","_classCallCheck","_defineProperty","_this$t","hadRecentInput","at","h","supportedEntryTypes","includes","Promise","resolve","then","getEntries","_objectSpread","buffered","u","l","m","g","p","_globalThis$performan","globalThis","firstHiddenTime","y","b","T","E","max","reportAllChanges","P","_step2","_iterator2","takeRecords","L","M","C","_step3","_iterator3","interactionId","w","_performance$interact","interactionCount","A","Map","clear","_this$m","entryType","_this$v","sort","_step4","_iterator4","splice","delete","B","requestIdleCallback","once","N","S","PerformanceEventTiming","_i$durationThreshold","durationThreshold","_step5","_iterator5","q","_this$m2","x","isUnloading","newBatcher","sendInternal","pendingFlushTimeout","fn","queuedItems","flush","send","item","pendingBodySize","pendingRequestCount","_x","_x2","_send","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","path","body","jsonString","requestBody","byteLength","isCompressed","_context2","prev","next","JSON","stringify","Blob","size","CompressionStream","compressWithGzip","sent","all","map","_ref","_callee","endpoint","headers","response","_context","pathname","endsWith","substring","Authorization","dataset","abrupt","method","keepalive","text","catch","ok","status","statusText","t0","finish","stop","_x4","_x3","_compressWithGzip","_callee3","data","blob","stream","compressedStream","_context3","pipeThrough","Response","arrayBuffer","rateLimiter","logBatcher","logs","resourceLogs","scopeLogs","logRecords","spanBatcher","spans","resourceSpans","scopeSpans","isRateLimited","maxCallsPerTenMinutes","maxCallsPerTenSeconds","totalCallsInLastTenMinutes","totalCallsInLastTenSeconds","sendLog","log","sendSpan","span","ANY_VALUE_KEYS","toAnyValue","anyValue","isArray","keys","isAnyValue","_ref2","_slicedToArray","toKeyValue","addAttribute","addAttributes","attrs","_ref3","_ref4","removeAttribute","index","findIndex","attr","TRACE_PARENT_HEADER","w3cTraceparentFormat","getTraceContextForPageLoad","_Array$from$find","_doc$getElementsByTag","match","from","getElementsByTagName","find","_e$getAttribute","getAttribute","toLowerCase","content","trim","nt","serverTiming","serverTimings","serverEntry","description","getTraceparentFromServerTiming","getTraceparentFromNavigationTiming","traceId","spanId","addW3CTraceContextHttpHeaders","ctx","addXRayTraceContextHttpHeaders","w3cTraceId","timestamp","uniqueId","xrayTraceId","xrayHeader","TRACE_ID_PREFIX","TRACE_FLAGS","encodeTraceFlags","withoutSession","TABLE","Uint32Array","generateSpanId","prefix","hexStr","bytes","Uint8Array","crc","crc32","SPAN_ID_BYTES","startSpan","TRACE_ID_BYTES","generateTraceId","kind","startTimeUnixNano","events","links","code","endSpan","durationNano","endTimeUnixNano","addSpanEvent","attributesOrTs","ts","timeUnixNano","addUrlAttributes","applyPrefix","_toConsumableArray","join","withPrefix","parsed","username","password","hostname","protocol","hash","search","TAB_ID_STORAGE_KEY","tabId","initializeTabId","addCommonAttributes","options","_options$url","_win$innerWidth","_win$innerHeight","_nav$connection","attribute","innerWidth","innerHeight","connectionType","connection","effectiveType","startWebVitalsInstrumentation","_step6","_iterator6","_i2","_arr","capture","onLCP","onWebVital","onINP","onCLS","metric","bodyAttributes","severityNumber","severityText","kvlistValue","matchesAny","regexp","len","test","DATA_URL_PREFIX","isUrlIgnored","lowerCaseUrl","startsWith","isTransportRequest","scheduledTransmissionTimeoutHandle","reportedErrors","numberOfDifferentErrorsSeen","seenErrors","ignoreNextOnError","ignoreNextOnErrorEvent","reportUnhandledError","onUnhandledError","message","stack","isErrorMessageIgnored","shortenStackTrace","trackedError","seenCount","componentStack","transmittedCount","stringValue","scheduleTransmission","seenError","MESSAGE_PREFIX","STACK_UNAVAILABLE_MESSAGE","onUnhandledRejection","event","reason","WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY","findInStorage","storageTarget","valuesForEqualityCheck","storage","matchesEqualityCheck","valuesForEqualityCheckA","valuesForEqualityCheckB","addWrappedDomEventListener","wrappedFunction","eventName","eventListener","optionsOrCapture","addWrappedFunction","getDomEventListenerValuesForEqualityCheck","getDomEventListenerCaptureValue","Boolean","popWrappedDomEventListener","fallback","storageItem","popWrappedFunction","startEventHandlerInstrumentation","EventTarget","originalAddEventListener","originalRemoveEventListener","wrapEventTarget","wrapTimer","reportError","startErrorInstrumentation","globalOnError","onerror","fileName","lineNumber","columnNumber","startOnErrorInstrumentation","startTimerInstrumentation","KNOWN_HTTP_METHODS","isWellKnownHttpMethod","addResourceNetworkEvents","ignoreZeros","addSpanNetworkEvent","propertyName","addResourceSize","encodedLength","encodedBodySize","wrapFetch","_fetchWithInstrumentation","input","init","_copyOfInit","_request$method","copyOfInit","request","originalMethod","isWellKnownMethod","isWellKnownMethodMatchingLeniently","propagatorTypes","_copyOfInit2","performanceObserver","origResponse","assign","Request","toUpperCase","addGraphQlProperties","determinePropagatorTypes","Headers","addTraceContextHttpHeaders","append","tryCaptureHttpHeaders","initiatorType","addResponseData","wrapResponse","endSpanOnError","getAttributeKey","some","rxp","setSpanStatus","originalResponse","readTimeoutMs","onDone","onError","fallbackTs","cbCalled","handleDone","fallbackEndTs","handleError","bodyNeverCompletelyReadTimeout","reader","getReader","ReadableStream","pull","controller","_yield$reader$read","read","releaseLock","close","enqueue","exception","recordException","errorToSpanStatus","matchingTypes","propagators","propagator","types","transmitPageViewEvent","virtual","replaced","_meta$title","meta","_vars$pageViewInstrum","_vars$pageViewInstrum2","_vars$pageViewInstrum3","generateMetadata","getPageViewMeta","title","referrer","traceContext","onLoaded","addNavigationTiming","getStartTimeUnixNanos","field","Number","isInteger","currentLocation","shouldIncludeHashChanges","shouldIncludeSearchChanges","onPopState","onUrlChange","onHashChange","newURL","newUrl","parsedUrl","updateCurrentLocation","startNavigationInstrumentation","readyState","startPageLoadInstrumentation","_vars$pageViewInstrum4","history","state","unused","startPageTransitionInstrumentation","isObject","getPrototypeOf","merge","objects","reduce","result","current","TypeError","mergeArrays","uniqueArrayItems","Set","allowUndefinedOverrides","defaultOptions","withOptions","hasBeenInitialised","_loc$hostname","serviceName","pick","initializePropagators","serviceVersion","env","environment","_process","process","NEXT_PUBLIC_VERCEL_ENV","_ignored","detectEnvironment","deploymentName","_process2","NEXT_PUBLIC_VERCEL_TARGET_ENV","detectDeploymentName","deploymentId","_process3","NEXT_PUBLIC_VERCEL_BRANCH_URL","detectDeploymentId","initializeResourceAttributes","_nav$userAgent","userAgent","additionalSignalAttributes","initializeSignalAttributes","isInstrumentationEnabled","instrumentations","enabledInstrumentations","debugLogger","fullName","email","roles","initApi","reportErrorInternal","severity","level","_logLevels$level","removeItem"],"mappings":"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","x_google_ignoreList":[19,51]}
|
|
1
|
+
{"version":3,"file":"dash0.umd.cjs","sources":["modules/utils/fn.js","modules/utils/debug.js","modules/utils/obj.js","modules/utils/globals.js","modules/utils/id.js","modules/utils/listeners.js","modules/utils/local-storage.js","modules/utils/time.js","modules/utils/timers.js","modules/utils/performance.js","modules/utils/constants.js","modules/utils/math.js","modules/utils/url.js","modules/utils/origin.js","modules/utils/sanitize.js","modules/utils/wrap.js","modules/vars.js","modules/semantic-conventions.js","modules/utils/session-id.js","modules/api/session.js","../node_modules/.pnpm/web-vitals@5.0.3/node_modules/web-vitals/dist/web-vitals.js","modules/utils/on-last-chance.js","modules/transport/batcher.js","modules/transport/fetch.js","modules/transport/index.js","modules/utils/rate-limit.js","modules/utils/otel/attributes.js","modules/utils/otel/trace-context.js","modules/utils/trace-id.js","modules/utils/crc32.js","modules/utils/span-id.js","modules/utils/otel/span.js","modules/attributes/url.js","modules/utils/session-storage.js","modules/utils/tab-id.js","modules/attributes/common.js","modules/instrumentations/web-vitals.js","modules/utils/ignore-rules.js","modules/instrumentations/errors/unhandled-error.js","modules/instrumentations/errors/unhandled-promise-rejection.js","modules/instrumentations/errors/async-function-wrapping.js","modules/instrumentations/errors/event-handlers.js","modules/instrumentations/errors/timers.js","modules/instrumentations/errors/index.js","modules/instrumentations/http/utils.js","modules/instrumentations/http/fetch.js","modules/utils/otel/http.js","modules/utils/otel/error.js","modules/instrumentations/navigation/event.js","modules/instrumentations/navigation/page-load.js","modules/instrumentations/navigation/page-transition.js","modules/instrumentations/navigation/index.js","../node_modules/.pnpm/ts-deepmerge@7.0.3/node_modules/ts-deepmerge/esm/index.js","modules/api/init.js","modules/utils/pick.js","modules/api/attributes.js","modules/api/debug.js","modules/api/identify.js","modules/entrypoint/npm-package.js","modules/api/report-error.js","modules/api/events.js"],"sourcesContent":["export function noop() {\n // This function is intentionally empty.\n}\nexport function identity(a) {\n return a;\n}\n","import { noop } from \"./fn\";\nconst logLevels = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\nlet activeLogLevel = logLevels.warn;\n/**\n * Changes the logging verbosity of Dash0's web SDK. By default, only warnings and errors are logged.\n */\nexport function setActiveLogLevel(level) {\n activeLogLevel = logLevels[level] ?? logLevels.warn;\n}\nexport const info = createLogger(\"info\");\nexport const warn = createLogger(\"warn\");\nexport const error = createLogger(\"error\");\nexport const debug = createLogger(\"debug\");\nfunction createLogger(logLevel) {\n if (typeof console !== \"undefined\" && console[logLevel] && typeof console[logLevel].apply === \"function\") {\n const numericLogLevel = logLevels[logLevel];\n return function () {\n if (numericLogLevel >= activeLogLevel) {\n console[logLevel].apply(console, arguments);\n }\n };\n }\n return noop;\n}\n","const globalHasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * protection against hasOwnProperty overrides.\n */\nexport function hasOwnProperty(obj, key) {\n return globalHasOwnProperty.call(obj, key);\n}\nexport function hasKey(obj, key) {\n return key in obj;\n}\n","// aliasing globals for improved minification\n// Avoid blowing up in an ssr context. It is important to check via typeof here because window might not even be declared when imported in ssr.\nexport const win = typeof window !== \"undefined\" ? window : undefined;\nexport const doc = win?.document;\nexport const nav = win?.navigator;\nexport const loc = typeof location !== \"undefined\" ? location : undefined;\nexport const perf = win?.performance || win?.webkitPerformance || win?.msPerformance || win?.mozPerformance;\nexport const encodeURIComponent = win?.encodeURIComponent;\nexport const fetch = win?.fetch;\nexport const localStorage = (function () {\n try {\n return win?.localStorage ?? null;\n }\n catch {\n // localStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\nexport const sessionStorage = (function () {\n try {\n return win?.sessionStorage ?? null;\n }\n catch {\n // sessionStorage access is not permitted in certain security modes, e.g.\n // when cookies are completely disabled in web browsers.\n return null;\n }\n})();\n/**\n * Exposed via this module to enable testing.\n */\nexport function sendBeacon(url, data) {\n return nav?.sendBeacon(url, data) ?? false;\n}\n/* eslint-enable no-restricted-globals */\n","export const SPAN_ID_BYTES = 8;\nexport const TRACE_ID_BYTES = 16;\nexport const PAGE_LOAD_ID_BYTES = TRACE_ID_BYTES;\nexport const SESSION_ID_BYTES = SPAN_ID_BYTES;\nexport const TAB_ID_BYTES = SPAN_ID_BYTES;\nexport const WEB_EVENT_ID_BYTES = SPAN_ID_BYTES;\nconst SHARED_CHAR_CODES_ARRAY = Array(32);\nexport function generateUniqueId(byteCount) {\n for (let i = 0; i < byteCount * 2; i++) {\n SHARED_CHAR_CODES_ARRAY[i] = Math.floor(Math.random() * 16) + 48;\n // valid hex characters in the range 48-57 and 97-102\n if (SHARED_CHAR_CODES_ARRAY[i] >= 58) {\n SHARED_CHAR_CODES_ARRAY[i] += 39;\n }\n }\n return String.fromCharCode.apply(null, SHARED_CHAR_CODES_ARRAY.slice(0, byteCount * 2));\n}\n","// aliasing the global function for improved minification and\n// protection against hasOwnProperty overrides.\nexport function addEventListener(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n }\n else if (target.attachEvent) {\n target.attachEvent(\"on\" + eventType, callback);\n }\n}\nexport function removeEventListener(target, eventType, callback) {\n if (target.removeEventListener) {\n target.removeEventListener(eventType, callback, false);\n }\n else if (target.detachEvent) {\n target.detachEvent(\"on\" + eventType, callback);\n }\n}\n","// localStorage API re-exposed to allow testing.\nimport { localStorage } from \"./globals\";\nexport const isSupported = localStorage != null && typeof localStorage.getItem === \"function\" && typeof localStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && localStorage) {\n return localStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && localStorage) {\n localStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && localStorage) {\n localStorage.removeItem(k);\n }\n}\n","import { perf } from \"./globals\";\nexport function now() {\n return new Date().getTime();\n}\nexport function nowNanos() {\n const timeOrigin = getTimeOrigin();\n const currentDate = new Date();\n if (timeOrigin) {\n const perfTime = perf.now() + timeOrigin;\n const dateTime = currentDate.getTime();\n // Only return perf time measurement if it hasn't significantly drifted (60s).\n // Some browsers violate the performance api spec and do not tick the monotonic time while the OS sleeps or the browser hangs\n // See https://bugzil.la/1709767\n // See https://webkit.org/b/225610\n if (Math.abs(perfTime - dateTime) < 60000) {\n return String(perfTime * 1000000);\n }\n }\n return toNanosTs(currentDate);\n}\nexport function toNanosTs(time) {\n if (typeof time === \"object\") {\n return toNanosTs(time.getTime());\n }\n // We don't multiply, because we want to keep number precision\n return String(time) + \"000000\";\n}\nexport function getTimeOrigin() {\n let timeOrigin = perf?.timeOrigin;\n if (typeof timeOrigin !== \"number\") {\n timeOrigin = perf?.timing?.fetchStart;\n }\n return timeOrigin;\n}\nexport function domHRTimestampToNanos(ts) {\n return String(Math.round((ts + getTimeOrigin()) * 1000000));\n}\n","import { warn, debug } from \"./debug\";\nimport { win } from \"./globals\";\n// This module contains wrappers around the standard timer API. These wrappers can be used to\n// ensure that execution of timers happens outside of any Angular specific zones. This in turn\n// means that this script will never disturb Angular's stabilization phase.\n// https://angular.io/api/core/ApplicationRef#isStable\n// Please note that it may sometimes be necessary to deliberately execute code inside of\n// Angular's Zones. Always take care to make a deliberate decision when to use and when not to\n// use these wrappers.\n// We take a copy of all globals to ensure that no other script will change them all of a sudden.\n// This ensures that when we register a timeout/interval on one global, that we will be able to\n// de-register it again in all cases.\nconst globals = {\n setTimeout: win?.setTimeout,\n clearTimeout: win?.clearTimeout,\n setInterval: win?.setInterval,\n clearInterval: win?.clearInterval,\n};\n// If the globals don't exist at execution time of this file, then we know that the globals stored\n// above are not wrapped by Zone.js. This in turn can mean better performance for Angular users.\nexport const isRunningZoneJs = win != null && win[\"Zone\"] != null && win[\"Zone\"][\"root\"] != null && typeof win[\"Zone\"][\"root\"][\"run\"] === \"function\";\nif (isRunningZoneJs) {\n debug(\"Discovered Zone.js globals. Will attempt to register all timers inside the root Zone.\");\n}\nexport function setTimeout(..._) {\n return executeGlobally.apply(\"setTimeout\", arguments);\n}\nexport function clearTimeout(..._) {\n return executeGlobally.apply(\"clearTimeout\", arguments);\n}\nexport function setInterval(..._) {\n return executeGlobally.apply(\"setInterval\", arguments);\n}\nexport function clearInterval(..._) {\n return executeGlobally.apply(\"clearInterval\", arguments);\n}\nfunction executeGlobally() {\n // We don't want to incur a performance penalty for all users just because some\n // users are relying on zone.js. This API looks quite ridiculous, but it\n // allows for concise and efficient code, e.g. arguments does not need to be\n // translated into an array.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const globalFunctionName = this;\n if (isRunningZoneJs) {\n try {\n // Incurr a performance overhead for Zone.js users that we just cannot avoid:\n // Copy the arguments passed in here so that we can use them inside the root\n // zone.\n const args = Array.prototype.slice.apply(arguments);\n // @ts-expect-error necessary Zone.js types not added\n return win[\"Zone\"][\"root\"][\"run\"](globals[globalFunctionName], win, args);\n }\n catch (e) {\n warn(\"Failed to execute %s inside of zone (via Zone.js). Falling back to execution inside currently \" +\n \"active zone.\", globalFunctionName, e);\n // failure – maybe zone js not properly initialized? Fall back to execution\n // outside of Zone.js as a last resort (outside of try/catch and if)\n }\n }\n // Note: Explicitly passing win as 'this' even though we are getting the function from 'globals'\n return globals[globalFunctionName]?.apply(win, arguments);\n}\n","import { doc, perf, win } from \"./globals\";\nimport { now } from \"./time\";\nimport { noop } from \"./fn\";\nimport { setTimeout } from \"./timers\";\nimport { addEventListener, removeEventListener } from \"./listeners\";\nconst TEN_MINUTES_IN_MILLIS = 1000 * 60 * 10;\nconst ONE_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;\nconst OBSERVER_WAIT_TIME_MS = 300;\nconst MAX_RESOURCES_ENTRIES = 100;\nexport const isResourceTimingAvailable = !!(perf && perf.getEntriesByType);\nexport const isPerformanceObserverAvailable = perf && typeof win[\"PerformanceObserver\"] === \"function\" && typeof perf[\"now\"] === \"function\";\nexport const PerformanceTimingNames = Object.freeze({\n CONNECT_END: \"connectEnd\",\n CONNECT_START: \"connectStart\",\n DECODED_BODY_SIZE: \"decodedBodySize\",\n DOM_COMPLETE: \"domComplete\",\n DOM_CONTENT_LOADED_EVENT_END: \"domContentLoadedEventEnd\",\n DOM_CONTENT_LOADED_EVENT_START: \"domContentLoadedEventStart\",\n DOM_INTERACTIVE: \"domInteractive\",\n DOMAIN_LOOKUP_END: \"domainLookupEnd\",\n DOMAIN_LOOKUP_START: \"domainLookupStart\",\n ENCODED_BODY_SIZE: \"encodedBodySize\",\n FETCH_START: \"fetchStart\",\n LOAD_EVENT_END: \"loadEventEnd\",\n LOAD_EVENT_START: \"loadEventStart\",\n NAVIGATION_START: \"navigationStart\",\n REDIRECT_END: \"redirectEnd\",\n REDIRECT_START: \"redirectStart\",\n REQUEST_START: \"requestStart\",\n RESPONSE_END: \"responseEnd\",\n RESPONSE_START: \"responseStart\",\n SECURE_CONNECTION_START: \"secureConnectionStart\",\n START_TIME: \"startTime\",\n UNLOAD_EVENT_END: \"unloadEventEnd\",\n UNLOAD_EVENT_START: \"unloadEventStart\",\n});\nconst usedResources = new WeakSet();\nexport function observeResourcePerformance(opts) {\n if (!isPerformanceObserverAvailable)\n return observeWithoutPerformanceObserverSupport(opts.onEnd);\n // Used to calculate the duration when no resource was found.\n let startTime;\n let endTime;\n const resources = [];\n // Global resources that will need to be disposed\n let observer;\n let fallbackNoResourceFoundTimerHandle;\n let fallbackEndNeverCalledTimerHandle;\n return {\n start: onStart,\n end: onEnd,\n cancel: disposeGlobalResources,\n };\n function onStart() {\n startTime = perf.now();\n try {\n const PerformanceObserver = win?.PerformanceObserver;\n if (PerformanceObserver) {\n observer = new PerformanceObserver(onResourceFound);\n observer?.observe({ type: \"resource\" });\n }\n }\n catch (_e) {\n // Some browsers may not support the passed entryTypes and decide to throw an error.\n // This would then result in an error with a message like:\n //\n // entryTypes only contained unsupported types\n //\n // Swallow and ignore the error. Treat it like unavailable performance observer data.\n }\n fallbackEndNeverCalledTimerHandle = setTimeout(disposeGlobalResources, TEN_MINUTES_IN_MILLIS);\n }\n function onEnd(endTs) {\n // If endTime is already set, we are already terminating and should not do so again\n if (endTime)\n return;\n endTime = endTs ?? perf.now();\n cancelFallbackEndNeverCalledTimer();\n if (!isWaitingAcceptable()) {\n return end();\n }\n setTimeout(() => end(), Math.min(OBSERVER_WAIT_TIME_MS, opts.maxWaitForResourceMillis));\n addEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n fallbackNoResourceFoundTimerHandle = setTimeout(end, opts.maxWaitForResourceMillis);\n }\n function end() {\n disposeGlobalResources();\n const resource = findBestMatchingResource();\n // In some old web browsers, e.g. Chrome 31, the value provided as the duration\n // can be very wrong. We have seen cases where this value is measured in years.\n // If this does seem be the case, then we will ignore the duration property and\n // instead prefer our approximation.\n if (resource?.duration && resource.duration < ONE_DAY_IN_MILLIS) {\n opts.onEnd({ resource, duration: resource.duration });\n }\n else {\n opts.onEnd({ resource, duration: endTime - startTime });\n }\n }\n function onResourceFound(list) {\n list\n .getEntriesByType(\"resource\")\n .filter((e) => {\n // This polymorphism is not properly represented in the api types. The cast is safe since we're only accessing the resource timings.\n const entry = e;\n return entry.startTime >= startTime && opts.resourceMatcher(entry);\n })\n .forEach((entry) => {\n // Limit array size to prevent memory leaks on high-traffic pages\n if (resources.length >= MAX_RESOURCES_ENTRIES) {\n // Remove oldest entry (FIFO)\n // Timings are only reported once the resource is fully recorded (i.e. the request has ended), so timings ending\n // way before the `onEnd` is called are less likely to be good matches and we can ignore them.\n resources.shift();\n }\n resources.push(entry);\n });\n }\n function onVisibilityChanged() {\n if (!isWaitingAcceptable())\n end();\n }\n function disposeGlobalResources() {\n disconnectResourceObserver();\n cancelFallbackNoResourceFoundTimer();\n cancelFallbackEndNeverCalledTimer();\n stopVisibilityObservation();\n }\n function disconnectResourceObserver() {\n if (observer) {\n try {\n observer?.disconnect();\n }\n catch (_e) {\n // Observer disconnect may throw when connect attempt wasn't successful. Ignore this.\n }\n observer = undefined;\n }\n }\n function cancelFallbackNoResourceFoundTimer() {\n if (fallbackNoResourceFoundTimerHandle) {\n clearTimeout(fallbackNoResourceFoundTimerHandle);\n fallbackNoResourceFoundTimerHandle = undefined;\n }\n }\n function cancelFallbackEndNeverCalledTimer() {\n if (fallbackEndNeverCalledTimerHandle) {\n clearTimeout(fallbackEndNeverCalledTimerHandle);\n fallbackEndNeverCalledTimerHandle = undefined;\n }\n }\n function stopVisibilityObservation() {\n if (!doc)\n return;\n removeEventListener(doc, \"visibilitychange\", onVisibilityChanged);\n }\n function findBestMatchingResource() {\n if (!resources.length)\n return undefined;\n let bestMatch;\n const matchingResources = resources.filter((res) => res.responseEnd <= endTime + opts.maxToleranceForResourceTimingsMillis && !usedResources.has(res));\n if (!matchingResources.length) {\n return undefined;\n }\n if (matchingResources.length === 1) {\n bestMatch = matchingResources[0];\n }\n let bestScore;\n if (!bestMatch) {\n for (const res of matchingResources) {\n const score = Math.abs(endTime - startTime - res.duration) + Math.abs(res.responseEnd - endTime);\n if (bestScore === undefined || score < bestScore) {\n bestScore = score;\n bestMatch = res;\n }\n }\n }\n if (!bestMatch)\n return;\n usedResources.add(bestMatch);\n return bestMatch;\n }\n}\n// We may only wait for resource data to arrive as long as the document is visible or in the process\n// of becoming visible. In all other cases we might lose data when waiting, e.g. when the document\n// is in the process of being disposed.\nfunction isWaitingAcceptable() {\n return doc?.visibilityState === \"visible\" || doc?.visibilityState === \"prerender\";\n}\nfunction observeWithoutPerformanceObserverSupport(onEnd) {\n let start = 0;\n return {\n start: () => {\n start = now();\n },\n end: () => onEnd({ duration: now() - start }),\n cancel: noop,\n };\n}\n","export const NO_VALUE_FALLBACK = \"undefined\";\nexport const INIT_MESSAGE = \"Initializing Dash0 Web SDK\";\n","export function roundToTwoDecimals(n) {\n return Math.round(n * 100) / 100;\n}\n","import { doc, loc } from \"./globals\";\n/**\n * Parses url using URL constructor. Supports URL objects as passthrough input to simplify implementations\n * May throw if parsing fails\n * @param url\n */\nexport function parseUrl(url) {\n if (typeof url !== \"string\")\n return url;\n return new URL(url, doc?.baseURI ?? loc?.href);\n}\n","import { parseUrl } from \"./url\";\n/** Returns the origin if present (if in browser context). */\nfunction getOrigin() {\n return typeof location !== \"undefined\" ? location.origin : undefined;\n}\nexport function isSameOrigin(url) {\n try {\n const parsedUrl = parseUrl(url);\n return parsedUrl.origin === getOrigin();\n }\n catch (_e) {\n return false;\n }\n}\n","const SUSPICIOUS_CHARS = /['\"<>{};\\x00-\\x1F\\x7F]/;\n/**\n * Returns true if the value is safe to use as a `service.name` resource attribute.\n *\n * Rejects values containing characters commonly used in injection payloads:\n * quotes, angle brackets, braces, semicolons, and C0 control characters / DEL.\n * Forward and back slashes are intentionally permitted so names like\n * `myteam/myservice` remain valid.\n */\nexport function isSafeServiceName(value) {\n return !SUSPICIOUS_CHARS.test(value);\n}\n","import { debug } from \"./debug\";\nconst INSTRUMENTED_BY_DASH0_SYMBOL = Symbol.for(\"INSTRUMENTED_BY_DASH0\");\nfunction isAlreadyInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n return objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] === true;\n}\nfunction markAsInstrumented(objOrFunction) {\n // @ts-expect-error -- typescript does not know about this hidden marker and we're not going to tell it 🤫\n objOrFunction[INSTRUMENTED_BY_DASH0_SYMBOL] = true;\n}\nexport function wrap(module, target, wrapper) {\n const original = module[target];\n if (!original) {\n debug(`${String(target)} is not defined, unable to instrument`);\n return;\n }\n if (isAlreadyInstrumented(original)) {\n debug(`${String(target)} has already been instrumented, skipping`);\n return;\n }\n markAsInstrumented(original);\n module[target] = wrapper(original);\n}\n","import { identity } from \"./utils\";\nexport const vars = {\n endpoints: [],\n resource: {\n attributes: [],\n },\n scope: {\n name: \"dash0-web-sdk\",\n version: __sdkVersion,\n attributes: [],\n },\n signalAttributes: [],\n ignoreUrls: [],\n ignoreErrorMessages: [],\n wrapEventHandlers: true,\n wrapTimers: true,\n propagateTraceHeadersCorsURLs: [],\n maxWaitForResourceTimingsMillis: 10000,\n maxToleranceForResourceTimingsMillis: 50,\n headersToCapture: [],\n urlAttributeScrubber: identity,\n pageViewInstrumentation: {\n trackVirtualPageViews: true,\n includeParts: [],\n },\n enableTransportCompression: false,\n};\n","// Resource Attribute Keys\nexport const SERVICE_NAME = \"service.name\";\nexport const SERVICE_NAMESPACE = \"service.namespace\";\nexport const SERVICE_VERSION = \"service.version\";\nexport const DEPLOYMENT_ENVIRONMENT_NAME = \"deployment.environment.name\";\nexport const DEPLOYMENT_NAME = \"deployment.name\";\nexport const DEPLOYMENT_ID = \"deployment.id\";\n// Misc Signal Attribute Keys\nexport const EVENT_NAME = \"event.name\";\nexport const WEB_EVENT_TITLE = \"dash0.web.event.title\";\nexport const WEB_EVENT_ID = \"dash0.web.event.id\";\nexport const PAGE_LOAD_ID = \"page.load.id\";\nexport const SESSION_ID = \"session.id\";\nexport const USER_AGENT = \"user_agent.original\";\nexport const BROWSER_TAB_ID = \"browser.tab.id\";\nexport const WINDOW_WIDTH = \"browser.window.width\";\nexport const WINDOW_HEIGHT = \"browser.window.height\";\nexport const NETWORK_CONNECTION_TYPE = \"network.connection.subtype\";\nexport const EXCEPTION_COMPONENT_STACK = \"exception.component_stack\";\n// User Attribute Keys\nexport const USER_ID = \"user.id\";\nexport const USER_NAME = \"user.name\";\nexport const USER_FULL_NAME = \"user.full_name\";\nexport const USER_EMAIL = \"user.email\";\nexport const USER_HASH = \"user.hash\";\nexport const USER_ROLES = \"user.roles\";\n// Exception Attribute Keys\nexport const EXCEPTION_MESSAGE = \"exception.message\";\nexport const EXCEPTION_TYPE = \"exception.type\";\nexport const EXCEPTION_STACKTRACE = \"exception.stacktrace\";\n// Error Attribute Keys\nexport const ERROR_TYPE = \"error.type\";\n// URL Attribute Keys\nexport const PAGE_URL_ATTR_PREFIX = \"page\";\nexport const URL_DOMAIN = \"url.domain\";\nexport const URL_FRAGMENT = \"url.fragment\";\nexport const URL_FULL = \"url.full\";\nexport const URL_PATH = \"url.path\";\nexport const URL_QUERY = \"url.query\";\nexport const URL_SCHEME = \"url.scheme\";\n// Http Attribute Keys\nexport const HTTP_REQUEST_METHOD = \"http.request.method\";\nexport const HTTP_REQUEST_METHOD_ORIGINAL = \"http.request.method_original\";\nexport const HTTP_REQUEST_HEADER = \"http.request.header\";\nexport const HTTP_RESPONSE_STATUS_CODE = \"http.response.status_code\";\nexport const HTTP_RESPONSE_HEADER = \"http.response.header\";\nexport const HTTP_RESPONSE_BODY_SIZE = \"http.response.body.size\";\n// Event Names\nexport const EVENT_NAMES = {\n PAGE_VIEW: \"browser.page_view\",\n NAVIGATION_TIMING: \"browser.navigation_timing\",\n WEB_VITAL: \"browser.web_vital\",\n ERROR: \"browser.error\",\n};\nexport const SPAN_EVENT_NAME_EXCEPTION = \"exception\";\n// Log Severities\nexport const LOG_SEVERITIES = {\n UNSPECIFIED: 0,\n TRACE: 1,\n DEBUG: 5,\n INFO: 9,\n WARN: 13,\n ERROR: 17,\n FATAL: 21,\n};\n// Page View Event Attributes\n// SEE: https://github.com/open-telemetry/semantic-conventions/pull/1910/files\nexport const PAGE_VIEW_TYPE = \"type\";\nexport const PAGE_VIEW_TYPE_VALUES = {\n INITIAL: 0,\n VIRTUAL: 1,\n};\nexport const PAGE_VIEW_CHANGE_STATE = \"change_state\";\nexport const PAGE_VIEW_CHANGE_STATE_VALUES = {\n PUSH: \"pushState\",\n REPLACE: \"replaceState\",\n};\n// Span Status\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1; // This is here for completion, status ok is reserved for use by application developers\nexport const SPAN_STATUS_ERROR = 2;\n// Span Kind\n// See: https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\nexport const SPAN_KIND_CLIENT = 3;\n","import * as localStorage from \"./local-storage\";\nimport { generateUniqueId, SESSION_ID_BYTES } from \"./id\";\nconst SESSION_FLAGS = {\n EPHEMERAL_SESSION: 0x01, // 00000001 - if the browser does NOT support local storage we count the session as ephemeral because we cannot persist it\n};\nfunction encodeSessionFlags(flags) {\n let byte = 0;\n if (flags.ephemeralSession) {\n byte |= SESSION_FLAGS.EPHEMERAL_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateSessionId() {\n const sessionFlags = {\n ephemeralSession: !localStorage.isSupported,\n };\n return `${encodeSessionFlags(sessionFlags)}${generateUniqueId(SESSION_ID_BYTES - 1)}`;\n}\n","import { isSupported, getItem, setItem, removeItem } from \"../utils\";\nimport { debug, now } from \"../utils\";\nimport { info, warn } from \"../utils\";\nimport { generateSessionId } from \"../utils/session-id\";\nconst SESSION_STORAGE_KEY = \"d0_session\";\nconst STORAGE_SEPARATOR_KEY = \"#\";\nconst DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS = 1000 * 60 * 60 * 3;\nconst DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 6;\nconst MAX_ALLOWED_SESSION_TIMEOUT_MILLIS = 1000 * 60 * 60 * 24;\nexport let sessionId = null;\nexport function trackSessions(sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n if (!isSupported) {\n debug(\"Storage API is not available and session tracking is therefore not supported.\");\n // we still generate a session ID to ensure that the session ID is always available\n sessionId = generateSessionId();\n return;\n }\n if (!sessionInactivityTimeoutMillis) {\n sessionInactivityTimeoutMillis = DEFAULT_SESSION_INACTIVITY_TIMEOUT_MILLIS;\n }\n if (!sessionTerminationTimeoutMillis) {\n sessionTerminationTimeoutMillis = DEFAULT_SESSION_TERMINATION_TIMEOUT_MILLIS;\n }\n sessionInactivityTimeoutMillis = Math.min(sessionInactivityTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n sessionTerminationTimeoutMillis = Math.min(sessionTerminationTimeoutMillis, MAX_ALLOWED_SESSION_TIMEOUT_MILLIS);\n try {\n const storedValue = getItem(SESSION_STORAGE_KEY);\n let session = parseSession(storedValue);\n if (session && !isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis)) {\n session = null;\n }\n if (session) {\n session.lastActivityTime = now();\n }\n else {\n session = {\n id: generateSessionId(),\n startTime: now(),\n lastActivityTime: now(),\n };\n }\n setItem(SESSION_STORAGE_KEY, serializeSession(session));\n sessionId = session.id;\n }\n catch (e) {\n warn(\"Failed to record session information\", e);\n }\n}\n/**\n * The session will be terminated. This only takes effect on the next physical page load.\n */\nexport function terminateSession() {\n if (!isSupported) {\n return;\n }\n try {\n removeItem(SESSION_STORAGE_KEY);\n }\n catch (e) {\n info(\"Failed to terminate session\", e);\n }\n}\nfunction parseSession(storedValue) {\n if (!storedValue) {\n return null;\n }\n const values = storedValue.split(STORAGE_SEPARATOR_KEY);\n if (values.length < 3) {\n return null;\n }\n const id = values[0];\n const startTime = parseInt(values[1], 10);\n const lastActivityTime = parseInt(values[2], 10);\n if (!id || isNaN(startTime) || isNaN(lastActivityTime)) {\n return null;\n }\n return {\n id,\n startTime,\n lastActivityTime,\n };\n}\nfunction serializeSession(session) {\n return session.id + STORAGE_SEPARATOR_KEY + session.startTime + STORAGE_SEPARATOR_KEY + session.lastActivityTime;\n}\nfunction isSessionValid(session, sessionInactivityTimeoutMillis, sessionTerminationTimeoutMillis) {\n const minAllowedLastActivityTime = now() - sessionInactivityTimeoutMillis;\n if (session.lastActivityTime < minAllowedLastActivityTime) {\n return false;\n }\n const minAllowedStartTime = now() - sessionTerminationTimeoutMillis;\n return session.startTime >= minAllowedStartTime;\n}\n","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let o,s;return r=>{t.value>=0&&(r||i)&&(s=t.value-(o??0),(s||void 0===o)&&(o=t.value,t.delta=s,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},o=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},s=()=>{const e=o();return e?.activationStart??0},r=(t,n=-1)=>{const i=o();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||s()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,m=e=>{\"hidden\"===document.visibilityState&&u>-1&&(u=\"visibilitychange\"===e.type?e.timeStamp:0,v())},g=()=>{addEventListener(\"visibilitychange\",m,!0),addEventListener(\"prerenderingchange\",m,!0)},v=()=>{removeEventListener(\"visibilitychange\",m,!0),removeEventListener(\"prerenderingchange\",m,!0)},p=()=>{if(u<0){const e=s(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??l(),g(),t((()=>{setTimeout((()=>{u=l(),g()}))}))}return{get firstHiddenTime(){return u}}},y=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},b=[1800,3e3],P=(e,o={})=>{y((()=>{const c=p();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-s(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,b,o.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,b,o.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},T=[.1,.25],E=(e,o={})=>{P(f((()=>{let s,c=r(\"CLS\",0);const f=a(o,d),u=e=>{for(const t of e)f.h(t);f.i>c.value&&(c.value=f.i,c.entries=f.o,s())},l=h(\"layout-shift\",u);l&&(s=n(e,c,T,o.reportAllChanges),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(u(l.takeRecords()),s(!0))})),t((()=>{f.i=0,c=r(\"CLS\",0),s=n(e,c,T,o.reportAllChanges),i((()=>s()))})),setTimeout(s))})))};let _=0,L=1/0,M=0;const C=e=>{for(const t of e)t.interactionId&&(L=Math.min(L,t.interactionId),M=Math.max(M,t.interactionId),_=M?(M-L)/7+1:0)};let I;const w=()=>I?_:performance.interactionCount??0,F=()=>{\"interactionCount\"in performance||I||(I=h(\"event\",C,{type:\"event\",buffered:!0,durationThreshold:0}))};let k=0;class A{u=[];l=new Map;m;v;p(){k=w(),this.u.length=0,this.l.clear()}P(){const e=Math.min(this.u.length-1,Math.floor((w()-k)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.T){if(n?e.duration>n.T?(n.entries=[e],n.T=e.duration):e.duration===n.T&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],T:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.T-e.T)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.v?.(n)}}}const B=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),document.addEventListener(\"visibilitychange\",e,{once:!0}),t((()=>{e(),document.removeEventListener(\"visibilitychange\",e)})))},N=[200,500],S=(e,i={})=>{globalThis.PerformanceEventTiming&&\"interactionId\"in PerformanceEventTiming.prototype&&y((()=>{F();let o,s=r(\"INP\");const c=a(i,A),d=e=>{B((()=>{for(const t of e)c.h(t);const t=c.P();t&&t.T!==s.value&&(s.value=t.T,s.entries=t.entries,o())}))},f=h(\"event\",d,{durationThreshold:i.durationThreshold??40});o=n(e,s,N,i.reportAllChanges),f&&(f.observe({type:\"first-input\",buffered:!0}),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(d(f.takeRecords()),o(!0))})),t((()=>{c.p(),s=r(\"INP\"),o=n(e,s,N,i.reportAllChanges)})))}))};class q{m;h(e){this.m?.(e)}}const x=[2500,4e3],O=(e,o={})=>{y((()=>{const c=p();let d,u=r(\"LCP\");const l=a(o,q),m=e=>{o.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-s(),0),u.entries=[t],d())},g=h(\"largest-contentful-paint\",m);if(g){d=n(e,u,x,o.reportAllChanges);const s=f((()=>{m(g.takeRecords()),g.disconnect(),d(!0)}));for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,(()=>B(s)),{capture:!0,once:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,x,o.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},$=[800,1800],D=e=>{document.prerendering?y((()=>D(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>D(e)),!0):setTimeout(e)},H=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,$,i.reportAllChanges);D((()=>{const d=o();d&&(c.value=Math.max(d.responseStart-s(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,$,i.reportAllChanges),a(!0)})))}))};export{T as CLSThresholds,b as FCPThresholds,N as INPThresholds,x as LCPThresholds,$ as TTFBThresholds,E as onCLS,P as onFCP,S as onINP,O as onLCP,H as onTTFB};\n","import { addEventListener } from \"./listeners\";\nimport { doc, win } from \"./globals\";\nlet isUnloading = false;\n/**\n * Triggers the `fn` when the HTML document is getting unloaded\n * (or when it looks like it might be). Useful to flush batch activities.\n */\nexport function onLastChance(fn) {\n if (isUnloading) {\n fn();\n }\n if (!doc || !win)\n return;\n addEventListener(doc, \"visibilitychange\", function () {\n if (doc.visibilityState !== \"visible\") {\n fn();\n }\n });\n addEventListener(win, \"pagehide\", function () {\n isUnloading = true;\n fn();\n });\n // According to the spec visibilitychange should be a replacement for\n // beforeunload, but the reality is different (as of 2019-04-17). Chrome will\n // close tabs without firing visibilitychange. beforeunload on the other hand\n // is fired.\n addEventListener(win, \"beforeunload\", function () {\n isUnloading = true;\n fn();\n });\n}\n","import { onLastChance } from \"../utils/on-last-chance\";\nimport { doc } from \"../utils\";\nimport { setTimeout } from \"../utils/timers\";\nconst SCHEDULE_DELAY_MILLIS = 1000;\nconst MAX_QUEUE_SIZE = 15;\nexport function newBatcher(sendInternal) {\n const queuedItems = [];\n let pendingFlushTimeout;\n // We attempt batching of messages to be more efficient on the client, network and\n // server-side. While the connection is either a persistent HTTP 2 connection or\n // an HTTP 1.1 connection with keep-alive, there is still some overhead involved\n // in having many small messages.\n //\n // For this reason we attempt batching. When batching we must be careful to\n // force a transmission when the document is unloaded.\n onLastChance(flush);\n return {\n send(item) {\n if (isWindowHidden()) {\n // We cannot guarantee that we will ever get time to transmit data in a batched\n // format when the window is hidden, as this might occur while the document is\n // being unloaded. Immediately force a transmission in these cases.\n sendInternal([item]);\n return;\n }\n queuedItems.push(item);\n if (queuedItems.length >= MAX_QUEUE_SIZE) {\n flush();\n }\n else if (pendingFlushTimeout == null) {\n pendingFlushTimeout = setTimeout(flush, SCHEDULE_DELAY_MILLIS);\n }\n },\n };\n function flush() {\n if (pendingFlushTimeout != null) {\n clearTimeout(pendingFlushTimeout);\n pendingFlushTimeout = null;\n }\n if (queuedItems.length > 0) {\n sendInternal(queuedItems.slice());\n queuedItems.length = 0;\n }\n }\n}\nfunction isWindowHidden() {\n return doc?.visibilityState !== \"visible\";\n}\n","import { vars } from \"../vars\";\nimport { noop, warn, fetch, debug } from \"../utils\";\n// The bacon api enforces a size limit across all pending beacon requests per fetch group\n// There also seems to be a limit of 15 pending requests at the same time\n// See: https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch subpoint 10\n// See: https://github.com/getsentry/sentry-javascript/pull/7553\nconst BEACON_BODY_SIZE_LIMIT = 60000;\nlet pendingBodySize = 0;\nlet pendingRequestCount = 0;\nexport async function send(path, body) {\n debug(\"Transmitting telemetry to endpoints\", body);\n const jsonString = JSON.stringify(body);\n let requestBody = jsonString;\n let byteLength = new Blob([jsonString]).size;\n let isCompressed = false;\n // Try to compress if supported\n if (typeof CompressionStream !== \"undefined\" && vars.enableTransportCompression) {\n requestBody = await compressWithGzip(jsonString);\n byteLength = requestBody.byteLength;\n isCompressed = true;\n }\n // Send to all endpoints in parallel\n await Promise.all(vars.endpoints.map(async (endpoint) => {\n try {\n const url = new URL(endpoint[\"url\"]);\n url.pathname = url.pathname + (url.pathname.endsWith(\"/\") ? path.substring(1) : path);\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${endpoint[\"authToken\"]}`,\n };\n if (endpoint.dataset) {\n headers[\"Dash0-Dataset\"] = endpoint[\"dataset\"];\n }\n // Try to compress if supported\n if (isCompressed) {\n headers[\"Content-Encoding\"] = \"gzip\";\n }\n if (!fetch) {\n warn(\"Unable to send telemetry, fetch is not defined\");\n return;\n }\n pendingBodySize += byteLength;\n pendingRequestCount++;\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: requestBody,\n // The keepalive flag is related to the window.sendBeacon API. This in turn has size limitations.\n keepalive: pendingBodySize <= BEACON_BODY_SIZE_LIMIT && pendingRequestCount <= 15,\n });\n // read the body so the connection can be closed\n response.text().catch(noop);\n if (!response.ok) {\n warn(`Failed to send telemetry to ${url}: ${response.status} ${response.statusText}`);\n }\n }\n catch (error) {\n warn(`Error sending telemetry to ${endpoint.url}${path}:`, error);\n }\n finally {\n pendingBodySize -= byteLength;\n pendingRequestCount--;\n }\n }));\n}\nasync function compressWithGzip(data) {\n const blob = new Blob([data]);\n const stream = blob.stream();\n const compressedStream = stream.pipeThrough(new CompressionStream(\"gzip\"));\n return new Response(compressedStream).arrayBuffer();\n}\n","import { newBatcher } from \"./batcher\";\nimport { send } from \"./fetch\";\nimport { vars } from \"../vars\";\nimport { debug, error, createRateLimiter } from \"../utils\";\nconst logBatcher = newBatcher(sendLogs);\nconst spanBatcher = newBatcher(sendSpans);\nlet rateLimiter;\nfunction isRateLimited() {\n if (!rateLimiter) {\n rateLimiter = createRateLimiter({\n maxCallsPerTenMinutes: 4096,\n maxCallsPerTenSeconds: 128,\n });\n }\n return rateLimiter();\n}\nexport function sendLog(log) {\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", log);\n return;\n }\n logBatcher.send(log);\n}\nfunction sendLogs(logs) {\n send(\"/v1/logs\", {\n resourceLogs: [\n {\n resource: vars.resource,\n scopeLogs: [\n {\n scope: vars.scope,\n logRecords: logs,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit logs\", err);\n });\n}\nexport function sendSpan(span) {\n if (!span)\n return;\n if (isRateLimited()) {\n debug(\"Transport rate limit. Will not send item.\", span);\n return;\n }\n spanBatcher.send(span);\n}\nfunction sendSpans(spans) {\n send(\"/v1/traces\", {\n resourceSpans: [\n {\n resource: vars.resource,\n scopeSpans: [\n {\n scope: vars.scope,\n spans: spans,\n },\n ],\n },\n ],\n }).catch((err) => {\n error(\"Failed to transmit spans\", err);\n });\n}\n","import { setInterval } from \"./timers\";\nexport function createRateLimiter(opts) {\n const maxCallsPerTenMinutes = opts.maxCallsPerTenMinutes || 128;\n const maxCallsPerTenSeconds = opts.maxCallsPerTenSeconds || 32;\n let totalCallsInLastTenMinutes = 0;\n let totalCallsInLastTenSeconds = 0;\n setInterval(function () {\n totalCallsInLastTenMinutes = 0;\n }, 1000 * 60 * 10);\n setInterval(function () {\n totalCallsInLastTenSeconds = 0;\n }, 1000 * 10);\n return function isExcessiveUsage() {\n return ++totalCallsInLastTenMinutes > maxCallsPerTenMinutes || ++totalCallsInLastTenSeconds > maxCallsPerTenSeconds;\n };\n}\n","const ANY_VALUE_KEYS = [\n \"stringValue\",\n \"boolValue\",\n \"intValue\",\n \"doubleValue\",\n \"arrayValue\",\n \"kvlistValue\",\n \"bytesValue\",\n];\nfunction isAnyValue(value) {\n if (value == null || typeof value !== \"object\")\n return false;\n const keys = Object.keys(value);\n return keys.length === 1 && ANY_VALUE_KEYS.includes(keys[0]);\n}\nexport function toAnyValue(value) {\n if (value == null) {\n return undefined;\n }\n let anyValue = {};\n if (Array.isArray(value)) {\n anyValue[\"arrayValue\"] = { values: value.map((e) => toAnyValue(e)) };\n }\n else if (typeof value === \"string\") {\n anyValue[\"stringValue\"] = value;\n }\n else if (typeof value === \"number\") {\n anyValue[\"doubleValue\"] = value;\n }\n else if (typeof value === \"boolean\") {\n anyValue[\"boolValue\"] = value;\n }\n else if (isAnyValue(value)) {\n anyValue = value;\n }\n else if (typeof value === \"object\") {\n anyValue[\"kvlistValue\"] = { values: Object.entries(value).map(([key, value]) => toKeyValue(key, value)) };\n }\n return anyValue;\n}\nexport function toKeyValue(key, value) {\n return {\n key: key,\n value: toAnyValue(value),\n };\n}\n/**\n * Adds a single attribute to the provided attributes array\n */\nexport function addAttribute(attributes, key, value) {\n if (!key)\n return;\n attributes.push(toKeyValue(key, value));\n}\n/**\n * Adds multiple attributes to the provided attributes array\n */\nexport function addAttributes(\n/**\n * The attributes array to add to\n */\nattributes, \n/**\n * Additional attributes to add\n * If no attributes are provided, nothing is added\n */\nattrs) {\n if (!attrs)\n return;\n Object.entries(attrs).forEach(([key, value]) => addAttribute(attributes, key, value));\n}\n/**\n * Removes an attribute from the provided attributes array by its key\n */\nexport function removeAttribute(attributes, key) {\n const index = attributes.findIndex((attr) => attr[\"key\"] === key);\n if (index !== -1) {\n attributes.splice(index, 1);\n }\n}\nexport function withPrefix(prefix) {\n if (!prefix)\n return (attr) => attr;\n if (Array.isArray(prefix)) {\n return (attr) => [...prefix, attr].join(\".\");\n }\n return (attr) => `${prefix}.${attr}`;\n}\n","import { doc } from \"../globals\";\nimport { perf } from \"../globals\";\nconst TRACE_PARENT_HEADER = \"traceparent\";\n/**\n * See https://www.w3.org/TR/trace-context/#traceparent-header\n */\nconst w3cTraceparentFormat = /^00-([a-f0-9]{32})-([a-f0-9]{16})-[0-9]{1,2}$/;\nexport function getTraceContextForPageLoad() {\n const match = getTraceparentFromMetaElement().match(w3cTraceparentFormat) ||\n getTraceparentFromNavigationTiming().match(w3cTraceparentFormat);\n if (match) {\n return {\n traceId: match[1],\n spanId: match[2],\n };\n }\n return undefined;\n}\nfunction getTraceparentFromMetaElement() {\n return (Array.from(doc?.getElementsByTagName(\"meta\") ?? [])\n .find((e) => e.getAttribute(\"name\")?.toLowerCase() === TRACE_PARENT_HEADER)\n ?.content.trim() || \"\");\n}\nfunction getTraceparentFromNavigationTiming() {\n const nt = perf.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n return \"\";\n }\n if (!nt.serverTiming) {\n return \"\";\n }\n return getTraceparentFromServerTiming(nt.serverTiming);\n}\nfunction getTraceparentFromServerTiming(serverTimings) {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === TRACE_PARENT_HEADER) {\n return serverEntry.description.trim();\n }\n }\n return \"\";\n}\nexport function addW3CTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * W3C Traceparent header.\n * General format is ${version}-${trace-id}-${parent-id}-${trace-flags}\n *\n * The only spec'd version is currently 00\n * Trace flags are an 8 bit field of bit flags:\n * Sampled: 00000001 - Should only be set if a definite decision to record the trace was made.\n * If set downstream processors should also record the trace\n * Random Trace ID: 00000010 - IF set the component guarantees that the seven right most bytes of the trace-id\n * are randomly generated. Downstream processors are then able to rely on this for technical things like shard keys.\n *\n * NOTE: For now we just send the \"sampled\" flag because not all components support the random trace ID flag.\n *\n * References:\n * https://www.w3.org/TR/trace-context-2/#traceparent-header\n * https://www.w3.org/TR/trace-context-2/#trace-flags\n * https://www.w3.org/TR/trace-context-2/#random-trace-id-flag\n */\n fn.call(ctx, \"traceparent\", `00-${span.traceId}-${span.spanId}-01`);\n}\nexport function addXRayTraceContextHttpHeaders(fn, ctx, span) {\n /**\n * AWS X-Ray trace header.\n * General format is Root=${trace-id};Parent=${span-id};Sampled=${sampling-flag}\n *\n * Converts W3C trace ID format to X-Ray format:\n * W3C: 4efaaf4d1e8720b39541901950019ee5 (32 hex chars)\n * X-Ray: 1-4efaaf4d-1e8720b39541901950019ee5 (1-{8chars}-{24chars})\n *\n * References:\n * https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader\n */\n const xrayTraceId = convertW3CTraceIdToXRay(span.traceId);\n const xrayHeader = `Root=${xrayTraceId};Parent=${span.spanId};Sampled=1`;\n fn.call(ctx, \"X-Amzn-Trace-Id\", xrayHeader);\n}\nfunction convertW3CTraceIdToXRay(w3cTraceId) {\n // X-Ray trace ID format: 1-{timestamp}-{unique-id}\n // Split the 32-char W3C trace ID into 8-char timestamp and 24-char unique ID\n const timestamp = w3cTraceId.substring(0, 8);\n const uniqueId = w3cTraceId.substring(8, 32);\n return `1-${timestamp}-${uniqueId}`;\n}\n","import { generateUniqueId, SESSION_ID_BYTES, TRACE_ID_BYTES } from \"./id\";\nconst TRACE_ID_PREFIX = \"d042\";\nconst TRACE_FLAGS = {\n WITHOUT_SESSION: 0x01, // 00000001 - in some edge cases we do not have a session ID, so we need to mark the trace as such\n};\nfunction encodeTraceFlags(flags) {\n let byte = 0;\n if (flags.withoutSession) {\n byte |= TRACE_FLAGS.WITHOUT_SESSION;\n }\n return byte.toString(16).padStart(2, \"0\");\n}\nexport function generateTraceId(sessionId) {\n if (!sessionId) {\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: true })}${generateUniqueId(TRACE_ID_BYTES - 3)}`;\n }\n return `${TRACE_ID_PREFIX}${encodeTraceFlags({ withoutSession: false })}${sessionId}${generateUniqueId(TRACE_ID_BYTES - SESSION_ID_BYTES - 3)}`;\n}\n","const POLYNOMIAL = 0xedb88320; // This is the standard polynomial used in IEEE 802.3 and must be in sync with the one we are using in the backend.\nconst TABLE = new Uint32Array(256);\nfor (let i = 0; i < 256; i++) {\n let c = i;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? POLYNOMIAL ^ (c >>> 1) : c >>> 1;\n }\n TABLE[i] = c >>> 0;\n}\nexport function crc32(hexStr) {\n const bytes = new Uint8Array(hexStr.length / 2);\n for (let i = 0; i < hexStr.length; i += 2) {\n bytes[i / 2] = parseInt(hexStr.substring(i, i + 2), 16);\n }\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n crc = (crc >>> 8) ^ TABLE[(crc ^ byte) & 0xff];\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n","import { generateUniqueId, SPAN_ID_BYTES } from \"./id\";\nimport { crc32 } from \"./crc32\";\nexport function generateSpanId(traceId) {\n const checksum = crc32(traceId);\n const prefix = checksum.toString(16).padStart(8, \"0\");\n return `${prefix}${generateUniqueId(SPAN_ID_BYTES - 4)}`;\n}\n","import { nowNanos } from \"../time\";\nimport { SPAN_KIND_CLIENT, SPAN_STATUS_UNSET, WEB_EVENT_ID } from \"../../semantic-conventions\";\nimport { sessionId } from \"../../api/session\";\nimport { generateTraceId } from \"../trace-id\";\nimport { generateSpanId } from \"../span-id\";\nimport { addAttribute } from \"./attributes\";\nimport { debug } from \"../debug\";\nexport function startSpan(name) {\n const traceId = generateTraceId(sessionId);\n const spanId = generateSpanId(traceId);\n const attributes = [];\n addAttribute(attributes, WEB_EVENT_ID, spanId);\n return {\n traceId,\n spanId,\n name,\n // Always CLIENT for now https://github.com/open-telemetry/opentelemetry-proto/blob/ac3242b03157295e4ee9e616af53b81517b06559/opentelemetry/proto/trace/v1/trace.proto#L143-L169\n // Note: we directly define otlp here, this differs from the values used by oteljs internally.\n kind: SPAN_KIND_CLIENT,\n startTimeUnixNano: nowNanos(),\n attributes,\n events: [],\n links: [],\n status: { code: SPAN_STATUS_UNSET },\n };\n}\n/**\n * Ends the span by setting status and endTimeUnixNano on it. If the spand was already previously ended, this returns undefined\n * to prevent the span from being ended multiple times on accident.\n */\nexport function endSpan(span, status, durationNano) {\n // We cast here to avoid having to instantiate a copy of the span\n const s = span;\n if (s.endTimeUnixNano) {\n debug(\"Attempting to end already ended span. Dropping...\", s);\n return undefined;\n }\n if (status) {\n s.status = status;\n }\n s.endTimeUnixNano =\n durationNano != null ? String(Math.round(parseInt(s.startTimeUnixNano) + durationNano)) : nowNanos();\n return s;\n}\n/**\n * Adds an event to a span. Can optionally accept the events timestamp and attributes for the event.\n * The timestamp needs to be specified as nanoseconds since unix epoch in string format.\n */\nexport function addSpanEvent(span, name, attributesOrTs, attributes) {\n let ts = undefined;\n let attr = undefined;\n if (typeof attributesOrTs === \"string\") {\n ts = attributesOrTs;\n }\n else if (Array.isArray(attributesOrTs)) {\n attr = attributesOrTs;\n }\n if (attributes) {\n attr = attributes;\n }\n span.events.push({\n name,\n timeUnixNano: ts != null ? ts : nowNanos(),\n attributes: attr ?? [],\n });\n}\nexport function setSpanStatus(span, code, message) {\n span.status = {\n code,\n message,\n };\n}\n","import { addAttribute, withPrefix } from \"../utils/otel\";\nimport { URL_DOMAIN, URL_FRAGMENT, URL_FULL, URL_PATH, URL_QUERY, URL_SCHEME } from \"../semantic-conventions\";\nimport { identity, parseUrl } from \"../utils\";\nimport { vars } from \"../vars\";\nexport function addUrlAttributes(attributes, url, prefix) {\n const applyPrefix = withPrefix(prefix);\n try {\n const parsed = parseUrl(url);\n if (parsed.username)\n parsed.username = \"REDACTED\";\n if (parsed.password)\n parsed.password = \"REDACTED\";\n const attrs = vars.urlAttributeScrubber({\n [URL_FULL]: parsed.href,\n [URL_PATH]: parsed.pathname,\n [URL_DOMAIN]: parsed.hostname,\n [URL_SCHEME]: parsed.protocol.replace(\":\", \"\"),\n [URL_FRAGMENT]: parsed.hash ? parsed.hash.replace(\"#\", \"\") : undefined,\n [URL_QUERY]: parsed.search ? parsed.search.replace(\"?\", \"\") : undefined,\n });\n Object.entries(attrs).forEach(([key, value]) => {\n if (value !== undefined) {\n addAttribute(attributes, applyPrefix(key), value);\n }\n });\n }\n catch (_e) {\n // This is fallback handling in case the url failed to parse or the user defined attribute scrubber behaved unexpectedly\n // If the user did not attempt scrubbing we'll supply the full url for debugging purposes, otherwise we drop all url\n // attributes\n if (vars.urlAttributeScrubber === identity) {\n // `identity` is the default assignment for this option\n addAttribute(attributes, applyPrefix(URL_FULL), String(url));\n }\n }\n}\n","// sessionStorage API re-exposed to allow testing.\nimport { sessionStorage } from \"./globals\";\nexport const isSupported = sessionStorage != null &&\n typeof sessionStorage.getItem === \"function\" &&\n typeof sessionStorage.setItem === \"function\";\nexport function getItem(k) {\n if (isSupported && sessionStorage) {\n return sessionStorage.getItem(k);\n }\n return null;\n}\nexport function setItem(k, v) {\n if (isSupported && sessionStorage) {\n sessionStorage.setItem(k, v);\n }\n}\nexport function removeItem(k) {\n if (isSupported && sessionStorage) {\n sessionStorage.removeItem(k);\n }\n}\n","import { getItem, isSupported, setItem } from \"./session-storage\";\nimport { debug, warn } from \"./debug\";\nimport { generateUniqueId, TAB_ID_BYTES } from \"./id\";\nconst TAB_ID_STORAGE_KEY = \"d0_tab\";\nexport let tabId = null;\n/**\n * We want to be able to identify what browser tab the user is looking at. We do this by identifying tabs through\n * random-generated IDs that are kept in session storage. To quote MDN:\n *\n * > sessionStorage is partitioned by both origin and browser tabs (top-level browsing contexts)\n */\nexport function initializeTabId() {\n if (!isSupported) {\n debug(\"Storage API is not available and tab tracking is therefore not supported.\");\n return;\n }\n try {\n const storedValue = getItem(TAB_ID_STORAGE_KEY);\n if (storedValue) {\n tabId = storedValue;\n return;\n }\n tabId = generateUniqueId(TAB_ID_BYTES);\n setItem(TAB_ID_STORAGE_KEY, tabId);\n }\n catch (e) {\n warn(\"Failed to record tab ID information\", e);\n }\n}\n","import { generateUniqueId, nav, NO_VALUE_FALLBACK, WEB_EVENT_ID_BYTES, win } from \"../utils\";\nimport { BROWSER_TAB_ID, NETWORK_CONNECTION_TYPE, PAGE_URL_ATTR_PREFIX, SESSION_ID, WEB_EVENT_ID, WINDOW_HEIGHT, WINDOW_WIDTH, } from \"../semantic-conventions\";\nimport { sessionId } from \"../api/session\";\nimport { vars } from \"../vars\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addUrlAttributes } from \"./url\";\nimport { tabId } from \"../utils/tab-id\";\nexport function addCommonAttributes(attributes, options) {\n if (attributes.find((attribute) => attribute.key === WEB_EVENT_ID) === undefined) {\n addAttribute(attributes, WEB_EVENT_ID, generateUniqueId(WEB_EVENT_ID_BYTES));\n }\n for (let i = 0; i < vars.signalAttributes.length; i++) {\n attributes.push(vars.signalAttributes[i]);\n }\n addUrlAttributes(attributes, options?.url ?? win?.location.href ?? NO_VALUE_FALLBACK, PAGE_URL_ATTR_PREFIX);\n if (sessionId) {\n addAttribute(attributes, SESSION_ID, sessionId);\n }\n if (tabId) {\n addAttribute(attributes, BROWSER_TAB_ID, tabId);\n }\n addAttribute(attributes, WINDOW_WIDTH, win?.innerWidth ?? NO_VALUE_FALLBACK);\n addAttribute(attributes, WINDOW_HEIGHT, win?.innerHeight ?? NO_VALUE_FALLBACK);\n // @ts-expect-error -- TypeScript is not aware of navigator.connection.effectiveType\n const connectionType = nav?.connection?.effectiveType;\n if (connectionType) {\n addAttribute(attributes, NETWORK_CONNECTION_TYPE, connectionType);\n }\n}\n","import { onLCP, onINP, onCLS } from \"web-vitals\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { nowNanos, roundToTwoDecimals } from \"../utils\";\nimport { sendLog } from \"../transport\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addCommonAttributes } from \"../attributes\";\nexport function startWebVitalsInstrumentation() {\n onLCP(onWebVital, { reportAllChanges: true });\n onINP(onWebVital, { reportAllChanges: true });\n onCLS(onWebVital, { reportAllChanges: true });\n}\nfunction onWebVital(metric) {\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.WEB_VITAL);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", metric.name);\n addAttribute(bodyAttributes, \"value\", roundToTwoDecimals(metric.value));\n addAttribute(bodyAttributes, \"delta\", roundToTwoDecimals(metric.delta));\n const log = {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n sendLog(log);\n}\n","import { vars } from \"../vars\";\nexport function matchesAny(regexp, s) {\n for (let i = 0, len = regexp.length; i < len; i++) {\n if (regexp[i].test(s)) {\n return true;\n }\n }\n return false;\n}\nconst DATA_URL_PREFIX = \"data:\";\nexport function isUrlIgnored(url) {\n if (!url) {\n return true;\n }\n // Force string conversion. During runtime we have seen that some URLs passed into this code path aren't actually\n // strings. Reason currently unknown.\n url = String(url);\n if (!url) {\n return true;\n }\n // We never want to track data URLs. Instead of matching these via regular expressions (which might be expensive),\n // we are explicitly doing a startsWith ignore case check\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n if (url.substring == null || url.substring(0, DATA_URL_PREFIX.length).toLowerCase() === DATA_URL_PREFIX) {\n return true;\n }\n // Disable monitoring of data transmission requests. The data transmission strategy already ensures\n // that data transmission requests are not picked up internally. However, we have seen some users\n // leverage custom (broken) XMLHttpRequest instrumentation to implement application code which\n // then break the detection of data transmission requests.\n if (isTransportRequest(url)) {\n return true;\n }\n return matchesAny(vars.ignoreUrls, url);\n}\nfunction isTransportRequest(url) {\n const lowerCaseUrl = url.toLowerCase();\n for (let i = 0, len = vars.endpoints.length; i < len; i++) {\n const endpoint = vars.endpoints[i];\n if (lowerCaseUrl.startsWith(endpoint.url)) {\n return true;\n }\n }\n return false;\n}\nexport function isErrorMessageIgnored(message) {\n return !message || matchesAny(vars.ignoreErrorMessages, message);\n}\n","import { hasOwnProperty, nowNanos, win } from \"../../utils\";\nimport { isErrorMessageIgnored } from \"../../utils/ignore-rules\";\nimport { sendLog } from \"../../transport\";\nimport { EVENT_NAME, EVENT_NAMES, EXCEPTION_COMPONENT_STACK, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, LOG_SEVERITIES, } from \"../../semantic-conventions\";\nimport { addAttribute, addAttributes } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nconst MAX_ERRORS_TO_REPORT = 100;\nconst MAX_STACK_SIZE = 30;\nconst MAX_NUMBER_OF_TRACKED_ERRORS = 20;\nlet reportedErrors = 0;\nlet numberOfDifferentErrorsSeen = 0;\nlet seenErrors = {};\nlet scheduledTransmissionTimeoutHandle;\n// We are wrapping global listeners. In these, we are catching and rethrowing errors.\n// In older browsers, rethrowing errors actually manipulates the error objects. As a\n// result, it is not possible to just mark an error as reported. The simplest way to\n// avoid double reporting is to temporarily disable the global onError handler…\nlet ignoreNextOnError = false;\nexport function ignoreNextOnErrorEvent() {\n ignoreNextOnError = true;\n}\nexport function startOnErrorInstrumentation() {\n if (!win)\n return;\n const globalOnError = win.onerror;\n win.onerror = function (message, fileName, lineNumber, columnNumber, error) {\n if (ignoreNextOnError) {\n ignoreNextOnError = false;\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n return;\n }\n let stack = error && error.stack;\n if (!stack) {\n stack = \"at \" + fileName + \" \" + lineNumber;\n if (columnNumber != null) {\n stack += \":\" + columnNumber;\n }\n }\n onUnhandledError({ message: String(message), stack });\n if (typeof globalOnError === \"function\") {\n return globalOnError.apply(this, arguments);\n }\n };\n}\nexport function reportUnhandledError(error, opts) {\n if (!error) {\n return;\n }\n if (typeof error === \"string\") {\n onUnhandledError({ message: error, opts });\n }\n else {\n onUnhandledError({ message: error.message, type: error.name, stack: error.stack, opts });\n }\n}\nfunction onUnhandledError({ message, type, stack, opts }) {\n if (!message || reportedErrors > MAX_ERRORS_TO_REPORT) {\n return;\n }\n if (isErrorMessageIgnored(message)) {\n return;\n }\n if (numberOfDifferentErrorsSeen >= MAX_NUMBER_OF_TRACKED_ERRORS) {\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n }\n message = String(message).substring(0, 300);\n stack = shortenStackTrace(stack);\n const location = win?.location.href;\n const key = message + stack + location;\n let trackedError = seenErrors[key];\n if (trackedError) {\n trackedError.seenCount++;\n }\n else {\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.ERROR);\n addAttribute(attributes, EXCEPTION_MESSAGE, message);\n if (type) {\n addAttribute(attributes, EXCEPTION_TYPE, type);\n }\n if (stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, stack);\n }\n if (opts?.componentStack) {\n addAttribute(attributes, EXCEPTION_COMPONENT_STACK, opts?.componentStack.substring(0, 2048));\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n trackedError = {\n seenCount: 1,\n transmittedCount: 0,\n log: {\n timeUnixNano: nowNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.ERROR,\n severityText: \"ERROR\",\n body: {\n stringValue: message,\n },\n },\n };\n seenErrors[key] = trackedError;\n numberOfDifferentErrorsSeen++;\n }\n scheduleTransmission();\n}\nexport function shortenStackTrace(stack) {\n return String(stack || \"\")\n .split(\"\\n\")\n .slice(0, MAX_STACK_SIZE)\n .join(\"\\n\");\n}\nfunction scheduleTransmission() {\n if (scheduledTransmissionTimeoutHandle) {\n return;\n }\n scheduledTransmissionTimeoutHandle = setTimeout(send, 1000);\n}\nfunction send() {\n if (scheduledTransmissionTimeoutHandle) {\n clearTimeout(scheduledTransmissionTimeoutHandle);\n scheduledTransmissionTimeoutHandle = null;\n }\n for (const key in seenErrors) {\n if (hasOwnProperty(seenErrors, key)) {\n const seenError = seenErrors[key];\n if (seenError.seenCount > seenError.transmittedCount) {\n sendLog(seenError.log);\n reportedErrors++;\n }\n }\n }\n seenErrors = {};\n numberOfDifferentErrorsSeen = 0;\n}\n","import { win } from \"../../utils\";\nimport { reportUnhandledError } from \"./unhandled-error\";\nconst MESSAGE_PREFIX = \"Unhandled promise rejection: \";\nconst STACK_UNAVAILABLE_MESSAGE = \"<unavailable because Promise wasn't rejected with an Error object>\";\nexport function startUnhandledRejectionInstrumentation() {\n if (typeof win?.addEventListener === \"function\") {\n win.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n }\n}\nexport function onUnhandledRejection(event) {\n if (event.reason == null) {\n reportUnhandledError({\n message: MESSAGE_PREFIX + \"<no reason defined>\",\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason.message === \"string\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason.message,\n stack: typeof event.reason.stack === \"string\" ? event.reason.stack : STACK_UNAVAILABLE_MESSAGE,\n });\n }\n else if (typeof event.reason !== \"object\") {\n reportUnhandledError({\n message: MESSAGE_PREFIX + event.reason,\n stack: STACK_UNAVAILABLE_MESSAGE,\n });\n }\n}\n","const WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY = \"__dash0OriginalFunctions\";\n// Asynchronous function wrapping: The process of wrapping a listener which goes into one function, e.g.\n//\n// - EventTarget#addEventListener\n// - EventEmitter#on\n//\n// and is removed via another function, e.g.\n//\n// - EventTarget#removeEventListener\n// - EventEmitter#off\n//\n// What is complicated about this, is that these methods identify registered listeners by function reference.\n// When we wrap a function, we naturally change the reference. We must therefore keep track of which\n// original function belongs to what wrapped function.\n//\n// This file provides helpers that help in the typical cases. It is removed from all browser specific APIs\n// in order to allow simple unit test execution.\n//\n// Note that this file follows the behavior outlined in DOM specification. Among others, this means that it is not\n// possible to register the same listener twice.\n// http://dom.spec.whatwg.org\nexport function addWrappedFunction(storageTarget, wrappedFunction, valuesForEqualityCheck) {\n if (!storageTarget)\n return wrappedFunction;\n const storage = (storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] =\n storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY] || []);\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index !== -1) {\n // already registered. Do not allow re-registration\n return storage[index].wrappedFunction;\n }\n storage.push({\n wrappedFunction,\n valuesForEqualityCheck,\n });\n return wrappedFunction;\n}\nfunction findInStorage(storageTarget, valuesForEqualityCheck) {\n const storage = storageTarget[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n for (let i = 0; i < storage.length; i++) {\n const storageItem = storage[i];\n if (matchesEqualityCheck(storageItem.valuesForEqualityCheck, valuesForEqualityCheck)) {\n return i;\n }\n }\n return -1;\n}\nexport function popWrappedFunction(storageTarget, valuesForEqualityCheck, fallback) {\n const storage = storageTarget?.[WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY];\n if (storage == null) {\n return fallback;\n }\n const index = findInStorage(storageTarget, valuesForEqualityCheck);\n if (index === -1) {\n return fallback;\n }\n const storageItem = storage[index];\n storage.splice(index, 1);\n return storageItem.wrappedFunction;\n}\nfunction matchesEqualityCheck(valuesForEqualityCheckA, valuesForEqualityCheckB) {\n if (valuesForEqualityCheckA.length !== valuesForEqualityCheckB.length) {\n return false;\n }\n for (let i = 0; i < valuesForEqualityCheckA.length; i++) {\n if (valuesForEqualityCheckA[i] !== valuesForEqualityCheckB[i]) {\n return false;\n }\n }\n return true;\n}\nexport function addWrappedDomEventListener(storageTarget, wrappedFunction, eventName, eventListener, optionsOrCapture) {\n return addWrappedFunction(storageTarget, wrappedFunction, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture));\n}\nfunction getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture) {\n return [eventName, eventListener, getDomEventListenerCaptureValue(optionsOrCapture)];\n}\nexport function getDomEventListenerCaptureValue(optionsOrCapture) {\n // > Let capture, passive, and once be the result of flattening more options.\n // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n //\n // > To flatten more options, run these steps:\n // > 1. Let capture be the result of flattening options.\n // https://dom.spec.whatwg.org/#event-flatten-more\n //\n // > To flatten options, run these steps:\n // > 1. If options is a boolean, then return options.\n // > 2. Return options’s capture.\n // https://dom.spec.whatwg.org/#concept-flatten-options\n //\n // > dictionary EventListenerOptions {\n // > boolean capture = false;\n // > };\n // https://dom.spec.whatwg.org/#dom-eventlisteneroptions-capture\n if (optionsOrCapture == null) {\n return false;\n }\n else if (typeof optionsOrCapture === \"object\") {\n return Boolean(optionsOrCapture.capture);\n }\n return Boolean(optionsOrCapture);\n}\nexport function popWrappedDomEventListener(storageTarget, eventName, eventListener, optionsOrCapture, fallback) {\n return popWrappedFunction(storageTarget, getDomEventListenerValuesForEqualityCheck(eventName, eventListener, optionsOrCapture), fallback);\n}\n","import { vars } from \"../../vars\";\nimport { win } from \"../../utils\";\nimport { addWrappedDomEventListener, popWrappedDomEventListener, } from \"./async-function-wrapping\";\nimport { ignoreNextOnErrorEvent, reportUnhandledError } from \"./unhandled-error\";\nexport function startEventHandlerInstrumentation() {\n if (vars.wrapEventHandlers) {\n wrapEventTarget(win?.EventTarget);\n }\n}\nfunction wrapEventTarget(EventTarget) {\n if (!EventTarget ||\n typeof EventTarget.prototype.addEventListener !== \"function\" ||\n typeof EventTarget.prototype.removeEventListener !== \"function\") {\n return;\n }\n const originalAddEventListener = EventTarget.prototype.addEventListener;\n const originalRemoveEventListener = EventTarget.prototype.removeEventListener;\n EventTarget.prototype.addEventListener = function wrappedAddEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalAddEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = function wrappedEventListener() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportUnhandledError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n args[1] = addWrappedDomEventListener(this, args[1], eventName, fn, optionsOrCapture);\n return originalAddEventListener.apply(this, args);\n };\n EventTarget.prototype.removeEventListener = function wrappedRemoveEventListener(eventName, fn, optionsOrCapture) {\n if (typeof fn !== \"function\") {\n return originalRemoveEventListener.apply(this, arguments);\n }\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[1] = popWrappedDomEventListener(this, eventName, fn, optionsOrCapture, fn);\n return originalRemoveEventListener.apply(this, args);\n };\n}\n","import { vars } from \"../../vars\";\nimport { isRunningZoneJs } from \"../../utils/timers\";\nimport { warn, win } from \"../../utils\";\nimport { ignoreNextOnErrorEvent } from \"./unhandled-error\";\nexport function startTimerInstrumentation() {\n if (vars.wrapTimers) {\n if (isRunningZoneJs) {\n warn(\"We discovered a usage of Zone.js. In order to avoid any incompatibility issues timer wrapping is not going to be enabled.\");\n return;\n }\n wrapTimer(\"setTimeout\");\n wrapTimer(\"setInterval\");\n }\n}\nfunction wrapTimer(name) {\n const original = win?.[name];\n if (typeof original !== \"function\") {\n // cannot wrap because fn is not a function – should actually never happen\n return;\n }\n win[name] = function wrappedTimerSetter(fn) {\n // non-deopt arguments copy\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n args[0] = wrap(fn);\n return original.apply(this, args);\n };\n}\nfunction wrap(fn) {\n if (typeof fn !== \"function\") {\n // cannot wrap because fn is not a function\n return fn;\n }\n return function wrappedTimerHandler() {\n try {\n return fn.apply(this, arguments);\n }\n catch (e) {\n reportError(e);\n ignoreNextOnErrorEvent();\n throw e;\n }\n };\n}\n","import { startOnErrorInstrumentation } from \"./unhandled-error\";\nimport { startUnhandledRejectionInstrumentation } from \"./unhandled-promise-rejection\";\nimport { startEventHandlerInstrumentation } from \"./event-handlers\";\nimport { startTimerInstrumentation } from \"./timers\";\nexport function startErrorInstrumentation() {\n startOnErrorInstrumentation();\n startUnhandledRejectionInstrumentation();\n startEventHandlerInstrumentation();\n startTimerInstrumentation();\n}\n","import { addAttribute, addSpanEvent } from \"../../utils/otel\";\nimport { domHRTimestampToNanos, hasKey, PerformanceTimingNames } from \"../../utils\";\nimport { HTTP_RESPONSE_BODY_SIZE } from \"../../semantic-conventions\";\n// SEE: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/attributes-registry/http.md?plain=1#L67\nconst KNOWN_HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"CONNECT\", \"OPTIONS\", \"TRACE\", \"PATCH\"];\nexport const HTTP_METHOD_OTHER = \"_OTHER\";\nexport function isWellKnownHttpMethod(method) {\n return KNOWN_HTTP_METHODS.includes(method);\n}\nexport function addResourceNetworkEvents(span, resource) {\n const ignoreZeros = resource.startTime !== 0;\n addSpanNetworkEvent(span, PerformanceTimingNames.FETCH_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.DOMAIN_LOOKUP_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.SECURE_CONNECTION_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.CONNECT_END, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.REQUEST_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_START, resource, ignoreZeros);\n addSpanNetworkEvent(span, PerformanceTimingNames.RESPONSE_END, resource, ignoreZeros);\n}\nfunction addSpanNetworkEvent(span, propertyName, resource, ignoreZeros = true) {\n if (!hasKey(resource, propertyName) ||\n typeof resource[propertyName] !== \"number\" ||\n (ignoreZeros && resource[propertyName] === 0)) {\n return;\n }\n addSpanEvent(span, propertyName, domHRTimestampToNanos(resource[propertyName]));\n}\nexport function addResourceSize(span, resource) {\n const encodedLength = resource.encodedBodySize;\n if (encodedLength != undefined) {\n addAttribute(span.attributes, HTTP_RESPONSE_BODY_SIZE, encodedLength);\n }\n}\n","import { debug, observeResourcePerformance, perf, win, setTimeout, isSameOrigin, wrap, parseUrl, clearTimeout, } from \"../../utils\";\nimport { isUrlIgnored, matchesAny } from \"../../utils/ignore-rules\";\nimport { addAttribute, setSpanStatus, addW3CTraceContextHttpHeaders, addXRayTraceContextHttpHeaders, endSpan, errorToSpanStatus, recordException, startSpan, } from \"../../utils/otel\";\nimport { ERROR_TYPE, HTTP_REQUEST_METHOD, HTTP_REQUEST_METHOD_ORIGINAL, HTTP_RESPONSE_STATUS_CODE, SPAN_STATUS_ERROR, SPAN_STATUS_UNSET, } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { httpRequestHeaderKey, httpResponseHeaderKey } from \"../../utils/otel/http\";\nimport { sendSpan } from \"../../transport\";\nimport { addResourceNetworkEvents, addResourceSize, HTTP_METHOD_OTHER, isWellKnownHttpMethod } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes } from \"../../attributes\";\nexport function instrumentFetch() {\n if (!win || !win.fetch || !win.Request) {\n debug(\"Browser does not support the Fetch API, skipping instrumentation\");\n return;\n }\n wrap(win, \"fetch\", wrapFetch);\n}\n// eslint-disable-next-line no-restricted-globals -- only used as type here\nfunction wrapFetch(original) {\n return async function fetchWithInstrumentation(input, init) {\n let copyOfInit = init ? Object.assign({}, init) : init;\n let body = null;\n if (copyOfInit?.body) {\n body = copyOfInit.body;\n copyOfInit.body = undefined;\n }\n const request = new Request(input, copyOfInit);\n if (body && copyOfInit) {\n copyOfInit.body = body;\n }\n const url = request.url;\n if (isUrlIgnored(url)) {\n debug(`Not creating span for fetch call because the url is ignored, URL: ${url}`);\n return original(input instanceof Request ? request : input, init);\n }\n // https://fetch.spec.whatwg.org/#concept-request-method\n // We'll match methods case insensitive here to make the user experience a bit less painful\n const originalMethod = request.method ?? \"GET\";\n const isWellKnownMethod = isWellKnownHttpMethod(originalMethod);\n const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n const method = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n const span = startSpan(`HTTP ${method}`);\n addCommonAttributes(span.attributes);\n addUrlAttributes(span.attributes, url);\n addGraphQlProperties(input, init, span);\n addAttribute(span.attributes, HTTP_REQUEST_METHOD, method);\n if (!isWellKnownMethod) {\n addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, originalMethod);\n }\n const propagatorTypes = determinePropagatorTypes(url);\n const shouldSetCorrelationHeaders = propagatorTypes.length > 0;\n if (shouldSetCorrelationHeaders) {\n if (copyOfInit?.headers) {\n // ensure we have a unified container for the headers\n copyOfInit.headers = new Headers(copyOfInit.headers);\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n else if (input instanceof Request) {\n addTraceContextHttpHeaders(request.headers.append, request.headers, span, propagatorTypes);\n }\n else {\n if (!copyOfInit) {\n copyOfInit = {};\n }\n copyOfInit.headers = new Headers();\n addTraceContextHttpHeaders(copyOfInit.headers.append, copyOfInit.headers, span, propagatorTypes);\n }\n }\n tryCaptureHttpHeaders(request.headers, span, (k) => httpRequestHeaderKey(k));\n const performanceObserver = observeResourcePerformance({\n // We match on both fetch and XHR here to support polyfills\n resourceMatcher: ({ initiatorType, name }) => (initiatorType === \"fetch\" || initiatorType === \"xmlhttprequest\") && name === parseUrl(url).href,\n maxWaitForResourceMillis: vars.maxWaitForResourceTimingsMillis,\n maxToleranceForResourceTimingsMillis: vars.maxToleranceForResourceTimingsMillis,\n onEnd: ({ duration, resource }) => {\n if (resource) {\n addResourceNetworkEvents(span, resource);\n addResourceSize(span, resource);\n }\n // duration is millis we need to convert to nanos\n sendSpan(endSpan(span, undefined, duration * 1000000));\n },\n });\n performanceObserver.start();\n try {\n const origResponse = await original(input instanceof Request ? request : input, copyOfInit);\n addResponseData(span, origResponse);\n return wrapResponse(origResponse, vars.maxToleranceForResourceTimingsMillis, () => performanceObserver.end(), (e) => {\n performanceObserver.cancel();\n endSpanOnError(span, e);\n });\n }\n catch (e) {\n performanceObserver.cancel();\n endSpanOnError(span, e);\n throw e;\n }\n };\n}\n// @ts-expect-error -- WIP\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction addGraphQlProperties(input, init, span) {\n try {\n if (!isGraphQLQuery(input, init))\n return;\n }\n catch (e) {\n debug(\"failed to analyze request for GraphQL insights\", e, input, init);\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- WIP\nfunction isGraphQLQuery(input, init) {\n /**\n * TODO: Add GraphQL support.\n * GraphQL queries are either POST or GET requests.\n * Identified by either setting Accept=application/graphql-response+json or the url matching a config field for graphql urls.\n * See: https://graphql.github.io/graphql-over-http/draft/\n * GET requests are queries carrying a query search param\n * POST requests are either queries or mutations, See: https://graphql.org/learn/serving-over-http/#post-request-and-body\n * and https://github.com/instana/weasel/blob/main/lib/hooks/Fetch.ts#L201\n */\n return false;\n}\nfunction tryCaptureHttpHeaders(headers, span, getAttributeKey) {\n try {\n if (!vars.headersToCapture.length)\n return;\n headers.forEach((value, key) => {\n if (vars.headersToCapture.some((rxp) => rxp.test(key))) {\n addAttribute(span.attributes, getAttributeKey(key), value);\n }\n });\n }\n catch (_e) {\n debug(\"unable to capture http headers due to CORS policy\");\n }\n}\nfunction addResponseData(span, response) {\n const status = response.status;\n setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR);\n if (status === 0) {\n addAttribute(span.attributes, ERROR_TYPE, response.type);\n }\n addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n tryCaptureHttpHeaders(response.headers, span, (k) => httpResponseHeaderKey(k));\n}\n/**\n * Wraps the response to be able to detect when it is fully read\n * @param originalResponse\n * @param readTimeoutMs Timeout applied between reading of response chunks, if exceeded the response is considered abandoned and onDone is called.\n * @param onDone Called when the response is completely read or with \"fallbackEndTs\" when reading timed out.\n * @param onError\n */\nfunction wrapResponse(originalResponse, readTimeoutMs, onDone, onError) {\n // When the response was wrapped (i.e. first available to js) we use this to replace or find the actual end timestamp\n // in case the response body is never read by js\n let fallbackTs = perf.now();\n const body = originalResponse.body;\n // For some reason browsers return a response body on responses that can't be constructed with one. In that case we can't wrap the body stream\n if (!body || !responseCanHaveBody(originalResponse)) {\n onDone();\n return originalResponse;\n }\n let cbCalled = false;\n const handleDone = (fallbackEndTs) => {\n if (cbCalled)\n return;\n onDone(fallbackEndTs);\n cbCalled = true;\n };\n const handleError = (e) => {\n if (cbCalled)\n return;\n onError(e);\n cbCalled = true;\n };\n let bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n const reader = body.getReader();\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n const { value, done } = await reader.read();\n if (done) {\n reader.releaseLock();\n controller.close();\n handleDone();\n }\n else {\n fallbackTs = perf.now();\n bodyNeverCompletelyReadTimeout = setTimeout(() => handleDone(fallbackTs), readTimeoutMs);\n controller.enqueue(value);\n }\n }\n catch (e) {\n handleError(e);\n controller.error(e);\n try {\n reader.releaseLock();\n }\n catch {\n // Spec reference:\n // https://streams.spec.whatwg.org/#default-reader-release-lock\n //\n // releaseLock() only throws if called on an invalid reader\n // (i.e. reader.[[stream]] is undefined, meaning the lock is already released\n // or the reader was never associated). In normal use this cannot happen.\n // This catch is defensive only.\n }\n }\n },\n cancel(reason) {\n clearTimeout(bodyNeverCompletelyReadTimeout);\n handleDone();\n return reader.cancel(reason);\n },\n });\n return new Response(stream, {\n status: originalResponse.status,\n statusText: originalResponse.statusText,\n headers: originalResponse.headers,\n });\n}\nfunction endSpanOnError(span, error) {\n recordException(span, error);\n sendSpan(endSpan(span, errorToSpanStatus(error), undefined));\n}\nfunction determinePropagatorTypes(url) {\n const matchingTypes = [];\n const isUrlSameOrigin = isSameOrigin(url);\n // For same-origin requests, always include traceparent + all configured propagators\n if (isUrlSameOrigin) {\n // Always add traceparent for same-origin requests\n matchingTypes.push(\"traceparent\");\n // Add all other configured propagator types for same-origin requests\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (propagator.type !== \"traceparent\" && !matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n // For cross-origin requests, use new propagators config if available\n if (vars.propagators) {\n for (const propagator of vars.propagators) {\n if (matchesAny(propagator.match, url)) {\n // Avoid duplicates\n if (!matchingTypes.includes(propagator.type)) {\n matchingTypes.push(propagator.type);\n }\n }\n }\n return matchingTypes;\n }\n return [];\n}\nfunction addTraceContextHttpHeaders(fn, ctx, span, types) {\n for (const type of types) {\n if (type === \"xray\") {\n addXRayTraceContextHttpHeaders(fn, ctx, span);\n }\n else {\n addW3CTraceContextHttpHeaders(fn, ctx, span);\n }\n }\n}\nfunction responseCanHaveBody(response) {\n const status = response.status;\n return status >= 200 && status != 204 && status != 205 && status != 304;\n}\n","import { HTTP_REQUEST_HEADER, HTTP_RESPONSE_HEADER } from \"../../semantic-conventions\";\nexport function httpRequestHeaderKey(key) {\n return `${HTTP_REQUEST_HEADER}.${key.toLowerCase()}`;\n}\nexport function httpResponseHeaderKey(key) {\n return `${HTTP_RESPONSE_HEADER}.${key.toLowerCase()}`;\n}\n","import { addSpanEvent } from \"./span\";\nimport { addAttribute } from \"./attributes\";\nimport { SPAN_EVENT_NAME_EXCEPTION, EXCEPTION_MESSAGE, EXCEPTION_STACKTRACE, EXCEPTION_TYPE, SPAN_STATUS_ERROR, } from \"../../semantic-conventions\";\nexport function recordException(span, exception) {\n const attributes = [];\n if (typeof exception === \"string\") {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception);\n }\n else if (exception) {\n if (exception.code) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.code.toString());\n }\n else if (exception.name) {\n addAttribute(attributes, EXCEPTION_TYPE, exception.name);\n }\n if (exception.message) {\n addAttribute(attributes, EXCEPTION_MESSAGE, exception.message);\n }\n if (exception.stack) {\n addAttribute(attributes, EXCEPTION_STACKTRACE, exception.stack);\n }\n addSpanEvent(span, SPAN_EVENT_NAME_EXCEPTION, attributes);\n }\n}\nexport function errorToSpanStatus(e) {\n return {\n code: SPAN_STATUS_ERROR,\n message: e && typeof e === \"object\" && \"message\" in e ? e.message : String(e),\n };\n}\n","import { addAttribute, getTraceContextForPageLoad } from \"../../utils/otel\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES, PAGE_VIEW_CHANGE_STATE, PAGE_VIEW_CHANGE_STATE_VALUES, PAGE_VIEW_TYPE, PAGE_VIEW_TYPE_VALUES, } from \"../../semantic-conventions\";\nimport { doc, NO_VALUE_FALLBACK } from \"../../utils\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { sendLog } from \"../../transport\";\nimport { vars } from \"../../vars\";\nfunction getPageViewMeta(url) {\n if (!url)\n return {};\n return vars.pageViewInstrumentation.generateMetadata?.(url) ?? {};\n}\nexport function transmitPageViewEvent(timeUnixNano, url, virtual, replaced) {\n const meta = getPageViewMeta(url);\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.PAGE_VIEW);\n if (meta.attributes) {\n Object.entries(meta.attributes).forEach(([key, value]) => addAttribute(attributes, key, value));\n }\n addCommonAttributes(attributes, { url });\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"title\", meta.title ?? doc?.title ?? NO_VALUE_FALLBACK);\n if (doc?.referrer) {\n addAttribute(bodyAttributes, \"referrer\", doc.referrer);\n }\n addAttribute(bodyAttributes, PAGE_VIEW_TYPE, virtual ? PAGE_VIEW_TYPE_VALUES.VIRTUAL : PAGE_VIEW_TYPE_VALUES.INITIAL);\n addAttribute(bodyAttributes, PAGE_VIEW_CHANGE_STATE, replaced ? PAGE_VIEW_CHANGE_STATE_VALUES.REPLACE : PAGE_VIEW_CHANGE_STATE_VALUES.PUSH);\n const log = {\n timeUnixNano: timeUnixNano,\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\n","import { addEventListener, debug, doc, win, roundToTwoDecimals, error, toNanosTs, getTimeOrigin } from \"../../utils\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES } from \"../../semantic-conventions\";\nimport { sendLog } from \"../../transport\";\nimport { getTraceContextForPageLoad, addAttribute } from \"../../utils/otel\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { transmitPageViewEvent } from \"./event\";\n/**\n * Tracks page loads as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageLoadInstrumentation() {\n try {\n transmitPageViewEvent(getStartTimeUnixNanos(), win?.location.href ? new URL(win?.location.href) : undefined);\n }\n catch (e) {\n error(\"Failed to transmit initial page view event\", e);\n }\n if (doc?.readyState === \"complete\") {\n return onLoaded();\n }\n if (win) {\n addEventListener(win, \"load\", function () {\n // we want to get timing data for loadEventEnd,\n // so asynchronously process this\n setTimeout(onLoaded, 0);\n });\n }\n}\n/**\n * See https://github.com/open-telemetry/semantic-conventions/pull/1919\n */\nfunction onLoaded() {\n const nt = win?.performance.getEntriesByType(\"navigation\")[0];\n if (!nt) {\n debug(\"Navigation timings not available. Cannot emit navigation timing log\");\n return;\n }\n const attributes = [];\n addAttribute(attributes, EVENT_NAME, EVENT_NAMES.NAVIGATION_TIMING);\n const bodyAttributes = [];\n addAttribute(bodyAttributes, \"name\", nt.name);\n addNavigationTiming(bodyAttributes, nt, \"responseStatus\");\n addNavigationTiming(bodyAttributes, nt, \"fetchStart\");\n addNavigationTiming(bodyAttributes, nt, \"requestStart\");\n addNavigationTiming(bodyAttributes, nt, \"responseStart\");\n addNavigationTiming(bodyAttributes, nt, \"domInteractive\");\n addNavigationTiming(bodyAttributes, nt, \"domContentLoadedEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"domComplete\");\n addNavigationTiming(bodyAttributes, nt, \"loadEventEnd\");\n addNavigationTiming(bodyAttributes, nt, \"transferSize\");\n addNavigationTiming(bodyAttributes, nt, \"encodedBodySize\");\n addNavigationTiming(bodyAttributes, nt, \"decodedBodySize\");\n const log = {\n timeUnixNano: getStartTimeUnixNanos(),\n attributes: attributes,\n severityNumber: LOG_SEVERITIES.INFO,\n severityText: \"INFO\",\n body: {\n kvlistValue: {\n values: bodyAttributes,\n },\n },\n };\n addCommonAttributes(log.attributes);\n const traceContext = getTraceContextForPageLoad();\n if (traceContext) {\n log.traceId = traceContext.traceId;\n log.spanId = traceContext.spanId;\n }\n sendLog(log);\n}\nfunction addNavigationTiming(attributes, nt, field) {\n // @ts-expect-error index access not recognized by TS, but this makes the code more reusable\n const value = nt[field];\n if (typeof value === \"number\" && !isNaN(value)) {\n addAttribute(attributes, field, Number.isInteger(value) ? value : roundToTwoDecimals(value));\n }\n}\nfunction getStartTimeUnixNanos() {\n return toNanosTs(Math.round(getTimeOrigin()));\n}\n","import { debug, nowNanos, win, wrap } from \"../../utils\";\nimport { vars } from \"../../vars\";\nimport { transmitPageViewEvent } from \"./event\";\nlet currentLocation = {};\nlet shouldIncludeHashChanges = false;\nlet shouldIncludeSearchChanges = false;\n/**\n * Tracks page transitions (virtual page views) as per this OTel spec:\n * https://github.com/open-telemetry/semantic-conventions/pull/1910/files\n *\n * Notable difference: The full URL is transmitted as a signal attribute.\n */\nexport function startPageTransitionInstrumentation() {\n if (!win || !win.history) {\n debug(\"Browser does not support history API, skipping instrumentation\");\n return;\n }\n if (!vars.pageViewInstrumentation.trackVirtualPageViews) {\n return;\n }\n shouldIncludeSearchChanges = vars.pageViewInstrumentation.includeParts?.includes(\"SEARCH\") ?? false;\n shouldIncludeHashChanges = vars.pageViewInstrumentation.includeParts?.includes(\"HASH\") ?? false;\n /**\n * Not wrapping history.go, history.backward and history.forward here, because their call signatures don't receive\n * url information. For these cases we can use the popstate and hashchange events.\n */\n wrap(win.history, \"replaceState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined, true);\n return original.apply(this, [state, unused, url]);\n });\n wrap(win.history, \"pushState\", (original) => function (state, unused, url) {\n onUrlChange(url ? String(url) : undefined);\n return original.apply(this, [state, unused, url]);\n });\n win.addEventListener(\"hashchange\", onHashChange);\n win.addEventListener(\"popstate\", onPopState);\n try {\n updateCurrentLocation(new URL(win.location.href));\n }\n catch { }\n}\nfunction onPopState() {\n // popState event is fired after the location entry has been updated, so the location should already contain the new url.\n onUrlChange(win?.location.href);\n}\nfunction onHashChange(event) {\n onUrlChange(event.newURL);\n}\nfunction onUrlChange(url, replaced) {\n if (!url)\n return;\n try {\n const parsedUrl = new URL(url, win?.location.href);\n if (isLocationChange(parsedUrl)) {\n updateCurrentLocation(parsedUrl);\n transmitPageViewEvent(nowNanos(), parsedUrl, true, Boolean(replaced));\n }\n }\n catch (e) {\n debug(\"Failed to handle url change\", e);\n }\n}\nfunction updateCurrentLocation(url) {\n currentLocation.path = url.pathname;\n currentLocation.search = url.search;\n currentLocation.hash = url.hash;\n}\nfunction isLocationChange(newUrl) {\n return (newUrl.pathname !== currentLocation.path ||\n (shouldIncludeSearchChanges && newUrl.search !== currentLocation.search) ||\n (shouldIncludeHashChanges && newUrl.hash !== currentLocation.hash));\n}\n","import { startPageLoadInstrumentation } from \"./page-load\";\nimport { startPageTransitionInstrumentation } from \"./page-transition\";\nexport function startNavigationInstrumentation() {\n startPageLoadInstrumentation();\n startPageTransitionInstrumentation();\n}\n","// istanbul ignore next\nconst isObject = (obj) => {\n if (typeof obj === \"object\" && obj !== null) {\n if (typeof Object.getPrototypeOf === \"function\") {\n const prototype = Object.getPrototypeOf(obj);\n return prototype === Object.prototype || prototype === null;\n }\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n }\n return false;\n};\nexport const merge = (...objects) => objects.reduce((result, current) => {\n if (current === undefined) {\n return result;\n }\n if (Array.isArray(current)) {\n throw new TypeError(\"Arguments provided to ts-deepmerge must be objects, not arrays.\");\n }\n Object.keys(current).forEach((key) => {\n if ([\"__proto__\", \"constructor\", \"prototype\"].includes(key)) {\n return;\n }\n if (Array.isArray(result[key]) && Array.isArray(current[key])) {\n result[key] = merge.options.mergeArrays\n ? merge.options.uniqueArrayItems\n ? Array.from(new Set(result[key].concat(current[key])))\n : [...result[key], ...current[key]]\n : current[key];\n }\n else if (isObject(result[key]) && isObject(current[key])) {\n result[key] = merge(result[key], current[key]);\n }\n else if (!isObject(result[key]) && isObject(current[key])) {\n result[key] = merge(current[key], undefined);\n }\n else {\n result[key] =\n current[key] === undefined\n ? merge.options.allowUndefinedOverrides\n ? current[key]\n : result[key]\n : current[key];\n }\n });\n return result;\n}, {});\nconst defaultOptions = {\n allowUndefinedOverrides: true,\n mergeArrays: true,\n uniqueArrayItems: true,\n};\nmerge.options = defaultOptions;\nmerge.withOptions = (options, ...objects) => {\n merge.options = Object.assign(Object.assign({}, defaultOptions), options);\n const result = merge(...objects);\n merge.options = defaultOptions;\n return result;\n};\n","import { vars } from \"../vars\";\nimport { DEPLOYMENT_ENVIRONMENT_NAME, DEPLOYMENT_ID, DEPLOYMENT_NAME, PAGE_LOAD_ID, SERVICE_NAME, SERVICE_NAMESPACE, SERVICE_VERSION, USER_AGENT, } from \"../semantic-conventions\";\nimport { fetch, generateUniqueId, isSafeServiceName, PAGE_LOAD_ID_BYTES, warn, debug, perf, nav, win, NO_VALUE_FALLBACK, pick, loc, } from \"../utils\";\nimport { trackSessions } from \"./session\";\nimport { startWebVitalsInstrumentation } from \"../instrumentations/web-vitals\";\nimport { startErrorInstrumentation } from \"../instrumentations/errors\";\nimport { addAttribute } from \"../utils/otel\";\nimport { instrumentFetch } from \"../instrumentations/http/fetch\";\nimport { startNavigationInstrumentation } from \"../instrumentations/navigation\";\nimport { merge } from \"ts-deepmerge\";\nimport { initializeTabId } from \"../utils/tab-id\";\nlet hasBeenInitialised = false;\nexport function init(opts) {\n if (hasBeenInitialised) {\n debug(\"Dash0 SDK is being reinitialized, skipping ...\");\n return;\n }\n if (!isClient()) {\n debug(\"Looks like we are not running in a browser context. Stopping Dash0 Web SDK initialization.\");\n return;\n }\n if (!isSupported()) {\n debug(\"Stopping Dash0 Web SDK initialization. This browser does not support the necessary APIs.\");\n return;\n }\n const trimmedServiceName = opts.serviceName.trim();\n if (!trimmedServiceName) {\n debug(\"Missing or empty serviceName value. Falling back to location.hostname.\");\n opts.serviceName = loc?.hostname ?? \"unknown\";\n }\n else if (opts.rejectSuspiciousServiceName !== false && !isSafeServiceName(trimmedServiceName)) {\n debug(\"serviceName contains disallowed characters. Falling back to location.hostname.\");\n opts.serviceName = loc?.hostname ?? \"unknown\";\n }\n vars.endpoints = opts.endpoint instanceof Array ? opts.endpoint : [opts.endpoint];\n if (vars.endpoints.length === 0) {\n warn(\"No telemetry endpoint configured. Aborting Dash0 Web SDK initialization process.\");\n return;\n }\n Object.assign(vars, merge(vars, pick(opts, [\n \"ignoreUrls\",\n \"ignoreErrorMessages\",\n \"wrapEventHandlers\",\n \"wrapTimers\",\n \"propagateTraceHeadersCorsURLs\",\n \"maxWaitForResourceTimingsMillis\",\n \"maxToleranceForResourceTimingsMillis\",\n \"headersToCapture\",\n \"urlAttributeScrubber\",\n \"pageViewInstrumentation\",\n \"enableTransportCompression\",\n ])));\n initializePropagators(opts);\n initializeResourceAttributes(opts);\n initializeSignalAttributes(opts);\n initializeTabId();\n trackSessions(opts.sessionInactivityTimeoutMillis, opts.sessionTerminationTimeoutMillis);\n if (isInstrumentationEnabled(\"@dash0/navigation\", opts)) {\n startNavigationInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/web-vitals\", opts)) {\n startWebVitalsInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/error\", opts)) {\n startErrorInstrumentation();\n }\n if (isInstrumentationEnabled(\"@dash0/fetch\", opts)) {\n instrumentFetch();\n }\n hasBeenInitialised = true;\n}\nfunction initializeResourceAttributes(opts) {\n addAttribute(vars.resource.attributes, SERVICE_NAME, opts[\"serviceName\"]);\n if (opts.serviceNamespace) {\n addAttribute(vars.resource.attributes, SERVICE_NAMESPACE, opts[\"serviceNamespace\"]);\n }\n if (opts.serviceVersion) {\n addAttribute(vars.resource.attributes, SERVICE_VERSION, opts[\"serviceVersion\"]);\n }\n const env = detectEnvironment(opts);\n if (env) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ENVIRONMENT_NAME, env);\n }\n const deploymentName = detectDeploymentName(opts);\n if (deploymentName) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_NAME, deploymentName);\n }\n const deploymentId = detectDeploymentId(opts);\n if (deploymentId) {\n addAttribute(vars.resource.attributes, DEPLOYMENT_ID, deploymentId);\n }\n}\nfunction initializeSignalAttributes(opts) {\n addAttribute(vars.signalAttributes, PAGE_LOAD_ID, generateUniqueId(PAGE_LOAD_ID_BYTES));\n addAttribute(vars.signalAttributes, USER_AGENT, nav?.userAgent ?? NO_VALUE_FALLBACK);\n if (opts.additionalSignalAttributes) {\n Object.entries(opts.additionalSignalAttributes).forEach(([key, value]) => {\n addAttribute(vars.signalAttributes, key, value);\n });\n }\n}\nfunction isSupported() {\n return typeof fetch === \"function\" && perf && perf.getEntriesByType;\n}\nfunction isClient() {\n return win != null;\n}\nfunction detectEnvironment(opts) {\n // if there is a manually specified value we use that\n if (opts.environment) {\n return opts.environment;\n }\n // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n // plugins like webpack define work.\n try {\n // vercel\n // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n return process?.env?.NEXT_PUBLIC_VERCEL_ENV;\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentName(opts) {\n if (opts.deploymentName) {\n return opts.deploymentName;\n }\n // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n // plugins like webpack define work.\n try {\n // vercel\n // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n return process?.env?.NEXT_PUBLIC_VERCEL_TARGET_ENV;\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction detectDeploymentId(opts) {\n if (opts.deploymentId) {\n return opts.deploymentId;\n }\n // if process isn't defined access to it causes an exception, but we can't check for its present due to how\n // plugins like webpack define work.\n try {\n // vercel\n // @ts-expect-error -- we need to access like this to allow webpack in the nextjs build to replace this\n return process?.env?.NEXT_PUBLIC_VERCEL_BRANCH_URL;\n }\n catch (_ignored) {\n return undefined;\n }\n}\nfunction initializePropagators(opts) {\n if (opts.propagators) {\n if (opts.propagateTraceHeadersCorsURLs) {\n warn(\"Both 'propagators' and deprecated 'propagateTraceHeadersCorsURLs' were provided. Using 'propagators' configuration. Please migrate to the new 'propagators' config.\");\n }\n vars.propagators = opts.propagators;\n }\n // Handle legacy configuration\n else if (opts.propagateTraceHeadersCorsURLs && opts.propagateTraceHeadersCorsURLs.length > 0) {\n warn(\"'propagateTraceHeadersCorsURLs' is deprecated. Please use the new 'propagators' configuration.\");\n // Convert legacy config to new format - only include cross-origin URLs since same-origin is automatic\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [...opts.propagateTraceHeadersCorsURLs],\n },\n ];\n }\n // Default configuration - traceparent with empty match array\n // Same-origin requests get ALL configured propagators, so this ensures traceparent for same-origin\n else {\n vars.propagators = [\n {\n type: \"traceparent\",\n match: [],\n },\n ];\n }\n}\nfunction isInstrumentationEnabled(name, opts) {\n const instrumentations = opts.enabledInstrumentations;\n if (!instrumentations)\n return true;\n return instrumentations.includes(name);\n}\n","/**\n * Creates a new object by picking specified properties from the source object.\n * Similar to TypeScript's Pick<T, K> utility type but as a runtime function.\n *\n * @param obj - The source object to pick properties from\n * @param keys - Array of property keys to pick from the source object\n * @returns A new object containing only the specified properties\n */\nexport function pick(obj, keys) {\n const result = {};\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n","import { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { vars } from \"../vars\";\n/**\n * Adds a signal attribute to be transmitted with every signal.\n * Note: if you need to ensure attributes are included with signals transmitted on initial page load, you should use\n * the \"additionalSignalAttributes\" property of the init call instead\n */\nexport function addSignalAttribute(name, value) {\n addAttribute(vars.signalAttributes, name, value);\n}\n/**\n * Removes a previously added signal attribute\n */\nexport function removeSignalAttribute(name) {\n removeAttribute(vars.signalAttributes, name);\n}\n","import { vars } from \"../vars\";\nimport { debug as debugLogger } from \"../utils/debug\";\nexport function debug() {\n debugLogger(\"Dash0 Web SDK configuration state:\", vars);\n}\n","import { vars } from \"../vars\";\nimport { addAttribute, removeAttribute } from \"../utils/otel\";\nimport { USER_EMAIL, USER_FULL_NAME, USER_HASH, USER_ID, USER_NAME, USER_ROLES } from \"../semantic-conventions\";\nexport function identify(id, opts) {\n removeAttribute(vars.signalAttributes, USER_ID);\n if (id != null) {\n addAttribute(vars.signalAttributes, USER_ID, id);\n }\n removeAttribute(vars.signalAttributes, USER_NAME);\n if (opts?.name != null) {\n addAttribute(vars.signalAttributes, USER_NAME, opts.name);\n }\n removeAttribute(vars.signalAttributes, USER_FULL_NAME);\n if (opts?.fullName != null) {\n addAttribute(vars.signalAttributes, USER_FULL_NAME, opts.fullName);\n }\n removeAttribute(vars.signalAttributes, USER_EMAIL);\n if (opts?.email != null) {\n addAttribute(vars.signalAttributes, USER_EMAIL, opts.email);\n }\n removeAttribute(vars.signalAttributes, USER_HASH);\n if (opts?.hash != null) {\n addAttribute(vars.signalAttributes, USER_HASH, opts.hash);\n }\n removeAttribute(vars.signalAttributes, USER_ROLES);\n if (opts?.roles != null) {\n addAttribute(vars.signalAttributes, USER_ROLES, opts.roles);\n }\n}\n","import { debug, INIT_MESSAGE } from \"../utils\";\nimport { init as initApi } from \"../api/init\";\nexport * from \"../api/identify\";\nexport * from \"../api/debug\";\nexport * from \"../api/attributes\";\nexport * from \"../api/events\";\nexport * from \"../api/log-level\";\nexport { terminateSession } from \"../api/session\";\nexport { reportError } from \"../api/report-error\";\nexport function init(opts) {\n debug(`${INIT_MESSAGE} (via package)`);\n initApi(opts);\n}\n","import { reportUnhandledError as reportErrorInternal } from \"../instrumentations/errors/unhandled-error\";\nexport function reportError(error, opts) {\n reportErrorInternal(error, opts);\n}\n","import { EVENT_NAME, EVENT_NAMES, WEB_EVENT_TITLE, LOG_SEVERITIES } from \"../semantic-conventions\";\nimport { sendLog } from \"../transport\";\nimport { addCommonAttributes } from \"../attributes\";\nimport { addAttribute, addAttributes, toAnyValue } from \"../utils/otel\";\nimport { nowNanos, toNanosTs, warn } from \"../utils\";\n/**\n * Sends a custom event.\n * @param name The event name. Can not be any of the internal event names. See: EVENT_NAMES in src/semantic-conventions.\n * @param opts Additional event details.\n */\nexport function sendEvent(name, opts) {\n if (Object.values(EVENT_NAMES).includes(name)) {\n warn(`Unable to send custom event ${name}. You are not allowed to use an internal event name while sending a custom event. Dropping event...`);\n return;\n }\n const attributes = [];\n addCommonAttributes(attributes);\n addAttribute(attributes, EVENT_NAME, name);\n if (opts?.title) {\n addAttribute(attributes, WEB_EVENT_TITLE, opts.title);\n }\n // Add custom attributes last to allow overrides\n addAttributes(attributes, opts?.attributes);\n sendLog({\n timeUnixNano: opts?.timestamp != null ? toNanosTs(opts.timestamp) : nowNanos(),\n attributes,\n body: toAnyValue(opts?.data),\n severityText: opts?.severity,\n severityNumber: opts?.severity ? LOG_SEVERITIES[opts.severity] : undefined,\n });\n}\n"],"names":["noop","identity","a","logLevels","debug","info","warn","error","activeLogLevel","createLogger","logLevel","console","apply","numericLogLevel","arguments","globalHasOwnProperty","Object","prototype","hasOwnProperty","obj","key","call","win","window","undefined","doc","document","nav","navigator","loc","location","perf","performance","webkitPerformance","msPerformance","mozPerformance","encodeURIComponent","fetch","localStorage","_win$localStorage","_unused","sessionStorage","_win$sessionStorage","_unused2","SHARED_CHAR_CODES_ARRAY","Array","generateUniqueId","byteCount","i","Math","floor","random","String","fromCharCode","slice","addEventListener","target","eventType","callback","attachEvent","isSupported","getItem","setItem","now","Date","getTime","nowNanos","timeOrigin","getTimeOrigin","currentDate","perfTime","dateTime","abs","toNanosTs","time","_typeof","_perf$timing","timing","fetchStart","globals","setTimeout","clearTimeout","setInterval","clearInterval","isRunningZoneJs","_len","length","_","_key","executeGlobally","_len2","_key2","_len3","_key3","_globals$globalFuncti","globalFunctionName","this","args","e","getEntriesByType","isPerformanceObserverAvailable","PerformanceTimingNames","freeze","CONNECT_END","CONNECT_START","DECODED_BODY_SIZE","DOM_COMPLETE","DOM_CONTENT_LOADED_EVENT_END","DOM_CONTENT_LOADED_EVENT_START","DOM_INTERACTIVE","DOMAIN_LOOKUP_END","DOMAIN_LOOKUP_START","ENCODED_BODY_SIZE","FETCH_START","LOAD_EVENT_END","LOAD_EVENT_START","NAVIGATION_START","REDIRECT_END","REDIRECT_START","REQUEST_START","RESPONSE_END","RESPONSE_START","SECURE_CONNECTION_START","START_TIME","UNLOAD_EVENT_END","UNLOAD_EVENT_START","usedResources","WeakSet","observeResourcePerformance","opts","onEnd","start","end","duration","cancel","observeWithoutPerformanceObserverSupport","startTime","endTime","observer","fallbackNoResourceFoundTimerHandle","fallbackEndNeverCalledTimerHandle","resources","_observer","PerformanceObserver","onResourceFound","observe","type","_e","disposeGlobalResources","endTs","cancelFallbackEndNeverCalledTimer","isWaitingAcceptable","min","maxWaitForResourceMillis","onVisibilityChanged","resource","bestMatch","bestScore","matchingResources","filter","res","responseEnd","maxToleranceForResourceTimingsMillis","has","_step","_iterator","_createForOfIteratorHelper","s","n","done","value","score","err","f","add","findBestMatchingResource","list","entry","resourceMatcher","forEach","shift","push","_observer2","disconnect","disconnectResourceObserver","removeEventListener","detachEvent","stopVisibilityObservation","visibilityState","NO_VALUE_FALLBACK","roundToTwoDecimals","round","parseUrl","url","_doc$baseURI","URL","baseURI","href","isSameOrigin","origin","SUSPICIOUS_CHARS","INSTRUMENTED_BY_DASH0_SYMBOL","Symbol","for","wrap","module","wrapper","original","objOrFunction","markAsInstrumented","concat","vars","endpoints","attributes","scope","name","version","__sdkVersion","signalAttributes","ignoreUrls","ignoreErrorMessages","wrapEventHandlers","wrapTimers","propagateTraceHeadersCorsURLs","maxWaitForResourceTimingsMillis","headersToCapture","urlAttributeScrubber","pageViewInstrumentation","trackVirtualPageViews","includeParts","enableTransportCompression","SERVICE_NAME","SERVICE_NAMESPACE","SERVICE_VERSION","DEPLOYMENT_ENVIRONMENT_NAME","DEPLOYMENT_NAME","DEPLOYMENT_ID","EVENT_NAME","WEB_EVENT_ID","PAGE_LOAD_ID","USER_AGENT","USER_ID","USER_NAME","USER_FULL_NAME","USER_EMAIL","USER_HASH","USER_ROLES","EXCEPTION_MESSAGE","EXCEPTION_TYPE","EXCEPTION_STACKTRACE","URL_FULL","EVENT_NAMES","PAGE_VIEW","NAVIGATION_TIMING","WEB_VITAL","ERROR","LOG_SEVERITIES","UNSPECIFIED","TRACE","DEBUG","INFO","WARN","FATAL","PAGE_VIEW_TYPE_VALUES","PAGE_VIEW_CHANGE_STATE_VALUES","SESSION_FLAGS","generateSessionId","flags","byte","ephemeralSession","toString","padStart","SESSION_ID_BYTES","SESSION_STORAGE_KEY","STORAGE_SEPARATOR_KEY","MAX_ALLOWED_SESSION_TIMEOUT_MILLIS","sessionId","trackSessions","sessionInactivityTimeoutMillis","sessionTerminationTimeoutMillis","storedValue","k","session","values","split","id","parseInt","lastActivityTime","isNaN","parseSession","minAllowedLastActivityTime","minAllowedStartTime","isSessionValid","v","serializeSession","t","persisted","timeStamp","o","r","delta","rating","requestAnimationFrame","responseStart","_e$activationStart","activationStart","prerendering","wasDiscarded","replace","entries","navigationType","c","WeakMap","get","set","I","d","_createClass","_classCallCheck","_defineProperty","_this$t","hadRecentInput","at","h","supportedEntryTypes","includes","Promise","resolve","then","getEntries","_objectSpread","buffered","u","l","m","g","p","_globalThis$performan","globalThis","firstHiddenTime","y","b","T","E","max","reportAllChanges","P","_step2","_iterator2","takeRecords","L","M","C","_step3","_iterator3","interactionId","w","_performance$interact","interactionCount","A","Map","clear","_this$m","entryType","_this$v","sort","_step4","_iterator4","splice","delete","B","requestIdleCallback","once","N","S","PerformanceEventTiming","_i$durationThreshold","durationThreshold","_step5","_iterator5","q","_this$m2","x","isUnloading","newBatcher","sendInternal","pendingFlushTimeout","fn","queuedItems","flush","send","item","pendingBodySize","pendingRequestCount","_x","_x2","_send","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","path","body","jsonString","requestBody","byteLength","isCompressed","_context2","prev","next","JSON","stringify","Blob","size","CompressionStream","compressWithGzip","sent","all","map","_ref","_callee","endpoint","headers","response","_context","pathname","endsWith","substring","Authorization","dataset","abrupt","method","keepalive","text","catch","ok","status","statusText","t0","finish","stop","_x4","_x3","_compressWithGzip","_callee3","data","blob","stream","compressedStream","_context3","pipeThrough","Response","arrayBuffer","rateLimiter","logBatcher","logs","resourceLogs","scopeLogs","logRecords","spanBatcher","spans","resourceSpans","scopeSpans","isRateLimited","maxCallsPerTenMinutes","maxCallsPerTenSeconds","totalCallsInLastTenMinutes","totalCallsInLastTenSeconds","sendLog","log","sendSpan","span","ANY_VALUE_KEYS","toAnyValue","anyValue","isArray","keys","isAnyValue","_ref2","_slicedToArray","toKeyValue","addAttribute","addAttributes","attrs","_ref3","_ref4","removeAttribute","index","findIndex","attr","TRACE_PARENT_HEADER","w3cTraceparentFormat","getTraceContextForPageLoad","_Array$from$find","_doc$getElementsByTag","match","from","getElementsByTagName","find","_e$getAttribute","getAttribute","toLowerCase","content","trim","nt","serverTiming","serverTimings","serverEntry","description","getTraceparentFromServerTiming","getTraceparentFromNavigationTiming","traceId","spanId","addW3CTraceContextHttpHeaders","ctx","addXRayTraceContextHttpHeaders","w3cTraceId","timestamp","uniqueId","xrayTraceId","xrayHeader","TRACE_ID_PREFIX","TRACE_FLAGS","encodeTraceFlags","withoutSession","TABLE","Uint32Array","generateSpanId","prefix","hexStr","bytes","Uint8Array","crc","crc32","SPAN_ID_BYTES","startSpan","TRACE_ID_BYTES","generateTraceId","kind","startTimeUnixNano","events","links","code","endSpan","durationNano","endTimeUnixNano","addSpanEvent","attributesOrTs","ts","timeUnixNano","addUrlAttributes","applyPrefix","_toConsumableArray","join","withPrefix","parsed","username","password","hostname","protocol","hash","search","TAB_ID_STORAGE_KEY","tabId","initializeTabId","addCommonAttributes","options","_options$url","_win$innerWidth","_win$innerHeight","_nav$connection","attribute","innerWidth","innerHeight","connectionType","connection","effectiveType","startWebVitalsInstrumentation","_step6","_iterator6","_i2","_arr","capture","onLCP","onWebVital","onINP","onCLS","metric","bodyAttributes","severityNumber","severityText","kvlistValue","matchesAny","regexp","len","test","DATA_URL_PREFIX","isUrlIgnored","lowerCaseUrl","startsWith","isTransportRequest","scheduledTransmissionTimeoutHandle","reportedErrors","numberOfDifferentErrorsSeen","seenErrors","ignoreNextOnError","ignoreNextOnErrorEvent","reportUnhandledError","onUnhandledError","message","stack","isErrorMessageIgnored","shortenStackTrace","trackedError","seenCount","componentStack","transmittedCount","stringValue","scheduleTransmission","seenError","MESSAGE_PREFIX","STACK_UNAVAILABLE_MESSAGE","onUnhandledRejection","event","reason","WRAPPED_EVENT_HANDLERS_ORIGINAL_FUNCTION_STORAGE_KEY","findInStorage","storageTarget","valuesForEqualityCheck","storage","matchesEqualityCheck","valuesForEqualityCheckA","valuesForEqualityCheckB","addWrappedDomEventListener","wrappedFunction","eventName","eventListener","optionsOrCapture","addWrappedFunction","getDomEventListenerValuesForEqualityCheck","getDomEventListenerCaptureValue","Boolean","popWrappedDomEventListener","fallback","storageItem","popWrappedFunction","startEventHandlerInstrumentation","EventTarget","originalAddEventListener","originalRemoveEventListener","wrapEventTarget","wrapTimer","reportError","startErrorInstrumentation","globalOnError","onerror","fileName","lineNumber","columnNumber","startOnErrorInstrumentation","startTimerInstrumentation","KNOWN_HTTP_METHODS","isWellKnownHttpMethod","addResourceNetworkEvents","ignoreZeros","addSpanNetworkEvent","propertyName","addResourceSize","encodedLength","encodedBodySize","wrapFetch","_fetchWithInstrumentation","input","init","_copyOfInit","_request$method","copyOfInit","request","originalMethod","isWellKnownMethod","isWellKnownMethodMatchingLeniently","propagatorTypes","_copyOfInit2","performanceObserver","origResponse","assign","Request","toUpperCase","addGraphQlProperties","determinePropagatorTypes","Headers","addTraceContextHttpHeaders","append","tryCaptureHttpHeaders","initiatorType","addResponseData","wrapResponse","endSpanOnError","getAttributeKey","some","rxp","setSpanStatus","originalResponse","readTimeoutMs","onDone","onError","fallbackTs","cbCalled","handleDone","fallbackEndTs","handleError","bodyNeverCompletelyReadTimeout","reader","getReader","ReadableStream","pull","controller","_yield$reader$read","read","releaseLock","close","enqueue","exception","recordException","errorToSpanStatus","matchingTypes","propagators","propagator","types","transmitPageViewEvent","virtual","replaced","_meta$title","meta","_vars$pageViewInstrum","_vars$pageViewInstrum2","_vars$pageViewInstrum3","generateMetadata","getPageViewMeta","title","referrer","traceContext","onLoaded","addNavigationTiming","getStartTimeUnixNanos","field","Number","isInteger","currentLocation","shouldIncludeHashChanges","shouldIncludeSearchChanges","onPopState","onUrlChange","onHashChange","newURL","newUrl","parsedUrl","updateCurrentLocation","startNavigationInstrumentation","readyState","startPageLoadInstrumentation","_vars$pageViewInstrum4","history","state","unused","startPageTransitionInstrumentation","isObject","getPrototypeOf","merge","objects","reduce","result","current","TypeError","mergeArrays","uniqueArrayItems","Set","allowUndefinedOverrides","defaultOptions","withOptions","hasBeenInitialised","_loc$hostname","trimmedServiceName","serviceName","rejectSuspiciousServiceName","_loc$hostname2","pick","initializePropagators","serviceNamespace","serviceVersion","env","environment","_process","process","NEXT_PUBLIC_VERCEL_ENV","_ignored","detectEnvironment","deploymentName","_process2","NEXT_PUBLIC_VERCEL_TARGET_ENV","detectDeploymentName","deploymentId","_process3","NEXT_PUBLIC_VERCEL_BRANCH_URL","detectDeploymentId","initializeResourceAttributes","_nav$userAgent","userAgent","additionalSignalAttributes","initializeSignalAttributes","isInstrumentationEnabled","instrumentations","enabledInstrumentations","debugLogger","fullName","email","roles","initApi","reportErrorInternal","severity","level","_logLevels$level","removeItem"],"mappings":"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","x_google_ignoreList":[20,52]}
|