{"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/rate-limit.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/utils/crc32.js","modules/utils/session-sampling.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/otel/attributes.js","modules/utils/otel/trace-context.js","modules/utils/trace-id.js","modules/utils/span-id.js","modules/utils/otel/span.js","modules/utils/otel/error.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/utils/otel/http.js","modules/instrumentations/http/utils.js","modules/instrumentations/http/fetch.js","modules/instrumentations/http/xhr.js","modules/instrumentations/navigation/event.js","modules/instrumentations/navigation/page-load.js","modules/instrumentations/navigation/page-transition.js","modules/instrumentations/navigation/index.js","modules/api/browser-env.js","modules/api/vcs.js","modules/instrumentations/session-recording/index.js","modules/instrumentations/session-recording/chunker.js","modules/instrumentations/session-recording/log.js","modules/instrumentations/frustration/element.js","modules/instrumentations/frustration/rage-click.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","modules/api/session-recording.js","modules/api/start-view.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, capture = false) {\n    if (target.addEventListener) {\n        target.addEventListener(eventType, callback, capture);\n    }\n    else if (target.attachEvent) {\n        // The legacy API has no capture phase. Listeners that ask for one still get registered,\n        // they just observe the bubble phase.\n        target.attachEvent(\"on\" + eventType, callback);\n    }\n}\nexport function removeEventListener(target, eventType, callback, capture = false) {\n    if (target.removeEventListener) {\n        // The capture flag is part of a listener's identity: removal only works when it matches\n        // the flag the listener was registered with.\n        target.removeEventListener(eventType, callback, capture);\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","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","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, warn } 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    try {\n        const wrapped = wrapper(original);\n        // Mark the replacement as well: a later wrap() call reads the replacement from module[target],\n        // so marking only the original would let repeated instrumentation wrap the wrapper.\n        markAsInstrumented(original);\n        if (wrapped) {\n            markAsInstrumented(wrapped);\n        }\n        module[target] = wrapped;\n    }\n    catch (e) {\n        // Pages can lock properties via Object.defineProperty/Object.freeze -- failing to install\n        // one instrumentation must not throw out of init() and abort the remaining ones.\n        warn(`failed to instrument ${String(target)}, the page may have locked the property`, e);\n    }\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 { crc32 } from \"./crc32\";\n/**\n * Determines whether a session should be sampled based on the session ID\n * and a configured sampling rate.\n *\n * @param sessionId The hex session ID string\n * @param samplingRate A number between 0 and 100 (inclusive)\n * @returns true if the session should be sampled (data collected), false otherwise\n */\nexport function isSessionSampledIn(sessionId, samplingRate) {\n    if (samplingRate <= 0)\n        return false;\n    if (samplingRate >= 100)\n        return true;\n    return crc32(sessionId) % 100 < samplingRate;\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    sessionRecording: {\n        samplingRate: 100,\n        maskAllInputs: true,\n        maskTextClass: \"dash0-mask\",\n        blockClass: \"dash0-block\",\n        recordCanvas: false,\n        collectFonts: false,\n        chunkMaxBytes: 48000,\n        chunkMaxMillis: 5000,\n        checkoutEveryNms: 300000,\n    },\n    frustrationSignals: {\n        rageClick: {\n            minClicks: 3,\n            windowMillis: 1000,\n            radiusPixels: 30,\n        },\n    },\n    enableTransportCompression: false,\n    isSessionSampled: true,\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// VCS Resource Attribute Keys\nexport const VCS_PROVIDER_NAME = \"vcs.provider.name\";\nexport const VCS_OWNER_NAME = \"vcs.owner.name\";\nexport const VCS_REPOSITORY_NAME = \"vcs.repository.name\";\nexport const VCS_REPOSITORY_URL_FULL = \"vcs.repository.url.full\";\nexport const VCS_REF_HEAD_NAME = \"vcs.ref.head.name\";\nexport const VCS_REF_HEAD_REVISION = \"vcs.ref.head.revision\";\nexport const VCS_CHANGE_ID = \"vcs.change.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 WEB_REQUEST_CANCELLED = \"dash0.web.request.cancelled\";\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// Session Recording Attribute Keys\nexport const SESSION_RECORDING_ID = \"dash0.session_recording.id\";\nexport const SESSION_RECORDING_SEQ = \"dash0.session_recording.seq\";\nexport const SESSION_RECORDING_EVENT_COUNT = \"dash0.session_recording.event_count\";\nexport const SESSION_RECORDING_HAS_SNAPSHOT = \"dash0.session_recording.has_snapshot\";\nexport const SESSION_RECORDING_END_TIME_UNIX_NANO = \"dash0.session_recording.end_time_unix_nano\";\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    SESSION_RECORDING: \"browser.session_recording\",\n    RAGE_CLICK: \"browser.rage_click\",\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, opts) {\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 || opts?.compress)) {\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);\n/**\n * Returns an `isRateLimited()` check whose limiter is created on first use, so the module can be imported\n * without touching timers.\n */\nfunction lazyRateLimiter(opts) {\n    let limiter;\n    return () => {\n        if (!limiter) {\n            limiter = createRateLimiter(opts);\n        }\n        return limiter();\n    };\n}\nconst isRateLimited = lazyRateLimiter({\n    maxCallsPerTenMinutes: 4096,\n    maxCallsPerTenSeconds: 128,\n});\n// Session recording chunks get their own budget. They are large and periodic, and must neither consume the\n// shared budget of spans and logs nor be starved by it. The budget is deliberately generous: every chunk\n// depends on the ones before it, so a dropped chunk makes the replay unrenderable until the next full snapshot\n// (`checkoutEveryNms`). At the default `chunkMaxBytes` of 48 KB, 64 chunks per 10 s allow a ~3 MB mutation\n// burst (a heavy first render), and 512 per 10 min cap a runaway page at ~25 MB of uncompressed replay JSON.\nconst isSessionRecordingRateLimited = lazyRateLimiter({\n    maxCallsPerTenMinutes: 512,\n    maxCallsPerTenSeconds: 64,\n});\nexport function sendLog(log) {\n    if (!vars.isSessionSampled)\n        return;\n    if (isRateLimited()) {\n        debug(\"Transport rate limit. Will not send item.\", log);\n        return;\n    }\n    logBatcher.send(log);\n}\n/**\n * Transmits a session recording chunk as a single log record. Chunks bypass the log batcher: batching 15 chunks\n * of up to `chunkMaxBytes` each would produce requests far beyond the keepalive body limit.\n *\n * Chunks are gzipped by default because replay JSON compresses roughly 8:1. Pass `compress: false` when the\n * request must be issued synchronously, i.e. while the document is being unloaded: compression is asynchronous\n * and the page may be gone before `fetch()` is ever called.\n */\nexport function sendSessionRecordingChunk(log, opts) {\n    if (!vars.isSessionSampled)\n        return;\n    if (isSessionRecordingRateLimited()) {\n        debug(\"Session recording rate limit. Will not send chunk.\", log);\n        return;\n    }\n    sendLogs([log], { compress: opts?.compress ?? true });\n}\nfunction sendLogs(logs, opts) {\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    }, opts).catch((err) => {\n        error(\"Failed to transmit logs\", err);\n    });\n}\nexport function sendSpan(span) {\n    if (!span)\n        return;\n    if (!vars.isSessionSampled)\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","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","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 { 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, 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 { 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 { addAttribute, addSpanEvent, addW3CTraceContextHttpHeaders, addXRayTraceContextHttpHeaders, endSpan, errorToSpanStatus, recordException, } from \"../../utils/otel\";\nimport { domHRTimestampToNanos, hasKey, isSameOrigin, PerformanceTimingNames } from \"../../utils\";\nimport { matchesAny } from \"../../utils/ignore-rules\";\nimport { ERROR_TYPE, HTTP_RESPONSE_BODY_SIZE, WEB_REQUEST_CANCELLED } from \"../../semantic-conventions\";\nimport { vars } from \"../../vars\";\nimport { sendSpan } from \"../../transport\";\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// Sets error.type alongside the recorded exception so failed fetch and XHR spans are equally\n// queryable by error.type. The value is the exception name (e.g. TypeError) -- XHR's synthetic\n// failure exceptions carry their failure kind (\"error\"/\"timeout\") as the name, so both\n// instrumentations converge here. Note the shapes still differ for cases inherent to the APIs:\n// a fetch that resolves with status 0 (e.g. opaque responses) never reaches this function and\n// instead gets error.type = response.type plus http.response.status_code \"0\".\nexport function endSpanOnError(span, error) {\n    recordException(span, error);\n    const errorType = typeof error === \"object\" && error ? (error.name ?? (error.code != null ? String(error.code) : \"error\")) : \"error\";\n    addAttribute(span.attributes, ERROR_TYPE, errorType);\n    sendSpan(endSpan(span, errorToSpanStatus(error), undefined));\n}\n// Cancellations are benign: no error status, no error.type. This also covers fetch calls aborted\n// by AbortSignal.timeout() -- the signal is aborted by the time the rejection is handled, so a\n// fetch timeout surfaces as a cancellation while an XHR timeout is an ERROR span with\n// error.type = \"timeout\". That asymmetry is inherent to the two APIs.\nexport function endSpanOnAbort(span) {\n    addAttribute(span.attributes, WEB_REQUEST_CANCELLED, true);\n    sendSpan(endSpan(span, undefined, undefined));\n}\nexport function 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}\nexport function 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}\n","import { debug, observeResourcePerformance, perf, win, setTimeout, wrap, parseUrl, clearTimeout } from \"../../utils\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addAttribute, endSpan, setSpanStatus, 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, addTraceContextHttpHeaders, determinePropagatorTypes, endSpanOnAbort, endSpanOnError, 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 fetchInput = input;\n        let request;\n        let instrumentation;\n        try {\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            request = new Request(input, copyOfInit);\n            if (body && copyOfInit) {\n                copyOfInit.body = body;\n            }\n            // Constructing the Request above disturbs the body of a Request input, so from here on the\n            // copy has to be handed to the original fetch in place of the input -- including on the\n            // ignored and instrumentation-failure paths below.\n            fetchInput = input instanceof Request ? request : input;\n            if (isUrlIgnored(request.url)) {\n                debug(`Not creating span for fetch call because the url is ignored, URL: ${request.url}`);\n                // Note: the rejection of the returned promise does not route through the catch below --\n                // only synchronous throws do, so the original fetch cannot be invoked twice.\n                return original(fetchInput, init);\n            }\n            instrumentation = onFetchStart(input, init, request, copyOfInit);\n        }\n        catch (e) {\n            debug(\"failed to instrument fetch call\", e);\n            return original(fetchInput, init);\n        }\n        const { copyOfInit, span, performanceObserver } = instrumentation;\n        try {\n            const origResponse = await original(fetchInput, copyOfInit);\n            addResponseData(span, origResponse);\n            return wrapResponse(origResponse, vars.maxToleranceForResourceTimingsMillis, () => performanceObserver.end(), (e) => {\n                performanceObserver.cancel();\n                if (request?.signal?.aborted) {\n                    endSpanOnAbort(span);\n                }\n                else {\n                    endSpanOnError(span, e);\n                }\n            });\n        }\n        catch (e) {\n            performanceObserver.cancel();\n            if (request?.signal?.aborted) {\n                endSpanOnAbort(span);\n            }\n            else {\n                endSpanOnError(span, e);\n            }\n            throw e;\n        }\n    };\n}\nfunction onFetchStart(input, init, request, copyOfInit) {\n    const url = request.url;\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    return { copyOfInit, span, performanceObserver };\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\", e);\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 responseCanHaveBody(response) {\n    const status = response.status;\n    return status >= 200 && status != 204 && status != 205 && status != 304;\n}\n","import { addEventListener, debug, observeResourcePerformance, parseUrl, removeEventListener, win, wrap, } from \"../../utils\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addAttribute, endSpan, recordException, setSpanStatus, 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, addTraceContextHttpHeaders, determinePropagatorTypes, endSpanOnAbort, endSpanOnError, HTTP_METHOD_OTHER, isWellKnownHttpMethod, } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes } from \"../../attributes\";\nconst XHR_STATE = Symbol(\"dash0XhrState\");\n// The un-wrapped setRequestHeader, captured when wrapping. Trace context headers are injected\n// through it so the SDK's own headers neither land in capturedRequestHeaders nor trip the\n// already-traced detection below.\nlet originalSetRequestHeader;\nexport function instrumentXhr() {\n    if (!win || !win.XMLHttpRequest) {\n        debug(\"Browser does not support XMLHttpRequest, skipping instrumentation\");\n        return;\n    }\n    const proto = win.XMLHttpRequest.prototype;\n    wrap(proto, \"open\", wrapOpen);\n    wrap(proto, \"setRequestHeader\", wrapSetRequestHeader);\n    wrap(proto, \"send\", wrapSend);\n}\nfunction wrapOpen(original) {\n    return function (method, url, ...rest) {\n        let openArgs = [method, url, ...rest];\n        try {\n            // Pass the pre-coerced URL to the native method so a side-effectful custom toString runs\n            // once, not twice. The method arg stays untouched -- its coercion is SDK bookkeeping only.\n            openArgs = [method, onOpen(this, method, url), ...rest];\n        }\n        catch (e) {\n            // Clear stale state from a previous open() on a reused instance so send() doesn't\n            // attribute the new request to old state.\n            this[XHR_STATE] = undefined;\n            debug(\"failed to instrument XMLHttpRequest.open\", e);\n        }\n        return original.apply(this, openArgs);\n    };\n}\nfunction onOpen(xhr, method, url) {\n    // Per spec, open() during an in-flight request terminates the fetch without firing\n    // abort/loadend, so onLoadEnd never runs for the previous request. Clean it up here (before\n    // anything below can throw) or its listeners, performance observer and span would leak on\n    // every cancel-by-reopen cycle -- and its stale loadend listener would end the old span with\n    // the next request's status.\n    const previousState = xhr[XHR_STATE];\n    if (previousState?.span && !previousState.completed) {\n        cleanupAbandonedRequest(xhr, previousState);\n    }\n    const stringUrl = String(url);\n    // Resolve relative URLs so ignore rules, propagator matching and url.* attributes see the same\n    // absolute URL the fetch instrumentation matches against (Request resolves it there). Only the\n    // SDK bookkeeping uses the resolved form -- the native open() still receives stringUrl.\n    const resolvedUrl = parseUrl(stringUrl).href;\n    const originalMethod = String(method ?? \"GET\");\n    const isWellKnownMethodMatchingLeniently = isWellKnownHttpMethod(originalMethod.toUpperCase());\n    const normalizedMethod = isWellKnownMethodMatchingLeniently ? originalMethod.toUpperCase() : HTTP_METHOD_OTHER;\n    // A new open() call on a reused XHR instance resets state -- any prior span for this instance\n    // has already been sent (completed requests) or was just ended as cancelled above, and this\n    // open() is treated as the start of a brand-new request with its own span.\n    xhr[XHR_STATE] = {\n        method: normalizedMethod,\n        originalMethod,\n        isWellKnownMethod: isWellKnownHttpMethod(originalMethod),\n        url: resolvedUrl,\n        ignored: isUrlIgnored(resolvedUrl),\n        propagatorTypes: determinePropagatorTypes(resolvedUrl),\n        completed: false,\n    };\n    return stringUrl;\n}\nfunction wrapSetRequestHeader(original) {\n    // wrap() only invokes this factory when it actually wraps (it skips already-instrumented\n    // targets), so this can never capture the SDK's own wrapper on double instrumentation.\n    originalSetRequestHeader = original;\n    return function (name, value) {\n        original.call(this, name, value);\n        try {\n            onSetRequestHeader(this, name, value);\n        }\n        catch (e) {\n            debug(\"failed to instrument XMLHttpRequest.setRequestHeader\", e);\n        }\n    };\n}\nfunction onSetRequestHeader(xhr, name, value) {\n    const state = xhr[XHR_STATE];\n    if (!state || state.ignored)\n        return;\n    // Match against the lowercased name so a regex behaves the same here as for fetch,\n    // where Headers iteration yields lowercased names.\n    const lowerName = name.toLowerCase();\n    // A trace correlation header showing up here means someone else is already tracing this\n    // request -- the SDK injects its own headers via the un-wrapped setRequestHeader, so it never\n    // trips this. The typical source is a fetch polyfill built on XHR: the fetch instrumentation\n    // has already created a span and injected headers for the logical request, and the polyfill\n    // replays them onto the underlying XHR. send() skips span creation and injection for such\n    // requests -- a second injection would combine into one invalid comma-joined header value,\n    // and a second span would double-report the request (the fetch span's resource matcher\n    // already accepts initiatorType \"xmlhttprequest\" to cover polyfills). Note this only\n    // detects the polyfill case when the fetch side actually injected headers (a propagator\n    // matched the URL) -- without that, the polyfill case still yields two spans.\n    if (lowerName === \"traceparent\" || lowerName === \"x-amzn-trace-id\") {\n        state.alreadyTraced = true;\n    }\n    // Filter at capture time like the fetch instrumentation -- never retain unmatched\n    // (potentially sensitive) headers on the page-reachable XHR instance.\n    if (vars.headersToCapture.length === 0)\n        return;\n    if (!vars.headersToCapture.some((rxp) => rxp.test(lowerName)))\n        return;\n    const headers = (state.capturedRequestHeaders ??= {});\n    // Native XHR combines repeated setRequestHeader() calls for the same name\n    // (case-insensitively) into a single \"a, b\" value -- mirror that.\n    headers[lowerName] = lowerName in headers ? `${headers[lowerName]}, ${value}` : value;\n}\nfunction wrapSend(original) {\n    return function (body) {\n        const state = this[XHR_STATE];\n        if (!state || state.ignored) {\n            if (state?.ignored) {\n                debug(`Not creating span for XMLHttpRequest because the url is ignored, URL: ${state.url}`);\n            }\n            return original.call(this, body);\n        }\n        if (state.alreadyTraced) {\n            debug(`Not creating span for XMLHttpRequest because a trace correlation header is already present, URL: ${state.url}`);\n            return original.call(this, body);\n        }\n        // send() on an already-sent request throws InvalidStateError natively. Don't create a second\n        // span and set of listeners for it -- that would overwrite the in-flight request's state and\n        // attribute its response to the wrong span.\n        if (state.span && !state.completed) {\n            return original.call(this, body);\n        }\n        try {\n            onSend(this, state);\n        }\n        catch (e) {\n            cleanupFailedSend(this, state);\n            debug(\"failed to instrument XMLHttpRequest.send\", e);\n        }\n        try {\n            return original.call(this, body);\n        }\n        catch (e) {\n            // Synchronous XHR reports network errors and timeouts by making send() throw -- per spec\n            // no loadend fires for sync failures, so onLoadEnd never runs and this is the only place\n            // the request can be finalized.\n            endSpanOnSyncSendError(this, state, e);\n            throw e;\n        }\n    };\n}\nfunction endSpanOnSyncSendError(xhr, state, error) {\n    if (state.completed)\n        return;\n    state.completed = true;\n    try {\n        for (const [eventType, listener] of state.listeners ?? []) {\n            removeEventListener(xhr, eventType, listener);\n        }\n        state.performanceObserver?.cancel();\n        const span = state.span;\n        if (!span)\n            return;\n        const failureKind = state.failureKind ?? (error?.name === \"TimeoutError\" ? \"timeout\" : \"error\");\n        recordException(span, error ?? { name: failureKind, message: `XMLHttpRequest failed: ${state.url}` });\n        addAttribute(span.attributes, ERROR_TYPE, failureKind);\n        sendSpan(endSpan(span, { code: SPAN_STATUS_ERROR, message: `XMLHttpRequest failed: ${state.url}` }, undefined));\n    }\n    catch (_e) {\n        // Best-effort only -- never mask the page's original exception from send().\n    }\n}\nfunction onSend(xhr, state) {\n    const span = startSpan(`HTTP ${state.method}`);\n    addCommonAttributes(span.attributes);\n    addUrlAttributes(span.attributes, state.url);\n    addAttribute(span.attributes, HTTP_REQUEST_METHOD, state.method);\n    if (!state.isWellKnownMethod) {\n        addAttribute(span.attributes, HTTP_REQUEST_METHOD_ORIGINAL, state.originalMethod);\n    }\n    state.span = span;\n    if (state.propagatorTypes.length > 0) {\n        try {\n            addTraceContextHttpHeaders((name, value) => (originalSetRequestHeader ?? xhr.setRequestHeader).call(xhr, name, value), xhr, span, state.propagatorTypes);\n        }\n        catch (e) {\n            // setRequestHeader throws InvalidStateError if called before open() succeeded, or after\n            // send(). This should not normally happen since we only reach here from within send()\n            // itself with state populated by a prior open(), but guard defensively.\n            debug(\"failed to inject trace context headers on XMLHttpRequest\", e);\n        }\n    }\n    // Entries were already filtered against vars.headersToCapture (and lowercased) at\n    // setRequestHeader() time.\n    if (state.capturedRequestHeaders) {\n        for (const [name, value] of Object.entries(state.capturedRequestHeaders)) {\n            addAttribute(span.attributes, httpRequestHeaderKey(name), value);\n        }\n    }\n    const performanceObserver = observeResourcePerformance({\n        resourceMatcher: ({ initiatorType, name }) => initiatorType === \"xmlhttprequest\" && name === state.url,\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            sendSpan(endSpan(span, undefined, duration * 1000000));\n        },\n    });\n    state.performanceObserver = performanceObserver;\n    performanceObserver.start();\n    // Keep references to the per-request listeners so onLoadEnd can remove them again -- loadend\n    // fires for every request outcome, so cleanup there prevents listeners (and their state/span\n    // closures) from accumulating on reused XHR instances.\n    state.listeners = [\n        [\n            \"error\",\n            () => {\n                state.failureKind = \"error\";\n            },\n        ],\n        [\n            \"timeout\",\n            () => {\n                state.failureKind = \"timeout\";\n            },\n        ],\n        [\n            \"abort\",\n            () => {\n                state.failureKind = \"abort\";\n            },\n        ],\n        [\"loadend\", () => onLoadEnd(xhr, state)],\n    ];\n    for (const [eventType, listener] of state.listeners) {\n        addEventListener(xhr, eventType, listener);\n    }\n}\nfunction cleanupAbandonedRequest(xhr, state) {\n    // Mark completed first so a stray late event stays a no-op even if listener removal fails.\n    state.completed = true;\n    try {\n        for (const [eventType, listener] of state.listeners ?? []) {\n            removeEventListener(xhr, eventType, listener);\n        }\n        state.performanceObserver?.cancel();\n        if (state.span) {\n            // Report the request as cancelled, matching how fetch reports aborted requests.\n            endSpanOnAbort(state.span);\n        }\n    }\n    catch (_e) {\n        // Best-effort cleanup only -- never let it throw into the page's open() call.\n    }\n}\nfunction cleanupFailedSend(xhr, state) {\n    try {\n        state.performanceObserver?.cancel();\n        for (const [eventType, listener] of state.listeners ?? []) {\n            removeEventListener(xhr, eventType, listener);\n        }\n    }\n    catch (_e) {\n        // Best-effort cleanup only -- never let it throw into the page's send() call.\n    }\n    // Drop the span so a stray loadend for this request doesn't emit a half-initialized span.\n    state.span = undefined;\n}\nfunction onLoadEnd(xhr, state) {\n    if (state.completed)\n        return;\n    state.completed = true;\n    // The request cycle is over -- remove the per-request listeners so they don't pile up on reused\n    // XHR instances.\n    for (const [eventType, listener] of state.listeners ?? []) {\n        removeEventListener(xhr, eventType, listener);\n    }\n    const span = state.span;\n    if (!span)\n        return;\n    const performanceObserver = state.performanceObserver;\n    if (state.failureKind === \"abort\") {\n        performanceObserver?.cancel();\n        endSpanOnAbort(span);\n        return;\n    }\n    let status = 0;\n    try {\n        status = xhr.status;\n    }\n    catch (_e) {\n        // Reading .status can throw in some environments if accessed at the wrong readyState.\n        status = 0;\n    }\n    if (state.failureKind === \"error\" || state.failureKind === \"timeout\" || status === 0) {\n        performanceObserver?.cancel();\n        const failureKind = state.failureKind ?? \"error\";\n        // The failure kind doubles as the exception name, so endSpanOnError derives\n        // error.type = failureKind from it.\n        endSpanOnError(span, { name: failureKind, message: `XMLHttpRequest failed: ${state.url}` });\n        return;\n    }\n    setSpanStatus(span, status >= 200 && status < 400 ? SPAN_STATUS_UNSET : SPAN_STATUS_ERROR);\n    addAttribute(span.attributes, HTTP_RESPONSE_STATUS_CODE, String(status));\n    tryCaptureResponseHeaders(xhr, span);\n    performanceObserver?.end();\n}\nfunction tryCaptureResponseHeaders(xhr, span) {\n    try {\n        if (!vars.headersToCapture.length)\n            return;\n        const raw = xhr.getAllResponseHeaders();\n        if (!raw)\n            return;\n        raw\n            .split(/\\r?\\n/)\n            .filter((line) => line.length > 0)\n            .forEach((line) => {\n            const separatorIndex = line.indexOf(\":\");\n            if (separatorIndex === -1)\n                return;\n            const name = line.substring(0, separatorIndex).trim();\n            const value = line.substring(separatorIndex + 1).trim();\n            if (vars.headersToCapture.some((rxp) => rxp.test(name))) {\n                addAttribute(span.attributes, httpResponseHeaderKey(name), value);\n            }\n        });\n    }\n    catch (e) {\n        debug(\"unable to capture http response headers\", e);\n    }\n}\n","import { addAttribute, addAttributes, 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}\nfunction buildAndSendPageViewLog(opts) {\n    const attributes = [];\n    addAttribute(attributes, EVENT_NAME, EVENT_NAMES.PAGE_VIEW);\n    if (opts.metaAttributes) {\n        Object.entries(opts.metaAttributes).forEach(([key, value]) => addAttribute(attributes, key, value));\n    }\n    addCommonAttributes(attributes, { url: opts.url });\n    // Add custom attributes last to allow overrides\n    addAttributes(attributes, opts.customAttributes);\n    const bodyAttributes = [];\n    addAttribute(bodyAttributes, \"title\", opts.title ?? doc?.title ?? NO_VALUE_FALLBACK);\n    if (doc?.referrer) {\n        addAttribute(bodyAttributes, \"referrer\", doc.referrer);\n    }\n    addAttribute(bodyAttributes, PAGE_VIEW_TYPE, opts.pageViewType);\n    if (opts.changeState) {\n        addAttribute(bodyAttributes, PAGE_VIEW_CHANGE_STATE, opts.changeState);\n    }\n    const log = {\n        timeUnixNano: opts.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}\nexport function transmitPageViewEvent(timeUnixNano, url, virtual, replaced) {\n    const meta = getPageViewMeta(url);\n    buildAndSendPageViewLog({\n        timeUnixNano,\n        url,\n        title: meta.title,\n        metaAttributes: meta.attributes,\n        pageViewType: virtual ? PAGE_VIEW_TYPE_VALUES.VIRTUAL : PAGE_VIEW_TYPE_VALUES.INITIAL,\n        changeState: replaced ? PAGE_VIEW_CHANGE_STATE_VALUES.REPLACE : PAGE_VIEW_CHANGE_STATE_VALUES.PUSH,\n    });\n}\n/**\n * Emits a manually-triggered page view log, e.g. from the public `startView` API.\n * Deliberately does NOT read `vars.pageViewInstrumentation.generateMetadata` and does NOT\n * include a `change_state` body key (a manual view is neither a pushState nor replaceState).\n * The emitted `type` is PAGE_VIEW_TYPE_VALUES.VIRTUAL, matching automatic virtual page views —\n * manual views are deliberately indistinguishable from virtual ones downstream.\n * Caller-provided attributes are added after the SDK-generated ones so they can override them,\n * matching the sendEvent semantics.\n */\nexport function transmitManualPageViewEvent(opts) {\n    buildAndSendPageViewLog({\n        timeUnixNano: opts.timeUnixNano,\n        url: opts.url,\n        title: opts.title,\n        customAttributes: opts.attributes,\n        pageViewType: PAGE_VIEW_TYPE_VALUES.VIRTUAL,\n    });\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","// Shared types and helpers for reading build-environment variables exposed\n// to the browser bundle. Owned by this module because it is used from both\n// init.ts (environment / deployment detection) and vcs.ts (VCS detection).\n//\n// IMPORTANT: each `process.env.NAME` MUST be a LITERAL accessor in the\n// caller's source. Webpack DefinePlugin, Next.js, Gatsby, and equivalents\n// substitute env vars at build time only when they see the literal form.\n// Dynamic lookups (`process.env[name]`, iterating a string array) are NOT\n// substituted — they resolve to `undefined` in the browser bundle.\n//\n// The type unions below are the single source of truth for which env var\n// names the SDK reads. They are composed via template-literal types so\n// every (prefix × suffix) combination is enumerated at the type level.\n// Adding a framework prefix is a one-line edit to `FrameworkPrefix`; adding\n// a suffix is a one-line edit to the appropriate suffix union.\n/**\n * Return the first truthy value, or undefined. Used to walk the list of\n * framework-prefixed variants of an env var and pick whichever the user's\n * bundler substituted at build time.\n *\n * The falsy check skips empty strings as well as undefined — bundlers that\n * do not substitute a literal leave it as `undefined`, not `\"\"`, so empty\n * is treated as \"not set\". This is intentional and matches every known\n * `VERCEL_GIT_*` / `REPOSITORY_URL` / etc. value shape (non-empty strings\n * or absent; Vercel PR IDs are positive integer strings, never `\"0\"`).\n */\nexport function pickFirstString(...values) {\n    for (const value of values) {\n        if (value)\n            return value;\n    }\n    return undefined;\n}\n","import { vars } from \"../vars\";\nimport { VCS_CHANGE_ID, VCS_OWNER_NAME, VCS_PROVIDER_NAME, VCS_REF_HEAD_NAME, VCS_REF_HEAD_REVISION, VCS_REPOSITORY_NAME, VCS_REPOSITORY_URL_FULL, } from \"../semantic-conventions\";\nimport { addAttribute } from \"../utils/otel\";\nimport { pickFirstString } from \"./browser-env\";\n// Single source of truth mapping each VcsAttributes field to its OTel\n// resource attribute name. Typed as `Record<keyof VcsAttributes, string>` so\n// adding a field to VcsAttributes without adding an entry here is a compile\n// error — no silent \"I forgot to apply that field\" bugs.\nconst VCS_FIELD_TO_ATTRIBUTE = {\n    providerName: VCS_PROVIDER_NAME,\n    ownerName: VCS_OWNER_NAME,\n    repositoryName: VCS_REPOSITORY_NAME,\n    repositoryUrlFull: VCS_REPOSITORY_URL_FULL,\n    refHeadName: VCS_REF_HEAD_NAME,\n    refHeadRevision: VCS_REF_HEAD_REVISION,\n    changeId: VCS_CHANGE_ID,\n};\n/**\n * Derive VCS (version control) context from the build environment and apply\n * the resulting `vcs.*` resource attributes to `vars.resource.attributes`.\n *\n * Detection precedence per attribute: `opts.vcs` → Vercel env vars → Netlify\n * env vars. Manual overrides via `opts.vcs` always win, even when\n * `opts.disableVcsDetection` is set.\n */\nexport function applyVcsResourceAttributes(opts) {\n    const vcs = detectVcs(opts);\n    for (const field of Object.keys(VCS_FIELD_TO_ATTRIBUTE)) {\n        const value = vcs[field];\n        if (value) {\n            addAttribute(vars.resource.attributes, VCS_FIELD_TO_ATTRIBUTE[field], value);\n        }\n    }\n}\nfunction detectVcs(opts) {\n    // opts.vcs manual overrides always win, even when auto-detection is disabled.\n    // This lets callers on non-Vercel/Netlify platforms supply context explicitly\n    // while still opting out of any env-var reading.\n    const override = opts.vcs ?? {};\n    if (opts.disableVcsDetection) {\n        return override;\n    }\n    const vercel = detectVcsFromVercel();\n    const netlify = detectVcsFromNetlify();\n    return {\n        providerName: override.providerName ?? vercel.providerName ?? netlify.providerName,\n        ownerName: override.ownerName ?? vercel.ownerName ?? netlify.ownerName,\n        repositoryName: override.repositoryName ?? vercel.repositoryName ?? netlify.repositoryName,\n        repositoryUrlFull: override.repositoryUrlFull ?? vercel.repositoryUrlFull ?? netlify.repositoryUrlFull,\n        refHeadName: override.refHeadName ?? vercel.refHeadName ?? netlify.refHeadName,\n        refHeadRevision: override.refHeadRevision ?? vercel.refHeadRevision ?? netlify.refHeadRevision,\n        changeId: override.changeId ?? vercel.changeId ?? netlify.changeId,\n    };\n}\n// Frameworks expose env vars to the browser bundle using a per-framework\n// prefix (Next.js `NEXT_PUBLIC_*`, Vite `VITE_*`, etc.). For each known\n// vendor suffix (e.g. Vercel's `VERCEL_GIT_PROVIDER`, Netlify's\n// `REPOSITORY_URL`) we enumerate the prefixed variants below.\n//\n// IMPORTANT: each `process.env.NAME` MUST be a LITERAL accessor. Webpack\n// DefinePlugin, Next.js, Gatsby, and equivalents substitute env vars at\n// build time only when they see the literal form. Dynamic lookups like\n// `process.env[name]` or iterating a string array are NOT substituted —\n// they would resolve to `undefined` in the browser bundle.\n//\n// The 9 prefixes below are the framework presets Vercel auto-prefixes\n// `VERCEL_*` system vars under (https://vercel.com/docs/environment-variables/framework-environment-variables).\n// Users on platforms without auto-prefixing (Netlify, Cloudflare Pages, custom\n// CI) can manually expose any env var under any of these prefixes and get\n// the same auto-detection.\n//\n// Adding a new framework prefix = one new literal accessor per attribute in\n// each `detectVcsFrom*` function below.\nfunction detectVcsFromVercel() {\n    let provider;\n    let owner;\n    let repo;\n    let ref;\n    let revision;\n    let changeId;\n    try {\n        provider = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.NUXT_PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.NUXT_ENV_VERCEL_GIT_PROVIDER, process?.env?.REACT_APP_VERCEL_GIT_PROVIDER, process?.env?.GATSBY_VERCEL_GIT_PROVIDER, process?.env?.VITE_VERCEL_GIT_PROVIDER, process?.env?.PUBLIC_VERCEL_GIT_PROVIDER, process?.env?.VUE_APP_VERCEL_GIT_PROVIDER, process?.env?.REDWOOD_ENV_VERCEL_GIT_PROVIDER, process?.env?.SANITY_STUDIO_VERCEL_GIT_PROVIDER);\n        owner = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.NUXT_PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.NUXT_ENV_VERCEL_GIT_REPO_OWNER, process?.env?.REACT_APP_VERCEL_GIT_REPO_OWNER, process?.env?.GATSBY_VERCEL_GIT_REPO_OWNER, process?.env?.VITE_VERCEL_GIT_REPO_OWNER, process?.env?.PUBLIC_VERCEL_GIT_REPO_OWNER, process?.env?.VUE_APP_VERCEL_GIT_REPO_OWNER, process?.env?.REDWOOD_ENV_VERCEL_GIT_REPO_OWNER, process?.env?.SANITY_STUDIO_VERCEL_GIT_REPO_OWNER);\n        repo = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.NUXT_PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.NUXT_ENV_VERCEL_GIT_REPO_SLUG, process?.env?.REACT_APP_VERCEL_GIT_REPO_SLUG, process?.env?.GATSBY_VERCEL_GIT_REPO_SLUG, process?.env?.VITE_VERCEL_GIT_REPO_SLUG, process?.env?.PUBLIC_VERCEL_GIT_REPO_SLUG, process?.env?.VUE_APP_VERCEL_GIT_REPO_SLUG, process?.env?.REDWOOD_ENV_VERCEL_GIT_REPO_SLUG, process?.env?.SANITY_STUDIO_VERCEL_GIT_REPO_SLUG);\n        ref = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.NUXT_PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.NUXT_ENV_VERCEL_GIT_COMMIT_REF, process?.env?.REACT_APP_VERCEL_GIT_COMMIT_REF, process?.env?.GATSBY_VERCEL_GIT_COMMIT_REF, process?.env?.VITE_VERCEL_GIT_COMMIT_REF, process?.env?.PUBLIC_VERCEL_GIT_COMMIT_REF, process?.env?.VUE_APP_VERCEL_GIT_COMMIT_REF, process?.env?.REDWOOD_ENV_VERCEL_GIT_COMMIT_REF, process?.env?.SANITY_STUDIO_VERCEL_GIT_COMMIT_REF);\n        revision = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.NUXT_PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.NUXT_ENV_VERCEL_GIT_COMMIT_SHA, process?.env?.REACT_APP_VERCEL_GIT_COMMIT_SHA, process?.env?.GATSBY_VERCEL_GIT_COMMIT_SHA, process?.env?.VITE_VERCEL_GIT_COMMIT_SHA, process?.env?.PUBLIC_VERCEL_GIT_COMMIT_SHA, process?.env?.VUE_APP_VERCEL_GIT_COMMIT_SHA, process?.env?.REDWOOD_ENV_VERCEL_GIT_COMMIT_SHA, process?.env?.SANITY_STUDIO_VERCEL_GIT_COMMIT_SHA);\n        changeId = pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.NUXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.NUXT_ENV_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.REACT_APP_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.GATSBY_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.VITE_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.PUBLIC_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.VUE_APP_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.REDWOOD_ENV_VERCEL_GIT_PULL_REQUEST_ID, process?.env?.SANITY_STUDIO_VERCEL_GIT_PULL_REQUEST_ID);\n    }\n    catch (_ignored) {\n        // process is not defined (or a bundler shimmed it strangely) — skip.\n    }\n    return {\n        providerName: provider,\n        ownerName: owner,\n        repositoryName: repo,\n        repositoryUrlFull: buildRepositoryUrlFromVercel(provider, owner, repo),\n        refHeadName: ref,\n        refHeadRevision: revision,\n        changeId,\n    };\n}\nfunction detectVcsFromNetlify() {\n    // Netlify exposes read-only build env vars (REPOSITORY_URL, BRANCH,\n    // COMMIT_REF, REVIEW_ID) but does not auto-prefix them for browser\n    // exposure. Users must surface them via their framework's prefix\n    // convention themselves (e.g. `NEXT_PUBLIC_REPOSITORY_URL = $REPOSITORY_URL`\n    // for Next.js, `VITE_REPOSITORY_URL = $REPOSITORY_URL` for Vite, etc.).\n    // We enumerate the same 9 framework prefixes as the Vercel path above.\n    let repositoryUrl;\n    let branch;\n    let commit;\n    let reviewId;\n    try {\n        repositoryUrl = pickFirstString(process?.env?.NEXT_PUBLIC_REPOSITORY_URL, process?.env?.NUXT_PUBLIC_REPOSITORY_URL, process?.env?.NUXT_ENV_REPOSITORY_URL, process?.env?.REACT_APP_REPOSITORY_URL, process?.env?.GATSBY_REPOSITORY_URL, process?.env?.VITE_REPOSITORY_URL, process?.env?.PUBLIC_REPOSITORY_URL, process?.env?.VUE_APP_REPOSITORY_URL, process?.env?.REDWOOD_ENV_REPOSITORY_URL, process?.env?.SANITY_STUDIO_REPOSITORY_URL);\n        branch = pickFirstString(process?.env?.NEXT_PUBLIC_BRANCH, process?.env?.NUXT_PUBLIC_BRANCH, process?.env?.NUXT_ENV_BRANCH, process?.env?.REACT_APP_BRANCH, process?.env?.GATSBY_BRANCH, process?.env?.VITE_BRANCH, process?.env?.PUBLIC_BRANCH, process?.env?.VUE_APP_BRANCH, process?.env?.REDWOOD_ENV_BRANCH, process?.env?.SANITY_STUDIO_BRANCH);\n        commit = pickFirstString(process?.env?.NEXT_PUBLIC_COMMIT_REF, process?.env?.NUXT_PUBLIC_COMMIT_REF, process?.env?.NUXT_ENV_COMMIT_REF, process?.env?.REACT_APP_COMMIT_REF, process?.env?.GATSBY_COMMIT_REF, process?.env?.VITE_COMMIT_REF, process?.env?.PUBLIC_COMMIT_REF, process?.env?.VUE_APP_COMMIT_REF, process?.env?.REDWOOD_ENV_COMMIT_REF, process?.env?.SANITY_STUDIO_COMMIT_REF);\n        reviewId = pickFirstString(process?.env?.NEXT_PUBLIC_REVIEW_ID, process?.env?.NUXT_PUBLIC_REVIEW_ID, process?.env?.NUXT_ENV_REVIEW_ID, process?.env?.REACT_APP_REVIEW_ID, process?.env?.GATSBY_REVIEW_ID, process?.env?.VITE_REVIEW_ID, process?.env?.PUBLIC_REVIEW_ID, process?.env?.VUE_APP_REVIEW_ID, process?.env?.REDWOOD_ENV_REVIEW_ID, process?.env?.SANITY_STUDIO_REVIEW_ID);\n    }\n    catch (_ignored) {\n        // process is not defined — skip.\n    }\n    const parsed = parseRepositoryUrl(repositoryUrl);\n    return {\n        providerName: parsed?.providerName,\n        ownerName: parsed?.ownerName,\n        repositoryName: parsed?.repositoryName,\n        repositoryUrlFull: repositoryUrl,\n        refHeadName: branch,\n        refHeadRevision: commit,\n        changeId: reviewId,\n    };\n}\nfunction buildRepositoryUrlFromVercel(provider, owner, repo) {\n    if (!provider || !owner || !repo)\n        return undefined;\n    const host = vcsHostForProvider(provider);\n    if (!host)\n        return undefined;\n    return `https://${host}/${owner}/${repo}`;\n}\n// Single source of truth for provider↔host mapping. Both `vcsHostForProvider`\n// (Vercel path: provider name is known, derive the canonical host) and\n// `vcsProviderForHost` (Netlify path: only the URL is known, derive the\n// provider) consult this map so adding a provider is one edit. Each entry is\n// a list of accepted hostnames; the FIRST entry is the canonical host used\n// when building URLs from a provider name. Subsequent entries are exact\n// aliases — we do not match arbitrary subdomains.\nconst VCS_PROVIDER_HOSTS = {\n    github: [\"github.com\", \"gist.github.com\"],\n    gitlab: [\"gitlab.com\"],\n    bitbucket: [\"bitbucket.org\"],\n};\nfunction vcsHostForProvider(provider) {\n    return VCS_PROVIDER_HOSTS[provider]?.[0];\n}\nfunction parseRepositoryUrl(url) {\n    if (!url)\n        return undefined;\n    let host;\n    let pathname;\n    try {\n        const parsed = new URL(url);\n        host = parsed.host;\n        pathname = parsed.pathname;\n    }\n    catch (_ignored) {\n        return undefined;\n    }\n    const provider = vcsProviderForHost(host);\n    if (!provider)\n        return undefined;\n    const trimmed = pathname.replace(/^\\/+/, \"\").replace(/\\.git$/, \"\");\n    const segments = trimmed.split(\"/\");\n    if (segments.length < 2)\n        return undefined;\n    const ownerName = segments[0];\n    // Bitbucket and GitLab can have nested groups; the repository slug is the\n    // last path segment. GitHub paths are always two segments.\n    const repositoryName = segments[segments.length - 1];\n    if (!ownerName || !repositoryName)\n        return undefined;\n    return { providerName: provider, ownerName, repositoryName };\n}\nfunction vcsProviderForHost(host) {\n    for (const [provider, hosts] of Object.entries(VCS_PROVIDER_HOSTS)) {\n        if (hosts.includes(host))\n            return provider;\n    }\n    return undefined;\n}\n","import { vars } from \"../../vars\";\nimport { sessionId } from \"../../api/session\";\nimport { debug, doc, generateUniqueId, isSessionSampledIn, TRACE_ID_BYTES, warn, win } from \"../../utils\";\nimport { generateTraceId } from \"../../utils/trace-id\";\nimport { generateSpanId } from \"../../utils/span-id\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addEventListener } from \"../../utils/listeners\";\nimport { onLastChance } from \"../../utils/on-last-chance\";\nimport { sendSessionRecordingChunk } from \"../../transport\";\nimport { newChunker } from \"./chunker\";\nimport { buildSessionRecordingLog } from \"./log\";\n/**\n * Global set by `dash0-session-recording.iife.js`. Read by `armSessionRecording()` and by\n * `startSessionRecording()` when called without a recorder.\n */\nexport const GLOBAL_RECORDER_KEY = \"dash0Recorder\";\nlet recorder;\nlet armed = false;\nlet stopRecorder;\nlet chunker;\nlet stream;\nlet lastChanceRegistered = false;\nlet visibilityRegistered = false;\n// Set by the public `stopSessionRecording()`, so a visibility change does not resurrect a recording the\n// consumer deliberately ended. Cleared by an explicit start: registering a recorder or arming.\nlet stoppedByConsumer = false;\n// True while flushing a document that may not live much longer. The chunk emitted then must be sent\n// uncompressed: gzip is asynchronous, and a document that is being unloaded — or that has just been hidden,\n// and may be unloaded or throttled at any moment — may never get to the `fetch()` behind the await.\nlet flushingWhileDocumentMayEnd = false;\n/**\n * Makes a recorder available. Called from the public `startSessionRecording` API, which the\n * `dash0-session-recording.iife.js` script and npm consumers use. Recording starts as soon as both a recorder\n * is registered and `init()` has armed session recording, in either order.\n */\nexport function registerSessionRecorder(r) {\n    recorder = r;\n    stoppedByConsumer = false;\n    if (armed) {\n        start();\n    }\n}\n/**\n * Called from `init()` once configuration is in place and the session is sampled.\n *\n * Recorder precedence: `sessionRecording.recorder` from the init options, then a recorder registered through\n * `startSessionRecording(recorder)`, then `window.dash0Recorder`. The last one is set by\n * `dash0-session-recording.iife.js`, and is the only handover that works when that script executes before the\n * initializer snippet has defined the `dash0` command queue.\n */\nexport function armSessionRecording() {\n    armed = true;\n    stoppedByConsumer = false;\n    if (vars.sessionRecording.recorder) {\n        recorder = vars.sessionRecording.recorder;\n    }\n    else if (!recorder) {\n        const globalRecorder = win?.[GLOBAL_RECORDER_KEY];\n        if (typeof globalRecorder === \"function\") {\n            recorder = globalRecorder;\n        }\n    }\n    if (recorder) {\n        start();\n    }\n}\nexport function stopSessionRecording() {\n    stoppedByConsumer = true;\n    teardown();\n}\nexport function isSessionRecording() {\n    return stopRecorder != null;\n}\n/**\n * The id of the recording currently being captured, if any. Other instrumentations attach it to\n * their signals so a replay can be opened at the moment the signal was produced. Undefined\n * whenever no recording is running — the recorder was never provided, the session was not sampled\n * for recording, or the document is hidden.\n */\nexport function activeRecordingId() {\n    return stopRecorder != null ? stream?.recordingId : undefined;\n}\nconst recordingStateListeners = [];\n/**\n * Subscribes to the recording lifecycle: the listener is called with a recording id when a\n * recording starts, and with `undefined` when it stops. Both happen repeatedly over a session,\n * because recording follows document visibility.\n *\n * This is how instrumentations that only make sense alongside a replay — currently frustration\n * signal detection — know when to observe and when to stay out of the way. Subscribing while a\n * recording is already running calls the listener immediately, so registration order does not\n * matter.\n */\nexport function onRecordingStateChange(listener) {\n    recordingStateListeners.push(listener);\n    const active = activeRecordingId();\n    if (active) {\n        invokeRecordingStateListener(listener, active);\n    }\n}\nfunction notifyRecordingState(recordingId) {\n    for (let i = 0; i < recordingStateListeners.length; i++) {\n        invokeRecordingStateListener(recordingStateListeners[i], recordingId);\n    }\n}\nfunction invokeRecordingStateListener(listener, recordingId) {\n    try {\n        listener(recordingId);\n    }\n    catch (e) {\n        // A misbehaving subscriber must never take the recording down with it.\n        debug(\"Recording state listener failed\", e);\n    }\n}\n/**\n * Stops the recorder and flushes what it buffered. Shared by the public stop and by the visibility handler,\n * which differ only in whether the consumer asked for it.\n */\nfunction teardown() {\n    const wasRecording = stopRecorder != null;\n    if (stopRecorder) {\n        try {\n            stopRecorder();\n        }\n        catch (e) {\n            debug(\"Failed to stop session recorder\", e);\n        }\n        stopRecorder = undefined;\n    }\n    // Before the chunk flush below, so whatever a subscriber emits on its way out is queued for the\n    // same transmission rather than the next one — a teardown is often the last thing a document does.\n    if (wasRecording) {\n        notifyRecordingState(undefined);\n    }\n    chunker?.flush();\n    chunker = undefined;\n    stream = undefined;\n}\n/**\n * Whether the document is not on screen. Treats an absent `visibilityState` as visible, so an environment\n * without the API records exactly as it did before rather than never recording at all.\n *\n * `prerender` counts as hidden: nobody is looking at a prerendered page.\n */\nfunction isDocumentHidden() {\n    const state = doc?.visibilityState;\n    return state != null && state !== \"visible\";\n}\n/**\n * Recording follows visibility: a hidden tab is torn down and a shown tab starts a new recorder run.\n *\n * This is what lets one replayer play a whole session. rrweb's Replayer rebuilds from any full snapshot it\n * plays through, but each rebuild resets its node-id mirror, so events from a document other than the one\n * that produced the newest snapshot would address the wrong nodes. Recording only the visible document keeps\n * the runs of a session from overlapping, so they concatenate into a single coherent stream. `record()` takes\n * a full snapshot when it starts, so every run opens with one and needs no separate snapshot call.\n *\n * Not recording hidden tabs is also why a session stays small: a background tab left open for hours used to\n * record mutations nobody ever saw.\n */\nfunction registerVisibilityHandling() {\n    if (visibilityRegistered || !doc) {\n        return;\n    }\n    visibilityRegistered = true;\n    addEventListener(doc, \"visibilitychange\", () => {\n        if (isDocumentHidden()) {\n            // Flushed the same way as an unload: a hidden document can be discarded or throttled before an\n            // asynchronous gzip completes.\n            flushingWhileDocumentMayEnd = true;\n            try {\n                teardown();\n            }\n            finally {\n                flushingWhileDocumentMayEnd = false;\n            }\n            return;\n        }\n        if (!stoppedByConsumer) {\n            start();\n        }\n    });\n}\nfunction start() {\n    if (stopRecorder) {\n        debug(\"Session recording already running. Ignoring start.\");\n        return;\n    }\n    if (!recorder || !win)\n        return;\n    const settings = vars.sessionRecording;\n    if (!vars.isSessionSampled) {\n        debug(\"Session is not sampled. Session recording will not start.\");\n        return;\n    }\n    if (!isSessionSampledIn(sessionId ?? \"\", settings.samplingRate ?? 100)) {\n        debug(\"Session is not sampled for recording. Session recording will not start.\");\n        return;\n    }\n    if (isUrlIgnored(win.location.href)) {\n        debug(\"Page URL is ignored. Session recording will not start.\");\n        return;\n    }\n    registerVisibilityHandling();\n    if (isDocumentHidden()) {\n        // A tab opened in the background — ctrl+click, `target=_blank`, a restored session — must not record\n        // until it is first shown. The listener above starts it then.\n        debug(\"Document is hidden. Session recording will start once it becomes visible.\");\n        return;\n    }\n    const traceId = generateTraceId(sessionId);\n    const s = {\n        recordingId: generateUniqueId(TRACE_ID_BYTES),\n        traceId,\n        spanId: generateSpanId(traceId),\n    };\n    stream = s;\n    const c = newChunker({\n        maxBytes: settings.chunkMaxBytes ?? 48000,\n        maxMillis: settings.chunkMaxMillis ?? 5000,\n        onChunk: (chunk) => {\n            try {\n                sendSessionRecordingChunk(buildSessionRecordingLog(s, chunk), {\n                    compress: !flushingWhileDocumentMayEnd,\n                });\n            }\n            catch (e) {\n                warn(\"Failed to transmit session recording chunk\", e);\n            }\n        },\n    });\n    chunker = c;\n    try {\n        stopRecorder = recorder({\n            // rrweb can still emit after its stop function ran (trailing throttle timers), and a recorder that failed\n            // to start may have emitted already. Only accept events while this chunker is the active one.\n            emit: (event) => {\n                if (chunker === c)\n                    c.add(event);\n            },\n            checkoutEveryNms: settings.checkoutEveryNms,\n            maskAllInputs: settings.maskAllInputs,\n            maskTextClass: settings.maskTextClass,\n            maskTextSelector: settings.maskTextSelector,\n            maskInputFn: settings.maskInputFn,\n            maskTextFn: settings.maskTextFn,\n            blockClass: settings.blockClass,\n            blockSelector: settings.blockSelector,\n            recordCanvas: settings.recordCanvas,\n            collectFonts: settings.collectFonts,\n        });\n    }\n    catch (e) {\n        warn(\"Failed to start session recorder\", e);\n        abandonChunker(c);\n        return;\n    }\n    if (!stopRecorder) {\n        // rrweb returns undefined when it refuses to record, e.g. in an unsupported environment.\n        warn(\"Session recorder did not start.\");\n        abandonChunker(c);\n        return;\n    }\n    if (!lastChanceRegistered) {\n        lastChanceRegistered = true;\n        onLastChance(() => {\n            flushingWhileDocumentMayEnd = true;\n            try {\n                chunker?.flush();\n            }\n            finally {\n                flushingWhileDocumentMayEnd = false;\n            }\n        });\n    }\n    debug(\"Session recording started\", s);\n    notifyRecordingState(s.recordingId);\n}\n/**\n * The recorder did not start, but it may already have emitted events into `c` and armed its flush timer. Drop\n * them so no chunk of a stream that never started is transmitted later.\n */\nfunction abandonChunker(c) {\n    c.discard();\n    chunker = undefined;\n}\n","import { setTimeout, clearTimeout } from \"../../utils/timers\";\nconst RRWEB_EVENT_TYPE_FULL_SNAPSHOT = 2;\nconst RRWEB_EVENT_TYPE_META = 4;\n/**\n * Buffers rrweb events and hands them out as chunks. A chunk closes when its serialized size reaches\n * `maxBytes`, when `maxMillis` have passed since its first event, when a new full snapshot begins, or when\n * `flush()` is called. Events are serialized once, on arrival, so a flush is a join and not a second stringify.\n */\nexport function newChunker(opts) {\n    let serialized = [];\n    let byteSize = 0;\n    let hasSnapshot = false;\n    let startTime = 0;\n    let endTime = 0;\n    let seq = 0;\n    let pendingFlushTimeout = null;\n    return { add, flush, discard };\n    function add(event) {\n        // A Meta event announces a new full snapshot. Close the current chunk first so the snapshot starts a fresh\n        // one and a replay can begin at that chunk.\n        if (event.type === RRWEB_EVENT_TYPE_META && serialized.length > 0) {\n            flush();\n        }\n        const json = JSON.stringify(event);\n        if (json == null)\n            return;\n        if (serialized.length === 0) {\n            startTime = event.timestamp;\n            pendingFlushTimeout = setTimeout(flush, opts.maxMillis);\n        }\n        serialized.push(json);\n        byteSize += json.length;\n        endTime = event.timestamp;\n        if (event.type === RRWEB_EVENT_TYPE_FULL_SNAPSHOT) {\n            hasSnapshot = true;\n        }\n        if (byteSize >= opts.maxBytes) {\n            flush();\n        }\n    }\n    function discard() {\n        clearPendingFlush();\n        serialized = [];\n        byteSize = 0;\n        hasSnapshot = false;\n    }\n    function clearPendingFlush() {\n        if (pendingFlushTimeout != null) {\n            clearTimeout(pendingFlushTimeout);\n            pendingFlushTimeout = null;\n        }\n    }\n    function flush() {\n        clearPendingFlush();\n        if (serialized.length === 0)\n            return;\n        const chunk = {\n            seq: seq++,\n            body: \"[\" + serialized.join(\",\") + \"]\",\n            eventCount: serialized.length,\n            hasSnapshot,\n            startTime,\n            endTime,\n        };\n        serialized = [];\n        byteSize = 0;\n        hasSnapshot = false;\n        opts.onChunk(chunk);\n    }\n}\n","import { addAttribute } from \"../../utils/otel\";\nimport { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES, SESSION_RECORDING_END_TIME_UNIX_NANO, SESSION_RECORDING_EVENT_COUNT, SESSION_RECORDING_HAS_SNAPSHOT, SESSION_RECORDING_ID, SESSION_RECORDING_SEQ, } from \"../../semantic-conventions\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { toNanosTs } from \"../../utils\";\nexport function buildSessionRecordingLog(stream, chunk) {\n    const attributes = [];\n    addAttribute(attributes, EVENT_NAME, EVENT_NAMES.SESSION_RECORDING);\n    addCommonAttributes(attributes);\n    addAttribute(attributes, SESSION_RECORDING_ID, stream.recordingId);\n    addAttribute(attributes, SESSION_RECORDING_SEQ, { intValue: String(chunk.seq) });\n    addAttribute(attributes, SESSION_RECORDING_EVENT_COUNT, { intValue: String(chunk.eventCount) });\n    addAttribute(attributes, SESSION_RECORDING_HAS_SNAPSHOT, chunk.hasSnapshot);\n    addAttribute(attributes, SESSION_RECORDING_END_TIME_UNIX_NANO, { intValue: toNanosTs(chunk.endTime) });\n    return {\n        timeUnixNano: toNanosTs(chunk.startTime),\n        severityNumber: LOG_SEVERITIES.INFO,\n        severityText: \"INFO\",\n        body: { stringValue: chunk.body },\n        attributes,\n        traceId: stream.traceId,\n        spanId: stream.spanId,\n    };\n}\n","import { doc } from \"../../utils\";\nimport { vars } from \"../../vars\";\nconst MAX_ANCESTOR_DEPTH = 5;\nconst MAX_SELECTOR_LENGTH = 250;\nconst MAX_TEXT_LENGTH = 100;\nconst MAX_CLASSES_PER_ELEMENT = 2;\n/**\n * Attributes an application author controls deliberately, and that therefore survive a refactor\n * better than a generated class name does. Checked in order.\n */\nconst STABLE_ATTRIBUTES = [\"data-testid\", \"data-test-id\", \"data-test\", \"data-cy\", \"name\"];\n// Identifiers safe to embed in a selector unescaped. Anything else (framework-generated ids\n// containing `:` or `.`, emoji, ...) falls through to the structural path.\nconst SAFE_IDENTIFIER = /^[A-Za-z_-][\\w-]*$/;\n// Class names that look generated (CSS modules, styled-components, Tailwind's arbitrary values).\n// They differ between builds, so a selector built from them is useless for grouping.\nconst GENERATED_CLASS = /(^|[_-])[a-z0-9]{5,}$|^css-|^sc-/i;\nconst TEXTUAL_FALLBACK_ATTRIBUTES = [\"aria-label\", \"title\", \"alt\", \"placeholder\"];\n/**\n * Builds a CSS selector for the clicked element. The selector is a best effort at something a\n * human recognises and a backend can group by — it is not guaranteed to resolve to exactly one\n * element, and it is never used to query the DOM.\n *\n * Walks up at most `MAX_ANCESTOR_DEPTH` ancestors, stopping early at the first id or stable data\n * attribute, which carries more meaning than anything further up the tree.\n */\nexport function buildCssSelector(target) {\n    const parts = [];\n    let el = target;\n    // `body` and `html` are on every path and identify nothing, so the walk stops below them.\n    for (let depth = 0; el && depth < MAX_ANCESTOR_DEPTH && el !== doc?.body && el !== doc?.documentElement; depth++) {\n        const anchor = anchorSelector(el);\n        if (anchor) {\n            parts.unshift(anchor);\n            break;\n        }\n        parts.unshift(structuralSelector(el));\n        el = el.parentElement;\n    }\n    return truncate(parts.join(\">\"), MAX_SELECTOR_LENGTH);\n}\n/**\n * A selector that identifies the element on its own, making the ancestor walk unnecessary.\n */\nfunction anchorSelector(el) {\n    const id = attr(el, \"id\");\n    if (id && SAFE_IDENTIFIER.test(id)) {\n        return \"#\" + id;\n    }\n    for (const name of STABLE_ATTRIBUTES) {\n        const value = attr(el, name);\n        if (value && SAFE_IDENTIFIER.test(value)) {\n            return `${tagName(el)}[${name}=\"${value}\"]`;\n        }\n    }\n    return undefined;\n}\nfunction structuralSelector(el) {\n    let selector = tagName(el);\n    const classes = authoredClassNames(el);\n    for (const className of classes) {\n        selector += \".\" + className;\n    }\n    // Only disambiguate when we have to: a position makes the selector brittle, and it adds\n    // nothing when the element is already the only one of its tag among its siblings.\n    if (classes.length === 0) {\n        const index = nthOfType(el);\n        if (index > 0) {\n            selector += `:nth-of-type(${index})`;\n        }\n    }\n    return selector;\n}\nfunction authoredClassNames(el) {\n    const list = el.classList;\n    if (!list)\n        return [];\n    const result = [];\n    for (let i = 0; i < list.length && result.length < MAX_CLASSES_PER_ELEMENT; i++) {\n        const className = list[i];\n        if (SAFE_IDENTIFIER.test(className) && !GENERATED_CLASS.test(className)) {\n            result.push(className);\n        }\n    }\n    return result;\n}\nfunction nthOfType(el) {\n    const siblings = el.parentElement?.children;\n    if (!siblings)\n        return 0;\n    let index = 0;\n    let sameTagCount = 0;\n    for (let i = 0; i < siblings.length; i++) {\n        const sibling = siblings[i];\n        if (sibling.tagName === el.tagName) {\n            sameTagCount++;\n            if (sibling === el) {\n                index = sameTagCount;\n            }\n        }\n    }\n    return sameTagCount > 1 ? index : 0;\n}\n/**\n * The visible label of the clicked element, for a human reading the event without opening the\n * replay (\"Submit order\", not just `button.primary`).\n *\n * Returns undefined whenever the text could carry user data: the element is masked or blocked\n * per the session recording configuration, or it is a field the user types into. Text is what\n * makes a rage click event readable, and also the only part of it that can leak — when in doubt\n * this drops it.\n */\nexport function extractText(target) {\n    if (isMaskedOrBlocked(target)) {\n        return undefined;\n    }\n    const tag = tagName(target);\n    if (tag === \"input\") {\n        const type = (attr(target, \"type\") ?? \"text\").toLowerCase();\n        // Only the label of a button-like input is a label. Every other input holds what the user typed.\n        if (type !== \"button\" && type !== \"submit\" && type !== \"reset\") {\n            return fallbackText(target, [\"aria-label\", \"title\", \"placeholder\"]);\n        }\n        return truncate(normalizeWhitespace(attr(target, \"value\") ?? \"\"), MAX_TEXT_LENGTH) || undefined;\n    }\n    if (tag === \"textarea\" || tag === \"select\") {\n        return fallbackText(target, [\"aria-label\", \"title\"]);\n    }\n    const text = truncate(normalizeWhitespace(target.textContent ?? \"\"), MAX_TEXT_LENGTH);\n    return text || fallbackText(target, TEXTUAL_FALLBACK_ATTRIBUTES);\n}\nfunction fallbackText(el, attributes) {\n    for (const name of attributes) {\n        const value = truncate(normalizeWhitespace(attr(el, name) ?? \"\"), MAX_TEXT_LENGTH);\n        if (value)\n            return value;\n    }\n    return undefined;\n}\n/**\n * Whether the element, or any ancestor, is excluded from the session recording. Reuses the\n * recording configuration rather than introducing a second masking surface: a consumer who\n * marked a subtree as sensitive for the replay means it for this event too, whether or not\n * session recording is actually running.\n */\nexport function isMaskedOrBlocked(el) {\n    const { maskTextClass, maskTextSelector, blockClass, blockSelector } = vars.sessionRecording;\n    if (matchesSelector(el, maskTextSelector) || matchesSelector(el, blockSelector)) {\n        return true;\n    }\n    for (let current = el, depth = 0; current && depth < 32; current = current.parentElement, depth++) {\n        if (matchesClass(current, maskTextClass) || matchesClass(current, blockClass)) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction matchesSelector(el, selector) {\n    if (!selector || !el.closest)\n        return false;\n    try {\n        return el.closest(selector) != null;\n    }\n    catch (_ignored) {\n        // An invalid selector must not take the click handler down with it.\n        return false;\n    }\n}\nfunction matchesClass(el, matcher) {\n    if (!matcher)\n        return false;\n    const className = el.className;\n    if (typeof className !== \"string\")\n        return false; // SVG elements carry an SVGAnimatedString\n    if (typeof matcher === \"string\") {\n        return el.classList?.contains(matcher) ?? false;\n    }\n    return className.split(/\\s+/).some((name) => matcher.test(name));\n}\nfunction attr(el, name) {\n    return el.getAttribute?.(name) ?? undefined;\n}\nfunction tagName(el) {\n    return (el.tagName ?? \"\").toLowerCase();\n}\nfunction normalizeWhitespace(value) {\n    return value.replace(/\\s+/g, \" \").trim();\n}\nfunction truncate(value, maxLength) {\n    return value.length > maxLength ? value.slice(0, maxLength - 1) + \"…\" : value;\n}\n","import { EVENT_NAME, EVENT_NAMES, LOG_SEVERITIES, SESSION_RECORDING_ID } from \"../../semantic-conventions\";\nimport { addCommonAttributes } from \"../../attributes\";\nimport { sendLog } from \"../../transport\";\nimport { addAttribute } from \"../../utils/otel\";\nimport { createRateLimiter, debug, doc, now, toNanosTs, win } from \"../../utils\";\nimport { addEventListener, removeEventListener } from \"../../utils/listeners\";\nimport { clearTimeout, setTimeout } from \"../../utils/timers\";\nimport { onLastChance } from \"../../utils/on-last-chance\";\nimport { onRecordingStateChange } from \"../session-recording\";\nimport { vars } from \"../../vars\";\nimport { buildCssSelector, extractText } from \"./element\";\nlet cluster;\nlet closeTimer;\nlet isExcessiveUsage;\nlet started = false;\n/** The recording clicks are currently being observed for. Undefined means not observing. */\nlet recordingId;\n/**\n * Arms rage click detection. Clicks are only observed while a session recording is running: a rage\n * click is a claim about what the user experienced, and it is only worth making when the replay\n * that substantiates it exists. Detection therefore starts and stops with the recording, which\n * itself follows document visibility.\n */\nexport function startRageClickInstrumentation() {\n    if (started || !win || !doc)\n        return;\n    started = true;\n    // A page that manages to produce this many rage clicks is either a test harness or a click\n    // storm no dashboard benefits from. The limiter keeps a pathological page from filling the\n    // session with duplicates.\n    isExcessiveUsage = createRateLimiter({ maxCallsPerTenMinutes: 32, maxCallsPerTenSeconds: 4 });\n    // A burst that ends in a navigation would otherwise never reach its close timer.\n    onLastChance(closeCluster);\n    onRecordingStateChange(onRecordingState);\n}\nfunction onRecordingState(id) {\n    if (id) {\n        recordingId = id;\n        observe();\n        return;\n    }\n    // Report what the user did before the recording ended while its id is still known — those clicks\n    // happened on record, and the replay covers them.\n    closeCluster();\n    stopObserving();\n    recordingId = undefined;\n}\nfunction observe() {\n    if (!doc)\n        return;\n    // Capture phase: a click whose propagation an application handler stops is still a click the\n    // user made, and is exactly the kind of click a frustrated user repeats.\n    addEventListener(doc, \"click\", onClick, true);\n}\nfunction stopObserving() {\n    if (!doc)\n        return;\n    removeEventListener(doc, \"click\", onClick, true);\n}\nfunction onClick(event) {\n    try {\n        // Detaching the listener is the primary gate; this covers an event delivered while the\n        // recording was being torn down, which would otherwise join a cluster no replay covers.\n        if (!recordingId)\n            return;\n        const mouseEvent = event;\n        // Synthetic clicks (`element.click()`, test drivers, consent managers) say nothing about how\n        // the user feels, and secondary buttons are not how frustration is expressed.\n        if (!mouseEvent.isTrusted || (mouseEvent.button ?? 0) !== 0)\n            return;\n        const target = clickTarget(mouseEvent);\n        if (!target)\n            return;\n        const settings = rageClickSettings();\n        const timestamp = now();\n        if (cluster &&\n            timestamp - cluster.lastMillis <= settings.windowMillis &&\n            isSameSpot(cluster, target, mouseEvent, settings.radiusPixels)) {\n            cluster.count++;\n            cluster.lastMillis = timestamp;\n        }\n        else {\n            closeCluster();\n            cluster = {\n                target,\n                x: mouseEvent.clientX,\n                y: mouseEvent.clientY,\n                count: 1,\n                firstMillis: timestamp,\n                lastMillis: timestamp,\n            };\n        }\n        if (closeTimer != null)\n            clearTimeout(closeTimer);\n        closeTimer = setTimeout(closeCluster, settings.windowMillis);\n    }\n    catch (e) {\n        debug(\"Failed to evaluate click for rage click detection\", e);\n    }\n}\n/**\n * The deepest element the user actually clicked. `composedPath()` sees through shadow roots,\n * where `event.target` only reports the host element.\n */\nfunction clickTarget(event) {\n    const path = event.composedPath?.();\n    const candidate = (path && path.length > 0 ? path[0] : event.target);\n    if (!candidate)\n        return undefined;\n    if (candidate.nodeType === 3 /* text node */) {\n        return candidate.parentElement ?? undefined;\n    }\n    return candidate.nodeType === 1 ? candidate : undefined;\n}\n/**\n * Whether this click belongs to the open cluster. Element identity comes first: repeated clicks\n * on one button are the canonical rage click, and they stay one cluster even when the button\n * moves under the cursor. Proximity covers the rest — clicking a dead area, or a control whose\n * DOM node is replaced between clicks by a re-render.\n */\nfunction isSameSpot(open, target, event, radiusPixels) {\n    if (open.target === target)\n        return true;\n    if (open.target.contains?.(target) || target.contains?.(open.target))\n        return true;\n    const dx = event.clientX - open.x;\n    const dy = event.clientY - open.y;\n    return dx * dx + dy * dy <= radiusPixels * radiusPixels;\n}\n/**\n * Ends the open cluster and reports it when it qualifies.\n */\nfunction closeCluster() {\n    if (closeTimer != null) {\n        clearTimeout(closeTimer);\n        closeTimer = undefined;\n    }\n    const closed = cluster;\n    cluster = undefined;\n    if (!closed)\n        return;\n    if (closed.count < rageClickSettings().minClicks)\n        return;\n    if (isExcessiveUsage()) {\n        debug(\"Suppressing rage click event due to excessive usage\");\n        return;\n    }\n    try {\n        sendRageClick(closed);\n    }\n    catch (e) {\n        debug(\"Failed to report rage click\", e);\n    }\n}\nfunction sendRageClick(closed) {\n    const attributes = [];\n    addAttribute(attributes, EVENT_NAME, EVENT_NAMES.RAGE_CLICK);\n    addCommonAttributes(attributes);\n    // Lets the backend deep-link from the event straight into the replay at this timestamp. Always\n    // present: clicks are only observed while a recording is running.\n    if (recordingId) {\n        addAttribute(attributes, SESSION_RECORDING_ID, recordingId);\n    }\n    const body = [];\n    addAttribute(body, \"click_count\", closed.count);\n    addAttribute(body, \"duration_millis\", closed.lastMillis - closed.firstMillis);\n    addAttribute(body, \"selector\", buildCssSelector(closed.target));\n    addAttribute(body, \"x\", closed.x);\n    addAttribute(body, \"y\", closed.y);\n    const text = extractText(closed.target);\n    if (text) {\n        addAttribute(body, \"text\", text);\n    }\n    const log = {\n        // The burst starts where the frustration starts. Dating the event at its first click also\n        // lines it up with the replay.\n        timeUnixNano: toNanosTs(closed.firstMillis),\n        attributes,\n        severityNumber: LOG_SEVERITIES.WARN,\n        severityText: \"WARN\",\n        body: {\n            kvlistValue: {\n                values: body,\n            },\n        },\n    };\n    sendLog(log);\n}\nfunction rageClickSettings() {\n    const configured = vars.frustrationSignals?.rageClick ?? {};\n    return {\n        minClicks: configured.minClicks ?? 3,\n        windowMillis: configured.windowMillis ?? 1000,\n        radiusPixels: configured.radiusPixels ?? 30,\n    };\n}\n/**\n * Test seam: drops all detector state so each test starts from a clean instrumentation.\n */\nexport function resetRageClickInstrumentation() {\n    if (closeTimer != null)\n        clearTimeout(closeTimer);\n    closeTimer = undefined;\n    cluster = undefined;\n    recordingId = undefined;\n    started = false;\n    stopObserving();\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, isSessionSampledIn, isSafeServiceName, PAGE_LOAD_ID_BYTES, warn, debug, perf, nav, win, NO_VALUE_FALLBACK, pick, loc, } from \"../utils\";\nimport { sessionId, 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 { instrumentXhr } from \"../instrumentations/http/xhr\";\nimport { startNavigationInstrumentation } from \"../instrumentations/navigation\";\nimport { initializeTabId } from \"../utils/tab-id\";\nimport { pickFirstString } from \"./browser-env\";\nimport { applyVcsResourceAttributes } from \"./vcs\";\nimport { armSessionRecording } from \"../instrumentations/session-recording\";\nimport { startRageClickInstrumentation } from \"../instrumentations/frustration/rage-click\";\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        \"sessionRecording\",\n        \"frustrationSignals\",\n        \"enableTransportCompression\",\n    ])));\n    initializePropagators(opts);\n    initializeResourceAttributes(opts);\n    initializeSignalAttributes(opts);\n    initializeTabId();\n    trackSessions(opts.sessionInactivityTimeoutMillis, opts.sessionTerminationTimeoutMillis);\n    if (opts.sessionSamplingRate != null) {\n        const rate = Math.max(0, Math.min(100, opts.sessionSamplingRate));\n        vars.isSessionSampled = sessionId != null ? isSessionSampledIn(sessionId, rate) : rate > 0;\n    }\n    if (!vars.isSessionSampled) {\n        debug(\"Session is not sampled. No telemetry will be transmitted for this session.\");\n        hasBeenInitialised = true;\n        return;\n    }\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    if (isInstrumentationEnabled(\"@dash0/xhr\", opts)) {\n        instrumentXhr();\n    }\n    if (isInstrumentationEnabled(\"@dash0/session-recording\", opts)) {\n        armSessionRecording();\n    }\n    if (isInstrumentationEnabled(\"@dash0/frustration-signals\", opts)) {\n        startRageClickInstrumentation();\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    applyVcsResourceAttributes(opts);\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}\n// Vercel auto-prefixes its system env vars under every framework preset\n// (see https://vercel.com/docs/environment-variables/framework-environment-variables).\n// The shared `FrameworkPrefix` union in `./browser-env` is the single source\n// of truth for which prefixes the SDK recognises. To add a new prefix, edit\n// it there; the literal accessors below pick it up automatically via the\n// typed `process.env` declaration.\nfunction detectEnvironment(opts) {\n    if (opts.environment) {\n        return opts.environment;\n    }\n    try {\n        return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_ENV, process?.env?.NUXT_PUBLIC_VERCEL_ENV, process?.env?.NUXT_ENV_VERCEL_ENV, process?.env?.REACT_APP_VERCEL_ENV, process?.env?.GATSBY_VERCEL_ENV, process?.env?.VITE_VERCEL_ENV, process?.env?.PUBLIC_VERCEL_ENV, process?.env?.VUE_APP_VERCEL_ENV, process?.env?.REDWOOD_ENV_VERCEL_ENV, process?.env?.SANITY_STUDIO_VERCEL_ENV);\n    }\n    catch (_ignored) {\n        return undefined;\n    }\n}\nfunction detectDeploymentName(opts) {\n    if (opts.deploymentName) {\n        return opts.deploymentName;\n    }\n    try {\n        return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_TARGET_ENV, process?.env?.NUXT_PUBLIC_VERCEL_TARGET_ENV, process?.env?.NUXT_ENV_VERCEL_TARGET_ENV, process?.env?.REACT_APP_VERCEL_TARGET_ENV, process?.env?.GATSBY_VERCEL_TARGET_ENV, process?.env?.VITE_VERCEL_TARGET_ENV, process?.env?.PUBLIC_VERCEL_TARGET_ENV, process?.env?.VUE_APP_VERCEL_TARGET_ENV, process?.env?.REDWOOD_ENV_VERCEL_TARGET_ENV, process?.env?.SANITY_STUDIO_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    try {\n        return pickFirstString(process?.env?.NEXT_PUBLIC_VERCEL_BRANCH_URL, process?.env?.NUXT_PUBLIC_VERCEL_BRANCH_URL, process?.env?.NUXT_ENV_VERCEL_BRANCH_URL, process?.env?.REACT_APP_VERCEL_BRANCH_URL, process?.env?.GATSBY_VERCEL_BRANCH_URL, process?.env?.VITE_VERCEL_BRANCH_URL, process?.env?.PUBLIC_VERCEL_BRANCH_URL, process?.env?.VUE_APP_VERCEL_BRANCH_URL, process?.env?.REDWOOD_ENV_VERCEL_BRANCH_URL, process?.env?.SANITY_STUDIO_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}\nfunction merge(target, source) {\n    const result = { ...target };\n    for (const key of Object.keys(source)) {\n        const srcVal = source[key];\n        const dstVal = target[key];\n        if (srcVal !== undefined) {\n            if (srcVal !== null &&\n                typeof srcVal === \"object\" &&\n                !Array.isArray(srcVal) &&\n                typeof dstVal === \"object\" &&\n                dstVal !== null &&\n                !Array.isArray(dstVal)) {\n                // Like the top-level rule above, an explicit `undefined` inside a nested object means \"not provided\" and\n                // must not erase the default. Otherwise `sessionRecording: { maskAllInputs: someUnsetFlag }` would\n                // silently turn input masking off.\n                result[key] = { ...dstVal, ...withoutUndefined(srcVal) };\n            }\n            else {\n                result[key] = srcVal;\n            }\n        }\n    }\n    return result;\n}\nfunction withoutUndefined(obj) {\n    const result = {};\n    for (const key of Object.keys(obj)) {\n        if (obj[key] !== undefined) {\n            result[key] = obj[key];\n        }\n    }\n    return result;\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 { startView } from \"../api/start-view\";\nexport { startSessionRecording, stopSessionRecording } from \"../api/session-recording\";\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","import { debug, win } from \"../utils\";\nimport { GLOBAL_RECORDER_KEY, registerSessionRecorder, stopSessionRecording as stopRecording, } from \"../instrumentations/session-recording\";\n/**\n * Starts session recording with the given recorder. Pass `recorder` from `@dash0/sdk-web/session-recording`.\n * When `recorder` is omitted, the SDK looks for `window.dash0Recorder`, which the\n * `dash0-session-recording.iife.js` script sets. Calling this is not required when that script is used: `init()`\n * picks up `window.dash0Recorder` on its own, regardless of the order in which the scripts execute.\n *\n * Recording only starts once `init()` has run with a sampled session. It is safe to call this before `init()`;\n * the recorder is kept and recording starts as soon as the SDK is initialized. The recording is transmitted\n * as `browser.session_recording` log records that share one trace ID, which embeds the session ID.\n *\n * Only the visible document is recorded. A tab that is hidden — switched away from, or opened in the\n * background — stops recording and flushes what it buffered, and starts a fresh recording when it is shown\n * again. So a session is a sequence of recordings that do not overlap in time, which is what lets the whole\n * session, tab switches included, be replayed as one.\n */\nexport function startSessionRecording(recorder) {\n    // The script entrypoint forwards dash0(\"startSessionRecording\", ...) arguments without type checking,\n    // so malformed calls must degrade to a logged no-op instead of throwing. An uncaught throw here would\n    // abort the command-queue drain and drop all subsequently queued api calls.\n    const r = recorder ?? win?.[GLOBAL_RECORDER_KEY];\n    if (typeof r !== \"function\") {\n        debug(\"startSessionRecording requires a recorder. Import `recorder` from `@dash0/sdk-web/session-recording` or load dash0-session-recording.iife.js. Ignoring call.\");\n        return;\n    }\n    registerSessionRecorder(r);\n}\n/**\n * Stops the running session recording and transmits any buffered events. Calling this when no recording is\n * running is a no-op.\n *\n * Unlike the automatic pause while a tab is hidden, this is final: recording does not resume when the tab\n * becomes visible again. Call `startSessionRecording()` to record again.\n */\nexport function stopSessionRecording() {\n    stopRecording();\n}\n","import { transmitManualPageViewEvent } from \"../instrumentations/navigation/event\";\nimport { debug, nowNanos, win } from \"../utils\";\nimport { vars } from \"../vars\";\n/**\n * Manually records a page view, side-effect free: this never calls `history.pushState` /\n * `history.replaceState` and never mutates `location`. Intended for single-page applications\n * that own their own router and cannot let the SDK touch navigation state (e.g. Electron apps\n * serving the whole app from one root URL, where automatic page-view tracking would report\n * every screen as \"/\").\n *\n * The emitted event is indistinguishable from an automatic virtual page view downstream\n * (same `browser.page_view` event name, same `type` value), with two differences: it is never\n * accompanied by a `change_state` value, since no history mutation occurred, and the\n * `pageViewInstrumentation`'s `generateMetadata` callback is not invoked for manual views —\n * supply title and attributes directly instead.\n *\n * @param name The name of the view, e.g. \"/settings\". Transmitted as the page view's title.\n * @param opts Additional page view details.\n */\nexport function startView(name, opts) {\n    if (vars.endpoints.length === 0) {\n        debug(\"Dash0 SDK has not been initialized. Ignoring startView call.\");\n        return;\n    }\n    // The script entrypoint forwards dash0(\"startView\", ...) arguments without type checking,\n    // so malformed calls must degrade to a logged no-op instead of throwing. An uncaught throw\n    // here would abort the command-queue drain and drop all subsequently queued api calls.\n    if (typeof name !== \"string\" || name.length === 0) {\n        debug(\"startView requires a non-empty view name. Ignoring startView call.\");\n        return;\n    }\n    let url;\n    if (opts?.url != null) {\n        try {\n            url = new URL(opts.url, win?.location.href);\n        }\n        catch (e) {\n            debug(\"Failed to parse startView url option. Falling back to the current location.\", e);\n        }\n    }\n    transmitManualPageViewEvent({\n        timeUnixNano: nowNanos(),\n        title: name,\n        url,\n        attributes: opts?.attributes,\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","capture","length","attachEvent","removeEventListener","detachEvent","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","_","_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","stopVisibilityObservation","visibilityState","createRateLimiter","maxCallsPerTenMinutes","maxCallsPerTenSeconds","totalCallsInLastTenMinutes","totalCallsInLastTenSeconds","NO_VALUE_FALLBACK","roundToTwoDecimals","round","parseUrl","url","_doc$baseURI","URL","baseURI","href","isSameOrigin","origin","SUSPICIOUS_CHARS","INSTRUMENTED_BY_DASH0_SYMBOL","Symbol","for","markAsInstrumented","objOrFunction","wrap","module","wrapper","original","wrapped","concat","TABLE","Uint32Array","c","k","crc32","hexStr","bytes","Uint8Array","parseInt","substring","crc","byte","isSessionSampledIn","sessionId","samplingRate","vars","endpoints","attributes","scope","name","version","__sdkVersion","signalAttributes","ignoreUrls","ignoreErrorMessages","wrapEventHandlers","wrapTimers","propagateTraceHeadersCorsURLs","maxWaitForResourceTimingsMillis","headersToCapture","urlAttributeScrubber","pageViewInstrumentation","trackVirtualPageViews","includeParts","sessionRecording","maskAllInputs","maskTextClass","blockClass","recordCanvas","collectFonts","chunkMaxBytes","chunkMaxMillis","checkoutEveryNms","frustrationSignals","rageClick","minClicks","windowMillis","radiusPixels","enableTransportCompression","isSessionSampled","SERVICE_NAME","SERVICE_NAMESPACE","SERVICE_VERSION","DEPLOYMENT_ENVIRONMENT_NAME","DEPLOYMENT_NAME","DEPLOYMENT_ID","EVENT_NAME","WEB_EVENT_ID","PAGE_LOAD_ID","USER_AGENT","SESSION_RECORDING_ID","USER_ID","USER_NAME","USER_FULL_NAME","USER_EMAIL","USER_HASH","USER_ROLES","EXCEPTION_MESSAGE","EXCEPTION_TYPE","EXCEPTION_STACKTRACE","ERROR_TYPE","URL_FULL","HTTP_REQUEST_METHOD","HTTP_REQUEST_METHOD_ORIGINAL","HTTP_RESPONSE_STATUS_CODE","EVENT_NAMES","PAGE_VIEW","NAVIGATION_TIMING","WEB_VITAL","ERROR","SESSION_RECORDING","RAGE_CLICK","LOG_SEVERITIES","UNSPECIFIED","TRACE","DEBUG","INFO","WARN","FATAL","PAGE_VIEW_TYPE_VALUES","PAGE_VIEW_CHANGE_STATE_VALUES","SESSION_FLAGS","generateSessionId","flags","ephemeralSession","toString","padStart","SESSION_ID_BYTES","SESSION_STORAGE_KEY","STORAGE_SEPARATOR_KEY","MAX_ALLOWED_SESSION_TIMEOUT_MILLIS","trackSessions","sessionInactivityTimeoutMillis","sessionTerminationTimeoutMillis","storedValue","session","values","split","id","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","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","onLastChance","fn","newBatcher","sendInternal","pendingFlushTimeout","queuedItems","flush","send","item","pendingBodySize","pendingRequestCount","_x","_x2","_x3","_send","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","path","body","jsonString","requestBody","byteLength","isCompressed","_context2","prev","next","JSON","stringify","Blob","size","CompressionStream","compress","compressWithGzip","sent","all","map","_ref","_callee","endpoint","headers","response","_context","pathname","endsWith","Authorization","dataset","abrupt","method","keepalive","text","catch","ok","status","statusText","t0","finish","stop","_x5","_x4","_compressWithGzip","_callee3","data","blob","stream","compressedStream","_context3","pipeThrough","Response","arrayBuffer","logBatcher","sendLogs","spanBatcher","spans","resourceSpans","scopeSpans","lazyRateLimiter","limiter","isRateLimited","isSessionRecordingRateLimited","sendLog","log","logs","resourceLogs","scopeLogs","logRecords","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","generateTraceId","TRACE_ID_BYTES","generateSpanId","prefix","SPAN_ID_BYTES","startSpan","kind","startTimeUnixNano","events","links","code","endSpan","durationNano","endTimeUnixNano","addSpanEvent","attributesOrTs","ts","timeUnixNano","setSpanStatus","message","recordException","exception","stack","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","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","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","httpRequestHeaderKey","httpResponseHeaderKey","KNOWN_HTTP_METHODS","HTTP_METHOD_OTHER","isWellKnownHttpMethod","addResourceNetworkEvents","ignoreZeros","addSpanNetworkEvent","propertyName","addResourceSize","encodedLength","encodedBodySize","endSpanOnError","_error$name","errorType","errorToSpanStatus","endSpanOnAbort","determinePropagatorTypes","matchingTypes","propagators","propagator","addTraceContextHttpHeaders","types","wrapFetch","_fetchWithInstrumentation","input","init","fetchInput","request","instrumentation","_copyOfInit","_instrumentation","copyOfInit","performanceObserver","origResponse","_request2","assign","Request","onFetchStart","addResponseData","wrapResponse","_request","signal","aborted","t1","_request$method","originalMethod","isWellKnownMethod","toUpperCase","addGraphQlProperties","_copyOfInit2","propagatorTypes","Headers","append","tryCaptureHttpHeaders","initiatorType","getAttributeKey","some","rxp","originalResponse","readTimeoutMs","onDone","onError","fallbackTs","cbCalled","handleDone","fallbackEndTs","handleError","bodyNeverCompletelyReadTimeout","reader","getReader","ReadableStream","pull","controller","_yield$reader$read","read","releaseLock","close","enqueue","originalSetRequestHeader","XHR_STATE","wrapOpen","rest","openArgs","onOpen","xhr","previousState","completed","state","_state$performanceObs2","_state$listeners2","listeners","_step3$value","cleanupAbandonedRequest","stringUrl","resolvedUrl","normalizedMethod","ignored","wrapSetRequestHeader","_state$capturedReques","lowerName","alreadyTraced","capturedRequestHeaders","onSetRequestHeader","wrapSend","setRequestHeader","_i","_Object$entries","_Object$entries$_i","failureKind","_state$listeners4","_step5$value","_state$failureKind2","raw","getAllResponseHeaders","line","separatorIndex","indexOf","tryCaptureResponseHeaders","onLoadEnd","_step2$value","listener","onSend","_state$performanceObs3","_state$listeners3","_step4$value","cleanupFailedSend","_state$performanceObs","_state$failureKind","_state$listeners","_step$value","endSpanOnSyncSendError","buildAndSendPageViewLog","_opts$title","metaAttributes","customAttributes","title","referrer","pageViewType","changeState","traceContext","transmitPageViewEvent","virtual","replaced","meta","_vars$pageViewInstrum","_vars$pageViewInstrum2","_vars$pageViewInstrum3","generateMetadata","getPageViewMeta","onLoaded","addNavigationTiming","getStartTimeUnixNanos","field","Number","isInteger","currentLocation","shouldIncludeHashChanges","shouldIncludeSearchChanges","onPopState","onUrlChange","onHashChange","newURL","newUrl","parsedUrl","updateCurrentLocation","startNavigationInstrumentation","readyState","startPageLoadInstrumentation","_vars$pageViewInstrum4","history","unused","startPageTransitionInstrumentation","pickFirstString","_values","VCS_FIELD_TO_ATTRIBUTE","providerName","ownerName","repositoryName","repositoryUrlFull","refHeadName","refHeadRevision","changeId","applyVcsResourceAttributes","vcs","_opts$vcs","_override$providerNam","_override$ownerName","_override$repositoryN","_override$repositoryU","_ref5","_override$refHeadName","_ref6","_override$refHeadRevi","_ref7","_override$changeId","override","disableVcsDetection","vercel","provider","owner","repo","ref","revision","_process","_process2","_process3","_process4","_process5","_process6","_process7","_process8","_process9","_process10","_process11","_process12","_process13","_process14","_process15","_process16","_process17","_process18","_process19","_process20","_process21","_process22","_process23","_process24","_process25","_process26","_process27","_process28","_process29","_process30","_process31","_process32","_process33","_process34","_process35","_process36","_process37","_process38","_process39","_process40","_process41","_process42","_process43","_process44","_process45","_process46","_process47","_process48","_process49","_process50","_process51","_process52","_process53","_process54","_process55","_process56","_process57","_process58","_process59","_process60","process","env","NEXT_PUBLIC_VERCEL_GIT_PROVIDER","NUXT_PUBLIC_VERCEL_GIT_PROVIDER","NUXT_ENV_VERCEL_GIT_PROVIDER","REACT_APP_VERCEL_GIT_PROVIDER","GATSBY_VERCEL_GIT_PROVIDER","VITE_VERCEL_GIT_PROVIDER","PUBLIC_VERCEL_GIT_PROVIDER","VUE_APP_VERCEL_GIT_PROVIDER","REDWOOD_ENV_VERCEL_GIT_PROVIDER","SANITY_STUDIO_VERCEL_GIT_PROVIDER","NEXT_PUBLIC_VERCEL_GIT_REPO_OWNER","NUXT_PUBLIC_VERCEL_GIT_REPO_OWNER","NUXT_ENV_VERCEL_GIT_REPO_OWNER","REACT_APP_VERCEL_GIT_REPO_OWNER","GATSBY_VERCEL_GIT_REPO_OWNER","VITE_VERCEL_GIT_REPO_OWNER","PUBLIC_VERCEL_GIT_REPO_OWNER","VUE_APP_VERCEL_GIT_REPO_OWNER","REDWOOD_ENV_VERCEL_GIT_REPO_OWNER","SANITY_STUDIO_VERCEL_GIT_REPO_OWNER","NEXT_PUBLIC_VERCEL_GIT_REPO_SLUG","NUXT_PUBLIC_VERCEL_GIT_REPO_SLUG","NUXT_ENV_VERCEL_GIT_REPO_SLUG","REACT_APP_VERCEL_GIT_REPO_SLUG","GATSBY_VERCEL_GIT_REPO_SLUG","VITE_VERCEL_GIT_REPO_SLUG","PUBLIC_VERCEL_GIT_REPO_SLUG","VUE_APP_VERCEL_GIT_REPO_SLUG","REDWOOD_ENV_VERCEL_GIT_REPO_SLUG","SANITY_STUDIO_VERCEL_GIT_REPO_SLUG","NEXT_PUBLIC_VERCEL_GIT_COMMIT_REF","NUXT_PUBLIC_VERCEL_GIT_COMMIT_REF","NUXT_ENV_VERCEL_GIT_COMMIT_REF","REACT_APP_VERCEL_GIT_COMMIT_REF","GATSBY_VERCEL_GIT_COMMIT_REF","VITE_VERCEL_GIT_COMMIT_REF","PUBLIC_VERCEL_GIT_COMMIT_REF","VUE_APP_VERCEL_GIT_COMMIT_REF","REDWOOD_ENV_VERCEL_GIT_COMMIT_REF","SANITY_STUDIO_VERCEL_GIT_COMMIT_REF","NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","NUXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","NUXT_ENV_VERCEL_GIT_COMMIT_SHA","REACT_APP_VERCEL_GIT_COMMIT_SHA","GATSBY_VERCEL_GIT_COMMIT_SHA","VITE_VERCEL_GIT_COMMIT_SHA","PUBLIC_VERCEL_GIT_COMMIT_SHA","VUE_APP_VERCEL_GIT_COMMIT_SHA","REDWOOD_ENV_VERCEL_GIT_COMMIT_SHA","SANITY_STUDIO_VERCEL_GIT_COMMIT_SHA","NEXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","NUXT_PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","NUXT_ENV_VERCEL_GIT_PULL_REQUEST_ID","REACT_APP_VERCEL_GIT_PULL_REQUEST_ID","GATSBY_VERCEL_GIT_PULL_REQUEST_ID","VITE_VERCEL_GIT_PULL_REQUEST_ID","PUBLIC_VERCEL_GIT_PULL_REQUEST_ID","VUE_APP_VERCEL_GIT_PULL_REQUEST_ID","REDWOOD_ENV_VERCEL_GIT_PULL_REQUEST_ID","SANITY_STUDIO_VERCEL_GIT_PULL_REQUEST_ID","_ignored","buildRepositoryUrlFromVercel","detectVcsFromVercel","netlify","repositoryUrl","branch","commit","reviewId","_process61","_process62","_process63","_process64","_process65","_process66","_process67","_process68","_process69","_process70","_process71","_process72","_process73","_process74","_process75","_process76","_process77","_process78","_process79","_process80","_process81","_process82","_process83","_process84","_process85","_process86","_process87","_process88","_process89","_process90","_process91","_process92","_process93","_process94","_process95","_process96","_process97","_process98","_process99","_process100","NEXT_PUBLIC_REPOSITORY_URL","NUXT_PUBLIC_REPOSITORY_URL","NUXT_ENV_REPOSITORY_URL","REACT_APP_REPOSITORY_URL","GATSBY_REPOSITORY_URL","VITE_REPOSITORY_URL","PUBLIC_REPOSITORY_URL","VUE_APP_REPOSITORY_URL","REDWOOD_ENV_REPOSITORY_URL","SANITY_STUDIO_REPOSITORY_URL","NEXT_PUBLIC_BRANCH","NUXT_PUBLIC_BRANCH","NUXT_ENV_BRANCH","REACT_APP_BRANCH","GATSBY_BRANCH","VITE_BRANCH","PUBLIC_BRANCH","VUE_APP_BRANCH","REDWOOD_ENV_BRANCH","SANITY_STUDIO_BRANCH","NEXT_PUBLIC_COMMIT_REF","NUXT_PUBLIC_COMMIT_REF","NUXT_ENV_COMMIT_REF","REACT_APP_COMMIT_REF","GATSBY_COMMIT_REF","VITE_COMMIT_REF","PUBLIC_COMMIT_REF","VUE_APP_COMMIT_REF","REDWOOD_ENV_COMMIT_REF","SANITY_STUDIO_COMMIT_REF","NEXT_PUBLIC_REVIEW_ID","NUXT_PUBLIC_REVIEW_ID","NUXT_ENV_REVIEW_ID","REACT_APP_REVIEW_ID","GATSBY_REVIEW_ID","VITE_REVIEW_ID","PUBLIC_REVIEW_ID","VUE_APP_REVIEW_ID","REDWOOD_ENV_REVIEW_ID","SANITY_STUDIO_REVIEW_ID","host","VCS_PROVIDER_HOSTS","vcsProviderForHost","segments","parseRepositoryUrl","detectVcsFromNetlify","detectVcs","_Object$keys","_VCS_PROVIDER_HOSTS$p","vcsHostForProvider","github","gitlab","bitbucket","recorder","stopRecorder","chunker","GLOBAL_RECORDER_KEY","armed","lastChanceRegistered","visibilityRegistered","stoppedByConsumer","flushingWhileDocumentMayEnd","registerSessionRecorder","recordingStateListeners","onRecordingStateChange","_stream","active","recordingId","invokeRecordingStateListener","notifyRecordingState","teardown","_chunker","wasRecording","isDocumentHidden","_settings$samplingRat","_settings$chunkMaxByt","_settings$chunkMaxMil","settings","serialized","byteSize","hasSnapshot","seq","json","maxMillis","maxBytes","discard","clearPendingFlush","chunk","eventCount","onChunk","newChunker","intValue","buildSessionRecordingLog","_opts$compress","emit","maskTextSelector","maskInputFn","maskTextFn","blockSelector","abandonChunker","_chunker2","cluster","closeTimer","isExcessiveUsage","STABLE_ATTRIBUTES","SAFE_IDENTIFIER","GENERATED_CLASS","TEXTUAL_FALLBACK_ATTRIBUTES","anchorSelector","el","tagName","structuralSelector","selector","classes","classList","result","className","authoredClassNames","_el$parentElement","siblings","parentElement","children","sameTagCount","sibling","nthOfType","extractText","_target$textContent","_vars$sessionRecordin","matchesSelector","current","depth","matchesClass","isMaskedOrBlocked","tag","_attr","_attr2","fallbackText","truncate","normalizeWhitespace","textContent","_attr3","closest","matcher","_el$classList$contain","_el$classList","contains","_el$getAttribute","_el$getAttribute2","_el$tagName","maxLength","started","onRecordingState","onClick","closeCluster","stopObserving","_mouseEvent$button","mouseEvent","isTrusted","button","_event$composedPath","_candidate$parentElem","composedPath","candidate","nodeType","clickTarget","rageClickSettings","lastMillis","open","_open$target$contains","_open$target","_target$contains","dx","clientX","dy","clientY","isSameSpot","count","firstMillis","closed","parts","documentElement","anchor","unshift","buildCssSelector","sendRageClick","_vars$frustrationSign","_vars$frustrationSign2","_configured$minClicks","_configured$windowMil","_configured$radiusPix","configured","hasBeenInitialised","_loc$hostname","trimmedServiceName","serviceName","rejectSuspiciousServiceName","_loc$hostname2","source","srcVal","dstVal","withoutUndefined","merge","pick","initializePropagators","serviceNamespace","serviceVersion","environment","NEXT_PUBLIC_VERCEL_ENV","NUXT_PUBLIC_VERCEL_ENV","NUXT_ENV_VERCEL_ENV","REACT_APP_VERCEL_ENV","GATSBY_VERCEL_ENV","VITE_VERCEL_ENV","PUBLIC_VERCEL_ENV","VUE_APP_VERCEL_ENV","REDWOOD_ENV_VERCEL_ENV","SANITY_STUDIO_VERCEL_ENV","detectEnvironment","deploymentName","NEXT_PUBLIC_VERCEL_TARGET_ENV","NUXT_PUBLIC_VERCEL_TARGET_ENV","NUXT_ENV_VERCEL_TARGET_ENV","REACT_APP_VERCEL_TARGET_ENV","GATSBY_VERCEL_TARGET_ENV","VITE_VERCEL_TARGET_ENV","PUBLIC_VERCEL_TARGET_ENV","VUE_APP_VERCEL_TARGET_ENV","REDWOOD_ENV_VERCEL_TARGET_ENV","SANITY_STUDIO_VERCEL_TARGET_ENV","detectDeploymentName","deploymentId","NEXT_PUBLIC_VERCEL_BRANCH_URL","NUXT_PUBLIC_VERCEL_BRANCH_URL","NUXT_ENV_VERCEL_BRANCH_URL","REACT_APP_VERCEL_BRANCH_URL","GATSBY_VERCEL_BRANCH_URL","VITE_VERCEL_BRANCH_URL","PUBLIC_VERCEL_BRANCH_URL","VUE_APP_VERCEL_BRANCH_URL","REDWOOD_ENV_VERCEL_BRANCH_URL","SANITY_STUDIO_VERCEL_BRANCH_URL","detectDeploymentId","initializeResourceAttributes","_nav$userAgent","userAgent","additionalSignalAttributes","initializeSignalAttributes","sessionSamplingRate","rate","isInstrumentationEnabled","XMLHttpRequest","proto","instrumentXhr","globalRecorder","armSessionRecording","instrumentations","enabledInstrumentations","_Object$keys2","debugLogger","fullName","email","roles","initApi","reportErrorInternal","severity","level","_logLevels$level","transmitManualPageViewEvent","removeItem"],"mappings":"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","x_google_ignoreList":[23]}