{"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/utils/ignore-rules.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/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\";\nimport { debug } from \"./debug\";\n/**\n * Priority for callbacks that produce data, e.g. by draining their own buffer into the transport. The default.\n */\nexport const LAST_CHANCE_PRIORITY_PRODUCER = 0;\n/**\n * Priority for transport batchers. They run after all producers, so whatever a producer emits on its way out is\n * still transmitted.\n */\nexport const LAST_CHANCE_PRIORITY_BATCH_FLUSH = 10;\n/**\n * Priority for callbacks that send large payloads directly, bypassing the batchers. They run last: keepalive\n * requests share a body size budget, and the small batches must not lose it to a large payload.\n */\nexport const LAST_CHANCE_PRIORITY_LARGE_PAYLOAD = 20;\nlet isUnloading = false;\nlet listenersRegistered = false;\nconst callbacks = [];\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 * Callbacks with a lower `priority` run first.\n */\nexport function onLastChance(fn, priority = LAST_CHANCE_PRIORITY_PRODUCER) {\n    if (isUnloading) {\n        fn();\n    }\n    if (!doc || !win)\n        return;\n    callbacks.push({ fn, priority });\n    // The sort is stable, so equal priorities keep their registration order.\n    callbacks.sort((a, b) => a.priority - b.priority);\n    if (!listenersRegistered) {\n        listenersRegistered = true;\n        registerListeners(doc, win);\n    }\n}\nfunction registerListeners(doc, win) {\n    addEventListener(doc, \"visibilitychange\", function () {\n        if (doc.visibilityState !== \"visible\") {\n            runCallbacks();\n        }\n    });\n    addEventListener(win, \"pagehide\", function () {\n        isUnloading = true;\n        runCallbacks();\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        runCallbacks();\n    });\n}\nfunction runCallbacks() {\n    // A copy, so a callback that registers another one does not change the iteration.\n    for (const callback of callbacks.slice()) {\n        // One failing callback must not keep the others, e.g. the batch flushes, from running.\n        try {\n            callback.fn();\n        }\n        catch (e) {\n            debug(\"Last chance callback failed\", e);\n        }\n    }\n}\n","import { LAST_CHANCE_PRIORITY_BATCH_FLUSH, 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;\n// Compression is asynchronous. A document that is hidden or being unloaded may be gone before `fetch()` is called.\nconst UNLOAD_SEND_OPTIONS = { compress: false };\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. The flush runs after all other\n    // last chance callbacks, so items they send on their way out are part of it.\n    onLastChance(() => flush(UNLOAD_SEND_OPTIONS), LAST_CHANCE_PRIORITY_BATCH_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], UNLOAD_SEND_OPTIONS);\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(opts) {\n        if (pendingFlushTimeout != null) {\n            clearTimeout(pendingFlushTimeout);\n            pendingFlushTimeout = null;\n        }\n        if (queuedItems.length > 0) {\n            sendInternal(queuedItems.slice(), opts);\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\" && (opts?.compress ?? vars.enableTransportCompression)) {\n        requestBody = await compressWithGzip(jsonString);\n        byteLength = requestBody.byteLength;\n        isCompressed = true;\n    }\n    // Send to all endpoints in parallel\n    await Promise.all(vars.endpoints.map(async (endpoint) => {\n        try {\n            const url = new URL(endpoint[\"url\"]);\n            url.pathname = url.pathname + (url.pathname.endsWith(\"/\") ? path.substring(1) : path);\n            const headers = {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${endpoint[\"authToken\"]}`,\n            };\n            if (endpoint.dataset) {\n                headers[\"Dash0-Dataset\"] = endpoint[\"dataset\"];\n            }\n            // Try to compress if supported\n            if (isCompressed) {\n                headers[\"Content-Encoding\"] = \"gzip\";\n            }\n            if (!fetch) {\n                warn(\"Unable to send telemetry, fetch is not defined\");\n                return;\n            }\n            pendingBodySize += byteLength;\n            pendingRequestCount++;\n            const response = await fetch(url, {\n                method: \"POST\",\n                headers,\n                body: requestBody,\n                // The keepalive flag is related to the window.sendBeacon API. This in turn has size limitations.\n                keepalive: pendingBodySize <= BEACON_BODY_SIZE_LIMIT && pendingRequestCount <= 15,\n            });\n            // read the body so the connection can be closed\n            response.text().catch(noop);\n            if (!response.ok) {\n                warn(`Failed to send telemetry to ${url}: ${response.status} ${response.statusText}`);\n            }\n        }\n        catch (error) {\n            warn(`Error sending telemetry to ${endpoint.url}${path}:`, error);\n        }\n        finally {\n            pendingBodySize -= byteLength;\n            pendingRequestCount--;\n        }\n    }));\n}\nasync function compressWithGzip(data) {\n    const blob = new Blob([data]);\n    const stream = blob.stream();\n    const compressedStream = stream.pipeThrough(new CompressionStream(\"gzip\"));\n    return new Response(compressedStream).arrayBuffer();\n}\n","import { newBatcher } from \"./batcher\";\nimport { send } from \"./fetch\";\nimport { vars } from \"../vars\";\nimport { debug, error, createRateLimiter } from \"../utils\";\nconst logBatcher = newBatcher(sendLogs);\nconst spanBatcher = newBatcher(sendSpans);\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, opts) {\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    }, opts).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    }\n    if (attributes.length) {\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 { 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 { addAttribute, withPrefix } from \"../utils/otel\";\nimport { URL_DOMAIN, URL_FRAGMENT, URL_FULL, URL_PATH, URL_QUERY, URL_SCHEME } from \"../semantic-conventions\";\nimport { debug, doc, identity, parseUrl, perf, win } from \"../utils\";\nimport { vars } from \"../vars\";\nimport { matchesAny } from \"../utils/ignore-rules\";\nconst REDACTED = \"REDACTED\";\nfunction scrubUrlAttributes(url) {\n    const parsed = parseUrl(url);\n    if (parsed.username)\n        parsed.username = REDACTED;\n    if (parsed.password)\n        parsed.password = REDACTED;\n    const original = {\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    const attrs = vars.urlAttributeScrubber({ ...original });\n    // A scrubber that only redacts url parts would otherwise still leak them through `url.full`, which is also used\n    // wherever a url is reported as plain text.\n    const parts = [URL_SCHEME, URL_DOMAIN, URL_PATH, URL_QUERY, URL_FRAGMENT];\n    if (attrs[URL_FULL] === parsed.href && parts.some((key) => attrs[key] !== original[key])) {\n        return { ...attrs, [URL_FULL]: buildFullUrl(attrs, parsed) };\n    }\n    return attrs;\n}\n/**\n * Builds `url.full` from scrubbed url attributes. Removed parts are left out. Credentials and port are no url\n * attributes, so they are taken from the parsed url.\n */\nfunction buildFullUrl(attrs, parsed) {\n    const domain = attrs[URL_DOMAIN];\n    const path = attrs[URL_PATH] ?? \"\";\n    const scheme = attrs[URL_SCHEME] === undefined ? \"\" : `${attrs[URL_SCHEME]}:`;\n    // Only urls like `https://host/path` have an authority, and only while they still have a domain.\n    const hasAuthority = parsed.href.startsWith(`${parsed.protocol}//`) && domain !== undefined;\n    const password = parsed.password ? `:${parsed.password}` : \"\";\n    const credentials = parsed.username || password ? `${parsed.username}${password}@` : \"\";\n    const port = parsed.port ? `:${parsed.port}` : \"\";\n    const authority = hasAuthority ? `//${credentials}${domain}${port}` : \"\";\n    // Keeps the host separated from a scrubbed path like `REDACTED`.\n    const pathSeparator = parsed.pathname.startsWith(\"/\") && !path.startsWith(\"/\") ? \"/\" : \"\";\n    const query = attrs[URL_QUERY] === undefined ? \"\" : `?${attrs[URL_QUERY]}`;\n    const fragment = attrs[URL_FRAGMENT] === undefined ? \"\" : `#${attrs[URL_FRAGMENT]}`;\n    return scheme + authority + pathSeparator + path + query + fragment;\n}\nexport function addUrlAttributes(attributes, url, prefix) {\n    const applyPrefix = withPrefix(prefix);\n    try {\n        const attrs = scrubUrlAttributes(url);\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/**\n * Applies the url attribute scrubber to a url that is reported as plain text, e.g. inside a log body or a status\n * message, rather than as url attributes. Only the scrubbed `url.full` value is used.\n */\nexport function scrubUrl(url) {\n    try {\n        return scrubUrlAttributes(url)[URL_FULL] ?? REDACTED;\n    }\n    catch (e) {\n        debug(\"Failed to scrub url\", e);\n        // Mirrors addUrlAttributes: without a user defined scrubber the raw url is kept for debugging purposes.\n        // Otherwise the url cannot be dropped from the surrounding text, so it is redacted entirely.\n        return vars.urlAttributeScrubber === identity ? url : REDACTED;\n    }\n}\nconst ABSOLUTE_URL = /^[a-z][a-z\\d+.-]*:\\/\\//i;\n// What may follow a known url: an optional fragment, then stack frame positions (`:12:5`) or sentence punctuation,\n// then the end of the url. Queries keep `[` `(` `{` unencoded, so these only end a url after the known part.\nconst URL_TAIL = /(#[^\\s\"'`<>()[\\]{}]*?)?(?::\\d+){0,2}[.,;!?]*(?=$|[\\s\"'`<>()[\\]{}])/y;\n/**\n * Error messages and stack traces of inline scripts contain the page url, which can hold sensitive query parameters.\n * Only urls equal to a page url or the given request url are replaced, so unrelated script urls stay untouched.\n * Urls that match ignoreUrls are redacted entirely.\n */\nexport function scrubPageUrls(text, requestUrl) {\n    let result = \"\";\n    let from = 0;\n    for (const { start, end } of findKnownUrls(text, knownUrls(requestUrl))) {\n        // Skipping overlaps scrubs every url once, so scrubbed output is never scrubbed again.\n        if (start < from)\n            continue;\n        const url = text.slice(start, end);\n        result += text.slice(from, start) + (matchesAny(vars.ignoreUrls, url) ? REDACTED : scrubUrl(url));\n        from = end;\n    }\n    return result + text.slice(from);\n}\n/** Page urls and the request url without fragments: stack frames can omit them, and apps remove them from the page. */\nfunction knownUrls(requestUrl) {\n    return [\n        win?.location.href,\n        doc?.referrer,\n        // Inline scripts keep the url the document was loaded with, even after `history.replaceState` removed e.g. OAuth\n        // parameters from `location.href`.\n        perf?.getEntriesByType?.(\"navigation\")[0]?.name,\n        requestUrl,\n    ]\n        .map((url) => url?.split(\"#\")[0])\n        .filter((url) => !!url && ABSOLUTE_URL.test(url));\n}\n/** Occurrences of the urls in the text, leftmost first, and longest first when several start at the same position. */\nfunction findKnownUrls(text, urls) {\n    const matches = [];\n    for (const url of urls) {\n        for (let start = text.indexOf(url); start !== -1; start = text.indexOf(url, start + 1)) {\n            const end = urlEnd(text, start + url.length);\n            if (end !== undefined)\n                matches.push({ start, end });\n        }\n    }\n    return matches.sort((a, b) => a.start - b.start || b.end - a.end);\n}\n/** End of a url whose tail starts at `index`, or `undefined` when the url continues, i.e. it is a different url. */\nfunction urlEnd(text, index) {\n    URL_TAIL.lastIndex = index;\n    const tail = URL_TAIL.exec(text);\n    return tail ? index + (tail[1]?.length ?? 0) : undefined;\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\";\nimport { isUrlIgnored } from \"../utils/ignore-rules\";\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    if (options?.url) {\n        addUrlAttributes(attributes, options.url, PAGE_URL_ATTR_PREFIX);\n    }\n    else if (!win || !isUrlIgnored(win.location.href)) {\n        // Requests and custom events from an ignored page are still sent. They must not leak the page url, which can\n        // contain e.g. OAuth parameters.\n        addUrlAttributes(attributes, win?.location.href ?? NO_VALUE_FALLBACK, PAGE_URL_ATTR_PREFIX);\n    }\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, win } from \"../utils\";\nimport { sendLog } from \"../transport\";\nimport { addAttribute } from \"../utils/otel\";\nimport { addCommonAttributes } from \"../attributes\";\nimport { isUrlIgnored } from \"../utils/ignore-rules\";\nexport function startWebVitalsInstrumentation() {\n    onLCP(onWebVital, { reportAllChanges: true });\n    onINP(onWebVital, { reportAllChanges: true });\n    onCLS(onWebVital, { reportAllChanges: true });\n}\nfunction onWebVital(metric) {\n    if (win && isUrlIgnored(win.location.href))\n        return;\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 { hasOwnProperty, nowNanos, win } from \"../../utils\";\nimport { isErrorMessageIgnored, isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { sendLog } from \"../../transport\";\nimport { onLastChance } from \"../../utils/on-last-chance\";\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, scrubPageUrls } 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;\n// Errors wait up to a second in `seenErrors` before they reach the log batcher. Drain them when the document\n// may be unloaded. The log batcher flushes after this.\nonLastChance(send);\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) || (win && isUrlIgnored(win.location.href))) {\n        return;\n    }\n    if (numberOfDifferentErrorsSeen >= MAX_NUMBER_OF_TRACKED_ERRORS) {\n        seenErrors = {};\n        numberOfDifferentErrorsSeen = 0;\n    }\n    message = scrubPageUrls(String(message)).substring(0, 300);\n    stack = scrubPageUrls(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, scrubPageUrls(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","// Asynchronous function wrapping: The process of wrapping a listener which goes into one function, e.g.\n//\n//  - EventTarget#addEventListener\n//\n// and is removed via another function, e.g.\n//\n//  - EventTarget#removeEventListener\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\n//\n// The registry is consulted on every addEventListener and removeEventListener call of the page, so lookups must not\n// depend on how many listeners a target already has. Wrapped listeners are therefore kept per target in maps keyed by\n// event type and capture flag, and then by the original listener. The registry holds targets weakly, so it never\n// keeps an otherwise unreachable target alive. Whatever else a registration needs to clean up when it ends is\n// released together with its entry.\nconst registry = new WeakMap();\n/**\n * Remembers `wrappedListener` as the wrapper of `eventListener` on `target`. When the same listener is already\n * registered for the same event type and capture flag, the existing wrapper is returned instead, so the browser sees\n * the same function again and ignores the duplicate registration, as it would without wrapping.\n *\n * `release` runs once the registration ends, however it ends: popped by removeEventListener or forgotten after the\n * browser removed the listener itself. It is only kept when `wrappedListener` is registered.\n */\nexport function addWrappedDomEventListener(target, wrappedListener, eventName, eventListener, optionsOrCapture, release) {\n    if (!target)\n        return wrappedListener;\n    let byType = registry.get(target);\n    if (!byType) {\n        byType = new Map();\n        registry.set(target, byType);\n    }\n    const key = registryKey(eventName, optionsOrCapture);\n    let listeners = byType.get(key);\n    if (!listeners) {\n        listeners = new Map();\n        byType.set(key, listeners);\n    }\n    const existing = listeners.get(eventListener);\n    if (existing) {\n        // already registered. Do not allow re-registration\n        return existing.wrapped;\n    }\n    listeners.set(eventListener, { wrapped: wrappedListener, release });\n    return wrappedListener;\n}\n/**\n * Removes and returns the wrapper of `eventListener` on `target`, or `fallback` when none is registered.\n */\nexport function popWrappedDomEventListener(target, eventName, eventListener, optionsOrCapture, fallback) {\n    const byType = target ? registry.get(target) : undefined;\n    const key = registryKey(eventName, optionsOrCapture);\n    const listeners = byType?.get(key);\n    const registration = listeners?.get(eventListener);\n    if (!registration) {\n        return fallback;\n    }\n    listeners.delete(eventListener);\n    if (listeners.size === 0) {\n        byType.delete(key);\n    }\n    registration.release?.();\n    return registration.wrapped;\n}\n/**\n * Drops the registration of `eventListener` on `target`, but only while `wrappedListener` is still its wrapper.\n *\n * Used when the browser removes a listener without a removeEventListener call: after a `once` listener ran, or when\n * the `signal` it was registered with aborted. The identity check keeps a later registration of the same listener\n * intact.\n */\nexport function forgetWrappedDomEventListener(target, eventName, eventListener, optionsOrCapture, wrappedListener) {\n    const listeners = target ? registry.get(target)?.get(registryKey(eventName, optionsOrCapture)) : undefined;\n    if (listeners?.get(eventListener)?.wrapped === wrappedListener) {\n        popWrappedDomEventListener(target, eventName, eventListener, optionsOrCapture);\n    }\n}\n/**\n * Test seam: the number of wrapped listeners currently registered on `target`.\n */\nexport function countWrappedDomEventListeners(target) {\n    let count = 0;\n    registry.get(target)?.forEach((listeners) => (count += listeners.size));\n    return count;\n}\nfunction registryKey(eventName, optionsOrCapture) {\n    return (getDomEventListenerCaptureValue(optionsOrCapture) ? \"c:\" : \"b:\") + eventName;\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}\n","import { vars } from \"../../vars\";\nimport { win } from \"../../utils\";\nimport { addWrappedDomEventListener, forgetWrappedDomEventListener, popWrappedDomEventListener, } from \"./async-function-wrapping\";\nimport { ignoreNextOnErrorEvent, reportUnhandledError } from \"./unhandled-error\";\nexport function startEventHandlerInstrumentation() {\n    if (vars.wrapEventHandlers) {\n        wrapEventTarget(win?.EventTarget);\n    }\n}\n/**\n * Exported for tests only.\n */\nexport function 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        const options = typeof optionsOrCapture === \"object\" && optionsOrCapture !== null ? optionsOrCapture : undefined;\n        const signal = options?.signal;\n        if (signal?.aborted) {\n            // The browser does not register a listener for an aborted signal, so there is nothing to remember.\n            return originalAddEventListener.apply(this, arguments);\n        }\n        // A bare `addEventListener(...)` call runs with an undefined `this` and registers on the global object.\n        const target = this ?? win;\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        const once = Boolean(options?.once);\n        const wrapped = function wrappedEventListener() {\n            if (once) {\n                // The browser removed the listener before invoking it. Without this it would stay in the registry forever.\n                forgetWrappedDomEventListener(target, eventName, fn, optionsOrCapture, wrapped);\n            }\n            try {\n                return fn.apply(this, arguments);\n            }\n            catch (e) {\n                reportUnhandledError(e);\n                ignoreNextOnErrorEvent();\n                throw e;\n            }\n        };\n        // Aborting the signal removes the listener without a removeEventListener call. The abort handler is registered on\n        // the unwrapped method so that it does not end up in the registry itself, and is removed again when the\n        // registration ends otherwise, so that a long-lived signal does not keep the target and listener reachable.\n        const onAbort = () => forgetWrappedDomEventListener(target, eventName, fn, optionsOrCapture, wrapped);\n        const release = signal ? () => originalRemoveEventListener.call(signal, \"abort\", onAbort) : undefined;\n        args[1] = addWrappedDomEventListener(target, wrapped, eventName, fn, optionsOrCapture, release);\n        if (signal && args[1] === wrapped) {\n            originalAddEventListener.call(signal, \"abort\", onAbort, { once: true });\n        }\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        const target = this ?? win;\n        args[1] = popWrappedDomEventListener(target, 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\";\nimport { scrubPageUrls } from \"../../attributes\";\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, requestUrl) {\n    error = scrubException(error, requestUrl);\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/**\n * Error messages and stack traces can contain the page url (inline script frames) and the request url (browser\n * network error messages), so both pass the url attribute scrubber. Non-string values are kept as they are.\n */\nexport function scrubException(error, requestUrl) {\n    const scrub = (value) => (typeof value === \"string\" ? scrubPageUrls(value, requestUrl) : value);\n    if (!error || typeof error !== \"object\")\n        return scrub(error);\n    // Error properties are not enumerable and `name` lives on the prototype, so they are copied explicitly.\n    const scrubbed = {\n        code: error.code,\n        name: scrub(error.name),\n        stack: scrub(error.stack),\n        // Without a message the span status falls back to `String(error)`, which may be a custom text.\n        toString: () => scrubPageUrls(String(error), requestUrl),\n    };\n    // Only a present message is copied, so the fallback above still applies.\n    return (\"message\" in error ? { ...scrubbed, message: scrub(error.message) } : scrubbed);\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, request?.url);\n                }\n            });\n        }\n        catch (e) {\n            performanceObserver.cancel();\n            if (request?.signal?.aborted) {\n                endSpanOnAbort(span);\n            }\n            else {\n                endSpanOnError(span, e, request?.url);\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 copyResponseIdentity(originalResponse, new Response(stream, {\n        status: originalResponse.status,\n        statusText: originalResponse.statusText,\n        headers: originalResponse.headers,\n    }));\n}\n/**\n * A constructed Response always reports `url: \"\"`, `redirected: false` and `type: \"default\"`, because\n * ResponseInit has no option for them. Copy them from the original so that application code like\n * `if (response.redirected) location.href = response.url` keeps working. clone() builds a fresh\n * Response that would report the defaults again, so it has to be patched as well.\n */\nfunction copyResponseIdentity(originalResponse, wrappedResponse) {\n    try {\n        const clone = wrappedResponse.clone;\n        Object.defineProperties(wrappedResponse, {\n            url: { value: originalResponse.url },\n            redirected: { value: originalResponse.redirected },\n            type: { value: originalResponse.type },\n            clone: {\n                value: function () {\n                    return copyResponseIdentity(originalResponse, clone.call(this));\n                },\n            },\n        });\n    }\n    catch (e) {\n        debug(\"failed to copy response identity onto the wrapped response\", e);\n    }\n    return wrappedResponse;\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, scrubException, } from \"./utils\";\nimport { addCommonAttributes, addUrlAttributes, scrubUrl } 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        const message = `XMLHttpRequest failed: ${scrubUrl(state.url)}`;\n        recordException(span, error != null ? scrubException(error, state.url) : { name: failureKind, message });\n        addAttribute(span.attributes, ERROR_TYPE, failureKind);\n        sendSpan(endSpan(span, { code: SPAN_STATUS_ERROR, message }, 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}` }, 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, scrubUrl } from \"../../attributes\";\nimport { sendLog } from \"../../transport\";\nimport { isUrlIgnored, matchesAny } from \"../../utils/ignore-rules\";\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    // The referrer can be an ignored page, e.g. an OAuth callback that redirected to this page.\n    if (doc?.referrer && !matchesAny(vars.ignoreUrls, doc.referrer)) {\n        addAttribute(bodyAttributes, \"referrer\", scrubUrl(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    if (url && isUrlIgnored(url.href))\n        return;\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, scrubUrl } from \"../../attributes\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\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    // Check the original document url: the page may have changed its url via history.replaceState before load.\n    if (nt.name && isUrlIgnored(nt.name))\n        return;\n    const attributes = [];\n    addAttribute(attributes, EVENT_NAME, EVENT_NAMES.NAVIGATION_TIMING);\n    const bodyAttributes = [];\n    addAttribute(bodyAttributes, \"name\", scrubUrl(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 * as localStorage from \"../../utils/local-storage\";\nimport { setTimeout } from \"../../utils/timers\";\nimport { generateTraceId } from \"../../utils/trace-id\";\nimport { generateSpanId } from \"../../utils/span-id\";\nimport { isUrlIgnored } from \"../../utils/ignore-rules\";\nimport { addEventListener } from \"../../utils/listeners\";\nimport { LAST_CHANCE_PRIORITY_LARGE_PAYLOAD, onLastChance } from \"../../utils/on-last-chance\";\nimport { sendSessionRecordingChunk } from \"../../transport\";\nimport { newChunker, RRWEB_EVENT_TYPE_META } 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\";\n/**\n * The recording id of the run that was shown last, shared by all tabs of the origin. A tab that is shown again\n * compares it to its own run to learn whether another tab's run was shown in the meantime.\n */\nexport const SHOWN_RECORDING_STORAGE_KEY = \"d0_rec_shown\";\n/**\n * Serialized size up to which a hidden document holds the events its recorder emits. Past it the recorder stops,\n * and the document takes a full snapshot when it is shown again: a long task for the returning user, traded for\n * the memory of a background tab that keeps changing.\n */\nexport const HIDDEN_EVENTS_MAX_BYTES = 1_000_000;\nlet recorder;\nlet armed = false;\n// The recorder that is running, which is not necessarily `recorder`: a recorder registered while one runs only\n// takes over at the next start.\nlet runningRecorder;\nlet stopRecorder;\n// Incremented whenever a recorder stops or fails to start, so whatever it still emits afterwards is dropped.\nlet recorderGeneration = 0;\nlet chunker;\nlet stream;\n// Set while the document is hidden and its recorder keeps running. Holds what the recorder emits until the\n// document is shown again.\nlet hiddenEvents;\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 && hiddenEvents == 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 isSessionRecording() ? 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. A document that is shown again may continue the\n * recording it had before it was hidden, and then reports that recording's id again.\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. Events held while the document was hidden are dropped: they\n * were never on screen.\n */\nfunction teardown() {\n    const wasRecording = isSessionRecording();\n    stopRunningRecorder();\n    hiddenEvents = undefined;\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}\nfunction stopRunningRecorder() {\n    recorderGeneration++;\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    runningRecorder = 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, which is what lets one replayer play a whole session. rrweb's Replayer rebuilds from\n * any full snapshot it plays through, but each rebuild resets its node-id mirror, so events from a document other\n * than the one that produced the newest snapshot would address the wrong nodes. Transmitting only what the visible\n * document records keeps the runs of a session from overlapping, so they concatenate into a single coherent stream.\n *\n * A hidden document keeps its recorder running and holds back what it emits. When it is shown again and no other\n * run was shown in the meantime, the replay still shows this document, so the held events continue the same run\n * and no new full snapshot is taken — serializing the whole document is a long task the returning user would\n * otherwise feel. When another run was shown, the held events no longer match the replay and a new run opens with\n * a full snapshot instead.\n *\n * A background tab never transmits what it recorded while hidden unless it is shown again, which is what keeps a\n * session small when a tab is left open for hours.\n */\nfunction registerVisibilityHandling() {\n    if (visibilityRegistered || !doc) {\n        return;\n    }\n    visibilityRegistered = true;\n    addEventListener(doc, \"visibilitychange\", () => {\n        if (isDocumentHidden()) {\n            pause();\n            return;\n        }\n        if (stoppedByConsumer) {\n            return;\n        }\n        if (hiddenEvents) {\n            resume();\n        }\n        else {\n            start();\n        }\n    });\n}\nfunction pause() {\n    if (!isSessionRecording()) {\n        return;\n    }\n    notifyRecordingState(undefined);\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        chunker?.flush();\n    }\n    finally {\n        flushingWhileDocumentMayEnd = false;\n    }\n    hiddenEvents = { events: [], bytes: 0, overflowed: false };\n    debug(\"Document is hidden. Session recording is paused.\");\n}\nfunction resume() {\n    const held = hiddenEvents;\n    hiddenEvents = undefined;\n    if (!held) {\n        start();\n        return;\n    }\n    if (held.overflowed || !stream || !chunker || !wasShownLast(stream.recordingId)) {\n        startRunWithSnapshot();\n        return;\n    }\n    for (let i = 0; i < held.events.length; i++) {\n        chunker.add(held.events[i].event, held.events[i].json);\n    }\n    debug(\"Session recording resumed\", stream);\n    notifyRecordingState(stream.recordingId);\n}\n/**\n * Opens a new run with a full snapshot from the running recorder, without the cost of stopping and restarting it.\n * Falls back to a restart, which takes the snapshot as it starts, when the recorder cannot snapshot on demand.\n */\nfunction startRunWithSnapshot() {\n    const r = runningRecorder;\n    chunker?.discard();\n    chunker = undefined;\n    stream = undefined;\n    if (!r?.takeFullSnapshot) {\n        stopRunningRecorder();\n        start();\n        return;\n    }\n    const s = beginRun();\n    try {\n        r.takeFullSnapshot();\n    }\n    catch (e) {\n        warn(\"Failed to take a full session recording snapshot\", e);\n        abandonRun();\n        stopRunningRecorder();\n        start();\n        return;\n    }\n    markShown(s.recordingId);\n    debug(\"Session recording started a new run\", s);\n    notifyRecordingState(s.recordingId);\n}\nfunction onRecorderEvent(event) {\n    if (hiddenEvents) {\n        holdWhileHidden(hiddenEvents, event);\n        return;\n    }\n    chunker?.add(event);\n}\nfunction holdWhileHidden(held, event) {\n    if (held.overflowed) {\n        return;\n    }\n    // A checkout (see `checkoutEveryNms`) opens with a Meta event, and the full snapshot that follows it makes\n    // everything held before it redundant.\n    if (event.type === RRWEB_EVENT_TYPE_META) {\n        held.events = [];\n        held.bytes = 0;\n    }\n    const json = JSON.stringify(event);\n    if (json == null) {\n        return;\n    }\n    held.bytes += json.length;\n    if (held.bytes > HIDDEN_EVENTS_MAX_BYTES) {\n        held.overflowed = true;\n        held.events = [];\n        // Deferred because this runs inside the recorder's emit callback, which must not tear the recorder down.\n        setTimeout(() => {\n            if (hiddenEvents === held) {\n                stopWhileHidden();\n            }\n        }, 0);\n        return;\n    }\n    held.events.push({ event, json });\n}\nfunction stopWhileHidden() {\n    stopRunningRecorder();\n    hiddenEvents = undefined;\n    chunker?.discard();\n    chunker = undefined;\n    stream = undefined;\n    debug(\"Too much changed while the document was hidden. Session recording will restart once it becomes visible.\");\n}\nfunction markShown(recordingId) {\n    try {\n        localStorage.setItem(SHOWN_RECORDING_STORAGE_KEY, recordingId);\n    }\n    catch (e) {\n        debug(\"Failed to store the shown session recording\", e);\n        // A stale value could let another tab believe it was shown last. Without a value, every tab takes a snapshot.\n        try {\n            localStorage.removeItem(SHOWN_RECORDING_STORAGE_KEY);\n        }\n        catch (e2) {\n            debug(\"Failed to clear the shown session recording\", e2);\n        }\n    }\n}\nfunction wasShownLast(recordingId) {\n    try {\n        return localStorage.getItem(SHOWN_RECORDING_STORAGE_KEY) === recordingId;\n    }\n    catch (e) {\n        debug(\"Failed to read the shown session recording\", e);\n        return false;\n    }\n}\nfunction beginRun() {\n    const settings = vars.sessionRecording;\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    chunker = 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    return s;\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 s = beginRun();\n    const r = recorder;\n    const generation = ++recorderGeneration;\n    try {\n        stopRecorder = r({\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 recorder is the active one.\n            emit: (event) => {\n                if (generation === recorderGeneration)\n                    onRecorderEvent(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        abandonRun();\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        abandonRun();\n        return;\n    }\n    runningRecorder = r;\n    if (!lastChanceRegistered) {\n        lastChanceRegistered = true;\n        onLastChance(() => {\n            flushingWhileDocumentMayEnd = true;\n            try {\n                chunker?.flush();\n            }\n            finally {\n                flushingWhileDocumentMayEnd = false;\n            }\n        }, LAST_CHANCE_PRIORITY_LARGE_PAYLOAD);\n    }\n    markShown(s.recordingId);\n    debug(\"Session recording started\", s);\n    notifyRecordingState(s.recordingId);\n}\n/**\n * The run did not start, but its recorder may already have emitted events into the chunker and armed its flush\n * timer. Drop them so no chunk of a stream that never started is transmitted later.\n */\nfunction abandonRun() {\n    recorderGeneration++;\n    chunker?.discard();\n    chunker = undefined;\n    stream = undefined;\n}\n","import { setTimeout, clearTimeout } from \"../../utils/timers\";\nconst RRWEB_EVENT_TYPE_FULL_SNAPSHOT = 2;\nexport const 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, json = JSON.stringify(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        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 { isUrlIgnored } from \"../../utils/ignore-rules\";\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                pageUrl: win.location.href,\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 (isUrlIgnored(closed.pageUrl))\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, { url: closed.pageUrl });\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 transmitted. A tab opened in the background starts recording when it is first\n * shown. A tab that is hidden flushes what it buffered and holds back whatever changes while it is hidden. When\n * it is shown again, it continues the same recording if no other tab of the session was shown in the meantime,\n * and otherwise starts a fresh recording with a new full snapshot. So a session is a sequence of recordings that\n * do not overlap in time, which is what lets the whole 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","k","v","removeItem","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","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","PAGE_URL_ATTR_PREFIX","URL_DOMAIN","URL_FRAGMENT","URL_FULL","URL_PATH","URL_QUERY","URL_SCHEME","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","session","storedValue","values","split","id","lastActivityTime","isNaN","parseSession","minAllowedLastActivityTime","minAllowedStartTime","isSessionValid","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","listenersRegistered","callbacks","onLastChance","fn","priority","runCallbacks","registerListeners","UNLOAD_SEND_OPTIONS","compress","newBatcher","sendInternal","pendingFlushTimeout","queuedItems","flush","send","item","pendingBodySize","pendingRequestCount","_x","_x2","_x3","_send","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","path","body","_opts$compress","jsonString","requestBody","byteLength","isCompressed","_context2","prev","next","JSON","stringify","Blob","size","CompressionStream","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","matchesAny","regexp","len","test","DATA_URL_PREFIX","isUrlIgnored","lowerCaseUrl","startsWith","isTransportRequest","REDACTED","scrubUrlAttributes","parsed","username","password","hostname","protocol","hash","search","parts","some","_attrs$URL_PATH","domain","scheme","hasAuthority","credentials","port","authority","pathSeparator","query","fragment","buildFullUrl","addUrlAttributes","applyPrefix","_toConsumableArray","join","withPrefix","scrubUrl","_scrubUrlAttributes$U","ABSOLUTE_URL","URL_TAIL","RegExp","scrubPageUrls","requestUrl","result","urls","matches","indexOf","urlEnd","findKnownUrls","_perf$getEntriesByTyp","referrer","knownUrls","_step$value","_tail$1$length","_tail$","lastIndex","tail","exec","TAB_ID_STORAGE_KEY","tabId","initializeTabId","addCommonAttributes","options","_win$innerWidth","_win$innerHeight","_nav$connection","attribute","_win$location$href","innerWidth","innerHeight","connectionType","connection","effectiveType","startWebVitalsInstrumentation","_step6","_iterator6","_i2","_arr","onLCP","onWebVital","onINP","onCLS","metric","bodyAttributes","severityNumber","severityText","kvlistValue","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","registry","popWrappedDomEventListener","eventName","eventListener","optionsOrCapture","fallback","_registration$release","byType","registryKey","listeners","registration","release","forgetWrappedDomEventListener","wrappedListener","_registry$get","_listeners$get","Boolean","getDomEventListenerCaptureValue","startEventHandlerInstrumentation","EventTarget","originalAddEventListener","originalRemoveEventListener","_this","signal","aborted","onAbort","existing","addWrappedDomEventListener","_this2","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","scrubException","errorType","errorToSpanStatus","scrub","scrubbed","endSpanOnAbort","determinePropagatorTypes","matchingTypes","propagators","propagator","addTraceContextHttpHeaders","types","wrapFetch","_fetchWithInstrumentation","input","init","fetchInput","request","instrumentation","_copyOfInit","_instrumentation","copyOfInit","performanceObserver","origResponse","_request3","_request4","assign","Request","onFetchStart","addResponseData","wrapResponse","_request","_request2","t1","_request$method","originalMethod","isWellKnownMethod","toUpperCase","addGraphQlProperties","_copyOfInit2","propagatorTypes","Headers","append","tryCaptureHttpHeaders","initiatorType","getAttributeKey","rxp","originalResponse","readTimeoutMs","onDone","onError","fallbackTs","cbCalled","handleDone","fallbackEndTs","handleError","bodyNeverCompletelyReadTimeout","reader","getReader","ReadableStream","pull","controller","_yield$reader$read","read","releaseLock","close","enqueue","copyResponseIdentity","wrappedResponse","clone","defineProperties","redirected","originalSetRequestHeader","XHR_STATE","wrapOpen","rest","openArgs","onOpen","xhr","previousState","completed","state","_state$performanceObs2","_state$listeners2","_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","tryCaptureResponseHeaders","onLoadEnd","_step2$value","listener","onSend","_state$performanceObs3","_state$listeners3","_step4$value","cleanupFailedSend","_state$performanceObs","_state$failureKind","_state$listeners","endSpanOnSyncSendError","buildAndSendPageViewLog","_opts$title","metaAttributes","customAttributes","title","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","runningRecorder","stopRecorder","chunker","hiddenEvents","GLOBAL_RECORDER_KEY","SHOWN_RECORDING_STORAGE_KEY","HIDDEN_EVENTS_MAX_BYTES","armed","recorderGeneration","lastChanceRegistered","visibilityRegistered","stoppedByConsumer","flushingWhileDocumentMayEnd","registerSessionRecorder","stopSessionRecording","_chunker","wasRecording","isSessionRecording","stopRunningRecorder","notifyRecordingState","teardown","recordingStateListeners","onRecordingStateChange","_stream","active","recordingId","invokeRecordingStateListener","isDocumentHidden","registerVisibilityHandling","_chunker2","overflowed","pause","held","wasShownLast","_chunker3","discard","takeFullSnapshot","beginRun","abandonRun","markShown","startRunWithSnapshot","json","resume","onRecorderEvent","_chunker4","_chunker5","holdWhileHidden","e2","_settings$chunkMaxByt","_settings$chunkMaxMil","settings","serialized","byteSize","hasSnapshot","seq","maxMillis","maxBytes","clearPendingFlush","chunk","eventCount","onChunk","newChunker","intValue","buildSessionRecordingLog","_settings$samplingRat","generation","emit","maskTextSelector","maskInputFn","maskTextFn","blockSelector","_chunker6","_chunker7","cluster","closeTimer","isExcessiveUsage","STABLE_ATTRIBUTES","SAFE_IDENTIFIER","GENERATED_CLASS","TEXTUAL_FALLBACK_ATTRIBUTES","anchorSelector","el","tagName","structuralSelector","selector","classes","classList","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","pageUrl","closed","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","stopRecording"],"mappings":"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","x_google_ignoreList":[23]}