PageSourceSearch

https://diks.net/_next/static/chunks/1sij271v10ckb.js

js diks.net collected 2026-09-24 10:27:21 UTC 1,426,411 bytes, 38,790 lines download raw bytes

1;!function(){try { var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&((e._debugIds|| (e._debugIds={}))[n]="a8795eda-1169-ad41-8b9e-d0f246524b9c")}catch(e){}}();
2(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined,
3423755, ((__turbopack_context__, module, exports) => {
4"use strict";
5
6Object.defineProperty(exports, "__esModule", {
7    value: true
8});
9const _deploymentid = __turbopack_context__.r(543369);
10const deploymentId = (0, _deploymentid.getDeploymentId)();
11globalThis.NEXT_DEPLOYMENT_ID = deploymentId;
12if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
13    Object.defineProperty(exports.default, '__esModule', {
14        value: true
15    });
16    Object.assign(exports.default, exports);
17    module.exports = exports.default;
18}
19}),
20974575, ((__turbopack_context__, module, exports) => {
21"use strict";
22
23Object.defineProperty(exports, "__esModule", {
24    value: true
25});
26Object.defineProperty(exports, "getAssetPrefix", {
27    enumerable: true,
28    get: function() {
29        return getAssetPrefix;
30    }
31});
32const _invarianterror = __turbopack_context__.r(312718);
33function getAssetPrefix() {
34    const currentScript = document.currentScript;
35    if (!(currentScript instanceof HTMLScriptElement)) {
36        throw Object.defineProperty(new _invarianterror.InvariantError("Expected document.currentScript to be a <script> element. Received ".concat(currentScript, " instead.")), "__NEXT_ERROR_CODE", {
37            value: "E783",
38            enumerable: false,
39            configurable: true
40        });
41    }
42    const { pathname } = new URL(currentScript.src);
43    const nextIndex = pathname.indexOf('/_next/');
44    if (nextIndex === -1) {
45        throw Object.defineProperty(new _invarianterror.InvariantError("Expected document.currentScript src to contain '/_next/'. Received ".concat(currentScript.src, " instead.")), "__NEXT_ERROR_CODE", {
46            value: "E784",
47            enumerable: false,
48            configurable: true
49        });
50    }
51    return pathname.slice(0, nextIndex);
52}
53if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
54    Object.defineProperty(exports.default, '__esModule', {
55        value: true
56    });
57    Object.assign(exports.default, exports);
58    module.exports = exports.default;
59}
60}),
61396517, ((__turbopack_context__, module, exports) => {
62"use strict";
63
64var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
65/**
66 * Before starting the Next.js runtime and requiring any module, we need to make
67 * sure the following scripts are executed in the correct order:
68 * - Polyfills
69 * - next/script with `beforeInteractive` strategy
70 */ "use strict";
71Object.defineProperty(exports, "__esModule", {
72    value: true
73});
74Object.defineProperty(exports, "appBootstrap", {
75    enumerable: true,
76    get: function() {
77        return appBootstrap;
78    }
79});
80const _assetprefix = __turbopack_context__.r(974575);
81const _setattributesfromprops = __turbopack_context__.r(922737);
82const version = "16.2.12";
83window.next = {
84    version,
85    appDir: true
86};
87function loadScriptsInSequence(scripts, hydrate) {
88    if (!scripts || !scripts.length) {
89        return hydrate();
90    }
91    return scripts.reduce((promise, param)=>{
92        let [src, props] = param;
93        return promise.then(()=>{
94            return new Promise((resolve, reject)=>{
95                const el = document.createElement('script');
96                if (props) {
97                    (0, _setattributesfromprops.setAttributesFromProps)(el, props);
98                }
99                if (src) {
100                    el.src = src;
101                    el.onload = ()=>resolve();
102                    el.onerror = reject;
103                } else if (props) {
104                    el.innerHTML = props.children;
105                    setTimeout(resolve);
106                }
107                document.head.appendChild(el);
108            });
109        });
110    }, Promise.resolve()).catch((err)=>{
111        console.error(err);
112    // Still try to hydrate even if there's an error.
113    }).then(()=>{
114        hydrate();
115    });
116}
117function appBootstrap(hydrate) {
118    const assetPrefix = (0, _assetprefix.getAssetPrefix)();
119    loadScriptsInSequence(self.__next_s, ()=>{
120        // If the static shell is being debugged, skip hydration if the
121        // `__nextppronly` query is present. This is only enabled when the
122        // environment variable `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` is
123        // set to `1`. Otherwise the following is optimized out.
124        if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
125        ;
126        hydrate(assetPrefix);
127    });
128}
129if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
130    Object.defineProperty(exports.default, '__esModule', {
131        value: true
132    });
133    Object.assign(exports.default, exports);
134    module.exports = exports.default;
135}
136}),
137816565, ((__turbopack_context__, module, exports) => {
138"use strict";
139
140Object.defineProperty(exports, "__esModule", {
141    value: true
142});
1430 && (module.exports = {
144    getObjectClassLabel: null,
145    isPlainObject: null
146});
147function _export(target, all) {
148    for(var name in all)Object.defineProperty(target, name, {
149        enumerable: true,
150        get: all[name]
151    });
152}
153_export(exports, {
154    getObjectClassLabel: function() {
155        return getObjectClassLabel;
156    },
157    isPlainObject: function() {
158        return isPlainObject;
159    }
160});
161function getObjectClassLabel(value) {
162    return Object.prototype.toString.call(value);
163}
164function isPlainObject(value) {
165    if (getObjectClassLabel(value) !== '[object Object]') {
166        return false;
167    }
168    const prototype = Object.getPrototypeOf(value);
169    /**
170   * this used to be previously:
171   *
172   * `return prototype === null || prototype === Object.prototype`
173   *
174   * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.
175   *
176   * It was changed to the current implementation since it's resilient to serialization.
177   */ return prototype === null || prototype.hasOwnProperty('isPrototypeOf');
178}
179}),
180302023, ((__turbopack_context__, module, exports) => {
181"use strict";
182
183var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
184"use strict";
185Object.defineProperty(exports, "__esModule", {
186    value: true
187});
1880 && (module.exports = {
189    default: null,
190    getProperError: null
191});
192function _export(target, all) {
193    for(var name in all)Object.defineProperty(target, name, {
194        enumerable: true,
195        get: all[name]
196    });
197}
198_export(exports, {
199    /**
200 * Checks whether the given value is a NextError.
201 * This can be used to print a more detailed error message with properties like `code` & `digest`.
202 */ default: function() {
203        return isError;
204    },
205    getProperError: function() {
206        return getProperError;
207    }
208});
209const _isplainobject = __turbopack_context__.r(816565);
210/**
211 * This is a safe stringify function that handles circular references.
212 * We're using a simpler version here to avoid introducing
213 * the dependency `safe-stable-stringify` into production bundle.
214 *
215 * This helper is used both in development and production.
216 */ function safeStringifyLite(obj) {
217    const seen = new WeakSet();
218    return JSON.stringify(obj, (_key, value)=>{
219        // If value is an object and already seen, replace with "[Circular]"
220        if (typeof value === 'object' && value !== null) {
221            if (seen.has(value)) {
222                return '[Circular]';
223            }
224            seen.add(value);
225        }
226        return value;
227    });
228}
229function isError(err) {
230    return typeof err === 'object' && err !== null && 'name' in err && 'message' in err;
231}
232function getProperError(err) {
233    if (isError(err)) {
234        return err;
235    }
236    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
237    ;
238    return Object.defineProperty(new Error((0, _isplainobject.isPlainObject)(err) ? safeStringifyLite(err) : err + ''), "__NEXT_ERROR_CODE", {
239        value: "E394",
240        enumerable: false,
241        configurable: true
242    });
243}
244}),
245528279, ((__turbopack_context__, module, exports) => {
246"use strict";
247
248Object.defineProperty(exports, "__esModule", {
249    value: true
250});
251Object.defineProperty(exports, "reportGlobalError", {
252    enumerable: true,
253    get: function() {
254        return reportGlobalError;
255    }
256});
257const reportGlobalError = typeof reportError === 'function' ? reportError : (error)=>{
258    // TODO: Dispatch error event
259    globalThis.console.error(error);
260};
261if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
262    Object.defineProperty(exports.default, '__esModule', {
263        value: true
264    });
265    Object.assign(exports.default, exports);
266    module.exports = exports.default;
267}
268}),
269597238, ((__turbopack_context__, module, exports) => {
270"use strict";
271
272var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
273// This module can be shared between both pages router and app router
274"use strict";
275Object.defineProperty(exports, "__esModule", {
276    value: true
277});
2780 && (module.exports = {
279    isRecoverableError: null,
280    onRecoverableError: null
281});
282function _export(target, all) {
283    for(var name in all)Object.defineProperty(target, name, {
284        enumerable: true,
285        get: all[name]
286    });
287}
288_export(exports, {
289    isRecoverableError: function() {
290        return isRecoverableError;
291    },
292    onRecoverableError: function() {
293        return onRecoverableError;
294    }
295});
296const _interop_require_default = __turbopack_context__.r(563141);
297const _bailouttocsr = __turbopack_context__.r(132061);
298const _iserror = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(302023));
299const _reportglobalerror = __turbopack_context__.r(528279);
300const recoverableErrors = new WeakSet();
301const isInstantTest = ("TURBOPACK compile-time value", false) && typeof self !== 'undefined' && !!self.__next_instant_test;
302function isRecoverableError(error) {
303    return recoverableErrors.has(error);
304}
305const onRecoverableError = (error)=>{
306    // x-ref: https://github.com/facebook/react/pull/28736
307    let cause = (0, _iserror.default)(error) && 'cause' in error ? error.cause : error;
308    // Skip certain custom errors which are not expected to be reported on client
309    if ((0, _bailouttocsr.isBailoutToCSRError)(cause)) return;
310    // Instant Navigation Testing API: suppress "server could not finish this
311    // Suspense boundary" errors (React error #419) during instant test mode.
312    // The static shell intentionally has incomplete Suspense boundaries — React
313    // correctly falls back to client rendering, which is expected.
314    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
315    ;
316    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
317    ;
318    (0, _reportglobalerror.reportGlobalError)(cause);
319};
320if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
321    Object.defineProperty(exports.default, '__esModule', {
322        value: true
323    });
324    Object.assign(exports.default, exports);
325    module.exports = exports.default;
326}
327}),
328471217, ((__turbopack_context__) => {
329"use strict";
330
331// MERGED MODULE: [project]/instrumentation-client.ts [app-client] (ecmascript)
332;
333var __TURBOPACK__imported__module__247167__ = __turbopack_context__.i(247167);
334// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/routing/appRouterRoutingInstrumentation.js [app-client] (ecmascript)
335;
336var __TURBOPACK__imported__module__247167__1 = __TURBOPACK__imported__module__247167__;
337var __TURBOPACK__imported__module__519988__ = __turbopack_context__.i(519988);
338var __TURBOPACK__imported__module__225304__ = __turbopack_context__.i(225304);
339var __TURBOPACK__imported__module__605394__ = __turbopack_context__.i(605394);
340// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/helpers.js [app-client] (ecmascript)
341;
342var __TURBOPACK__imported__module__225304__1 = __TURBOPACK__imported__module__225304__;
343var __TURBOPACK__imported__module__951497__ = __turbopack_context__.i(951497);
344var __TURBOPACK__imported__module__250804__ = __turbopack_context__.i(250804);
345var __TURBOPACK__imported__module__682564__ = __turbopack_context__.i(682564);
346var __TURBOPACK__imported__module__662537__ = __turbopack_context__.i(662537);
347// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/browser.js [app-client] (ecmascript)
348;
349var __TURBOPACK__imported__module__453288__ = __turbopack_context__.i(453288);
350var __TURBOPACK__imported__module__225304__2 = __TURBOPACK__imported__module__225304__;
351;
352;
353const WINDOW = __TURBOPACK__imported__module__225304__2["GLOBAL_OBJ"];
354const DEFAULT_MAX_STRING_LENGTH = 80;
355function htmlTreeAsString(elem) {
356    let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
357    if (!elem) {
358        return "<unknown>";
359    }
360    try {
361        let currentElem = elem;
362        const MAX_TRAVERSE_HEIGHT = 5;
363        const out = [];
364        let height = 0;
365        let len = 0;
366        const separator = " > ";
367        const sepLength = separator.length;
368        let nextStr;
369        const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;
370        const maxStringLength = !Array.isArray(options) && options.maxStringLength || DEFAULT_MAX_STRING_LENGTH;
371        while(currentElem && height++ < MAX_TRAVERSE_HEIGHT){
372            nextStr = _htmlElementAsString(currentElem, keyAttrs);
373            if (nextStr === "html" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) {
374                break;
375            }
376            out.push(nextStr);
377            len += nextStr.length;
378            currentElem = currentElem.parentNode;
379        }
380        return out.reverse().join(separator);
381    } catch (unused) {
382        return "<unknown>";
383    }
384}
385function _htmlElementAsString(el, keyAttrs) {
386    const elem = el;
387    const out = [];
388    if (!(elem === null || elem === void 0 ? void 0 : elem.tagName)) {
389        return "";
390    }
391    if (WINDOW.HTMLElement) {
392        if (elem instanceof HTMLElement && elem.dataset) {
393            if (elem.dataset["sentryComponent"]) {
394                return elem.dataset["sentryComponent"];
395            }
396            if (elem.dataset["sentryElement"]) {
397                return elem.dataset["sentryElement"];
398            }
399        }
400    }
401    out.push(elem.tagName.toLowerCase());
402    const keyAttrPairs = (keyAttrs === null || keyAttrs === void 0 ? void 0 : keyAttrs.length) ? keyAttrs.filter((keyAttr)=>elem.getAttribute(keyAttr)).map((keyAttr)=>[
403            keyAttr,
404            elem.getAttribute(keyAttr)
405        ]) : null;
406    if (keyAttrPairs === null || keyAttrPairs === void 0 ? void 0 : keyAttrPairs.length) {
407        keyAttrPairs.forEach((keyAttrPair)=>{
408            out.push("[".concat(keyAttrPair[0], '="').concat(keyAttrPair[1], '"]'));
409        });
410    } else {
411        if (elem.id) {
412            out.push("#".concat(elem.id));
413        }
414        const className = elem.className;
415        if (className && (0, __TURBOPACK__imported__module__453288__["isString"])(className)) {
416            const classes = className.split(/\s+/);
417            for (const c of classes){
418                out.push(".".concat(c));
419            }
420        }
421    }
422    for (const k of [
423        "aria-label",
424        "type",
425        "name",
426        "title",
427        "alt"
428    ]){
429        const attr = elem.getAttribute(k);
430        if (attr) {
431            out.push("[".concat(k, '="').concat(attr, '"]'));
432        }
433    }
434    return out.join("");
435}
436function getLocationHref() {
437    try {
438        return WINDOW.document.location.href;
439    } catch (unused) {
440        return "";
441    }
442}
443function getComponentName(elem) {
444    let maxTraverseHeight = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 5;
445    if (!WINDOW.HTMLElement) {
446        return null;
447    }
448    let currentElem = elem;
449    for(let i = 0; i < maxTraverseHeight; i++){
450        if (!currentElem) {
451            return null;
452        }
453        if (currentElem instanceof HTMLElement) {
454            if (currentElem.dataset["sentryComponent"]) {
455                return currentElem.dataset["sentryComponent"];
456            }
457            if (currentElem.dataset["sentryElement"]) {
458                return currentElem.dataset["sentryElement"];
459            }
460        }
461        currentElem = currentElem.parentNode;
462    }
463    return null;
464}
465;
466;
467const WINDOW1 = __TURBOPACK__imported__module__225304__1["GLOBAL_OBJ"];
468let ignoreOnError = 0;
469function shouldIgnoreOnError() {
470    return ignoreOnError > 0;
471}
472function ignoreNextOnError() {
473    ignoreOnError++;
474    setTimeout(()=>{
475        ignoreOnError--;
476    });
477}
478function wrap(fn) {
479    let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
480    function isFunction(fn2) {
481        return typeof fn2 === "function";
482    }
483    if (!isFunction(fn)) {
484        return fn;
485    }
486    try {
487        const hasOwnWrapper = Object.prototype.hasOwnProperty.call(fn, "__sentry_wrapped__");
488        if (hasOwnWrapper) {
489            const wrapper = fn.__sentry_wrapped__;
490            if (typeof wrapper === "function") {
491                return wrapper;
492            } else {
493                return fn;
494            }
495        }
496        if ((0, __TURBOPACK__imported__module__951497__["getOriginalFunction"])(fn)) {
497            return fn;
498        }
499    } catch (unused) {
500        return fn;
501    }
502    const sentryWrapped = function() {
503        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
504            args[_key] = arguments[_key];
505        }
506        __TURBOPACK__imported__module__225304__1["GLOBAL_OBJ"]._sentryWrappedDepth = (__TURBOPACK__imported__module__225304__1["GLOBAL_OBJ"]._sentryWrappedDepth || 0) + 1;
507        try {
508            const wrappedArguments = args.map((arg)=>wrap(arg, options));
509            return fn.apply(this, wrappedArguments);
510        } catch (ex) {
511            ignoreNextOnError();
512            (0, __TURBOPACK__imported__module__250804__["withScope"])((scope)=>{
513                scope.addEventProcessor((event)=>{
514                    if (options.mechanism) {
515                        (0, __TURBOPACK__imported__module__682564__["addExceptionTypeValue"])(event, void 0, void 0);
516                        (0, __TURBOPACK__imported__module__682564__["addExceptionMechanism"])(event, options.mechanism);
517                    }
518                    event.extra = {
519                        ...event.extra,
520                        arguments: args
521                    };
522                    return event;
523                });
524                (0, __TURBOPACK__imported__module__662537__["captureException"])(ex);
525            });
526            throw ex;
527        } finally{
528            __TURBOPACK__imported__module__225304__1["GLOBAL_OBJ"]._sentryWrappedDepth = (__TURBOPACK__imported__module__225304__1["GLOBAL_OBJ"]._sentryWrappedDepth || 0) - 1;
529        }
530    };
531    try {
532        for(const property in fn){
533            if (Object.prototype.hasOwnProperty.call(fn, property)) {
534                sentryWrapped[property] = fn[property];
535            }
536        }
537    } catch (unused) {}
538    (0, __TURBOPACK__imported__module__951497__["markFunctionWrapped"])(sentryWrapped, fn);
539    (0, __TURBOPACK__imported__module__951497__["addNonEnumerableProperty"])(fn, "__sentry_wrapped__", sentryWrapped);
540    try {
541        const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, "name");
542        if (descriptor.configurable) {
543            Object.defineProperty(sentryWrapped, "name", {
544                get () {
545                    return fn.name;
546                }
547            });
548        }
549    } catch (unused) {}
550    return sentryWrapped;
551}
552function getHttpRequestData() {
553    const url = getLocationHref();
554    const { referrer } = WINDOW1.document || {};
555    const { userAgent } = WINDOW1.navigator || {};
556    const headers = {
557        ...referrer && {
558            Referer: referrer
559        },
560        ...userAgent && {
561            "User-Agent": userAgent
562        }
563    };
564    const request = {
565        url,
566        headers
567    };
568    return request;
569}
570;
571// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/tracing/browserTracingIntegration.js [app-client] (ecmascript)
572;
573// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/idleSpan.js [app-client] (ecmascript)
574;
575var __TURBOPACK__imported__module__250804__1 = __TURBOPACK__imported__module__250804__;
576var __TURBOPACK__imported__module__901020__ = __turbopack_context__.i(901020
576);
577var __TURBOPACK__imported__module__519988__1 = __TURBOPACK__imported__module__519988__;
578var __TURBOPACK__imported__module__272598__ = __turbopack_context__.i(272598);
579var __TURBOPACK__imported__module__10008__ = __turbopack_context__.i(10008);
580// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/should-ignore-span.js [app-client] (ecmascript)
581;
582var __TURBOPACK__imported__module__901020__1 = __TURBOPACK__imported__module__901020__;
583var __TURBOPACK__imported__module__272598__1 = __TURBOPACK__imported__module__272598__;
584var __TURBOPACK__imported__module__821593__ = __turbopack_context__.i(821593);
585;
586;
587;
588function logIgnoredSpan(droppedSpan) {
589    __TURBOPACK__imported__module__272598__1["debug"].log("Ignoring span ".concat(droppedSpan.op, " - ").concat(droppedSpan.description, " because it matches `ignoreSpans`."));
590}
591function shouldIgnoreSpan(span, ignoreSpans) {
592    if (!(ignoreSpans === null || ignoreSpans === void 0 ? void 0 : ignoreSpans.length)) {
593        return false;
594    }
595    for (const pattern of ignoreSpans){
596        if (isStringOrRegExp(pattern)) {
597            if (span.description && (0, __TURBOPACK__imported__module__821593__["isMatchingPattern"])(span.description, pattern)) {
598                __TURBOPACK__imported__module__901020__1["DEBUG_BUILD"] && logIgnoredSpan(span);
599                return true;
600            }
601            continue;
602        }
603        const hasAttributes = !!pattern.attributes && Object.keys(pattern.attributes).length > 0;
604        if (!pattern.name && !pattern.op && !hasAttributes) {
605            continue;
606        }
607        const nameMatches = pattern.name ? span.description && (0, __TURBOPACK__imported__module__821593__["isMatchingPattern"])(span.description, pattern.name) : true;
608        const opMatches = pattern.op ? span.op && (0, __TURBOPACK__imported__module__821593__["isMatchingPattern"])(span.op, pattern.op) : true;
609        const attrsMatch = pattern.attributes ? Object.entries(pattern.attributes).every((param)=>{
610            let [key, valuePattern] = param;
611            var _span_attributes;
612            return _matchesAttributeValue((_span_attributes = span.attributes) === null || _span_attributes === void 0 ? void 0 : _span_attributes[key], valuePattern);
613        }) : true;
614        if (nameMatches && opMatches && attrsMatch) {
615            __TURBOPACK__imported__module__901020__1["DEBUG_BUILD"] && logIgnoredSpan(span);
616            return true;
617        }
618    }
619    return false;
620}
621function _matchesAttributeValue(actual, pat) {
622    if (typeof actual === "string" && (typeof pat === "string" || pat instanceof RegExp)) {
623        return (0, __TURBOPACK__imported__module__821593__["isMatchingPattern"])(actual, pat);
624    }
625    if (Array.isArray(actual) && Array.isArray(pat)) {
626        return actual.length === pat.length && actual.every((v, i)=>v === pat[i]);
627    }
628    return actual === pat;
629}
630function reparentChildSpans(spans, dropSpan) {
631    const droppedSpanParentId = dropSpan.parent_span_id;
632    const droppedSpanId = dropSpan.span_id;
633    if (!droppedSpanParentId) {
634        return;
635    }
636    for (const span of spans){
637        if (span.parent_span_id === droppedSpanId) {
638            span.parent_span_id = droppedSpanParentId;
639        }
640    }
641}
642function isStringOrRegExp(value) {
643    return typeof value === "string" || value instanceof RegExp;
644}
645;
646var __TURBOPACK__imported__module__821061__ = __turbopack_context__.i(821061);
647var __TURBOPACK__imported__module__304661__ = __turbopack_context__.i(304661);
648var __TURBOPACK__imported__module__605394__1 = __TURBOPACK__imported__module__605394__;
649var __TURBOPACK__imported__module__728469__ = __turbopack_context__.i(728469);
650// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js [app-client] (ecmascript)
651;
652var __TURBOPACK__imported__module__250804__2 = __TURBOPACK__imported__module__250804__;
653var __TURBOPACK__imported__module__901020__2 = __TURBOPACK__imported__module__901020__;
654// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/envelope.js [app-client] (ecmascript)
655;
656var __TURBOPACK__imported__module__473753__ = __turbopack_context__.i(473753);
657// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/spans/beforeSendSpan.js [app-client] (ecmascript)
658;
659var __TURBOPACK__imported__module__951497__1 = __TURBOPACK__imported__module__951497__;
660;
661function withStreamedSpan(callback) {
662    (0, __TURBOPACK__imported__module__951497__1["addNonEnumerableProperty"])(callback, "_streamed", true);
663    return callback;
664}
665function isStreamedBeforeSendSpanCallback(callback) {
666    return !!callback && typeof callback === "function" && "_streamed" in callback && !!callback._streamed;
667}
668;
669var __TURBOPACK__imported__module__339435__ = __turbopack_context__.i(339435);
670var __TURBOPACK__imported__module__67486__ = __turbopack_context__.i(67486);
671var __TURBOPACK__imported__module__111139__ = __turbopack_context__.i(111139);
672var __TURBOPACK__imported__module__304661__1 = __TURBOPACK__imported__module__304661__;
673;
674;
675;
676;
677;
678;
679;
680function _enhanceEventWithSdkInfo(event, newSdkInfo) {
681    var _event_sdk, _event_sdk1, _event_sdk2, _event_sdk3;
682    if (!newSdkInfo) {
683        return event;
684    }
685    const eventSdkInfo = event.sdk || {};
686    event.sdk = {
687        ...eventSdkInfo,
688        name: eventSdkInfo.name || newSdkInfo.name,
689        version: eventSdkInfo.version || newSdkInfo.version,
690        integrations: [
691            ...((_event_sdk = event.sdk) === null || _event_sdk === void 0 ? void 0 : _event_sdk.integrations) || [],
692            ...newSdkInfo.integrations || []
693        ],
694        packages: [
695            ...((_event_sdk1 = event.sdk) === null || _event_sdk1 === void 0 ? void 0 : _event_sdk1.packages) || [],
696            ...newSdkInfo.packages || []
697        ],
698        settings: ((_event_sdk2 = event.sdk) === null || _event_sdk2 === void 0 ? void 0 : _event_sdk2.settings) || newSdkInfo.settings ? {
699            ...(_event_sdk3 = event.sdk) === null || _event_sdk3 === void 0 ? void 0 : _event_sdk3.settings,
700            ...newSdkInfo.settings
701        } : void 0
702    };
703    return event;
704}
705function createSessionEnvelope(session, dsn, metadata, tunnel) {
706    const sdkInfo = (0, __TURBOPACK__imported__module__67486__["getSdkMetadataForEnvelopeHeader"])(metadata);
707    const envelopeHeaders = {
708        sent_at: new Date((0, __TURBOPACK__imported__module__111139__["safeDateNow"])()).toISOString(),
709        ...sdkInfo && {
710            sdk: sdkInfo
711        },
712        ...!!tunnel && dsn && {
713            dsn: (0, __TURBOPACK__imported__module__339435__["dsnToString"])(dsn)
714        }
715    };
716    const envelopeItem = "aggregates" in session ? [
717        {
718            type: "sessions"
719        },
720        session
721    ] : [
722        {
723            type: "session"
724        },
725        session.toJSON()
726    ];
727    return (0, __TURBOPACK__imported__module__67486__["createEnvelope"])(envelopeHeaders, [
728        envelopeItem
729    ]);
730}
731function createEventEnvelope(event, dsn, metadata, tunnel) {
732    const sdkInfo = (0, __TURBOPACK__imported__module__67486__["getSdkMetadataForEnvelopeHeader"])(metadata);
733    const eventType = event.type && event.type !== "replay_event" ? event.type : "event";
734    _enhanceEventWithSdkInfo(event, metadata === null || metadata === void 0 ? void 0 : metadata.sdk);
735    const envelopeHeaders = (0, __TURBOPACK__imported__module__67486__["createEventEnvelopeHeaders"])(event, sdkInfo, tunnel, dsn);
736    delete event.sdkProcessingMetadata;
737    const eventItem = [
738        {
739            type: eventType
740        },
741        event
742    ];
743    return (0, __TURBOPACK__imported__module__67486__["createEnvelope"])(envelopeHeaders, [
744        eventItem
745    ]);
746}
747function createSpanEnvelope(spans, client) {
748    function dscHasRequiredProps(dsc2) {
749        return !!dsc2.trace_id && !!dsc2.public_key;
750    }
751    const dsc = (0, __TURBOPACK__imported__module__473753__["getDynamicSamplingContextFromSpan"])(spans[0]);
752    const dsn = client === null || client === void 0 ? void 0 : client.getDsn();
753    const tunnel = client === null || client === void 0 ? void 0 : client.getOptions().tunnel;
754    const headers = {
755        sent_at: new Date((0, __TURBOPACK__imported__module__111139__["safeDateNow"])()).toISOString(),
756        ...dscHasRequiredProps(dsc) && {
757            trace: dsc
758        },
759        ...!!tunnel && dsn && {
760            dsn: (0, __TURBOPACK__imported__module__339435__["dsnToString"])(dsn)
761        }
762    };
763    const { beforeSendSpan, ignoreSpans } = (client === null || client === void 0 ? void 0 : client.getOptions()) || {};
764    const filteredSpans = (ignoreSpans === null || ignoreSpans === void 0 ? void 0 : ignoreSpans.length) ? spans.filter((span)=>{
765        const json = (0, __TURBOPACK__imported__module__304661__1["spanToJSON"])(span);
766        return !shouldIgnoreSpan({
767            description: json.description,
768            op: json.op,
769            attributes: json.data
770        }, ignoreSpans);
771    }) : spans;
772    const droppedSpans = spans.length - filteredSpans.length;
773    if (droppedSpans) {
774        client === null || client === void 0 ? void 0 : client.recordDroppedEvent("before_send", "span", droppedSpans);
775    }
776    const convertToSpanJSON = beforeSendSpan ? (span)=>{
777        const spanJson = (0, __TURBOPACK__imported__module__304661__1["spanToJSON"])(span);
778        const processedSpan = !isStreamedBeforeSendSpanCallback(beforeSendSpan) ? beforeSendSpan(spanJson) : spanJson;
779        if (!processedSpan) {
780            (0, __TURBOPACK__imported__module__304661__1["showSpanDropWarning"])();
781            return spanJson;
782        }
783        return processedSpan;
784    } : __TURBOPACK__imported__module__304661__1["spanToJSON"];
785    const items = [];
786    for (const span of filteredSpans){
787        const spanJson = convertToSpanJSON(span);
788        if (spanJson) {
789            items.push((0, __TURBOPACK__imported__module__67486__["createSpanEnvelopeItem"])(spanJson));
790        }
791    }
792    return (0, __TURBOPACK__imported__module__67486__["createEnvelope"])(headers, items);
793}
794;
795var __TURBOPACK__imported__module__519988__2 = __TURBOPACK__imported__module__519988__;
796var __TURBOPACK__imported__module__272598__2 = __TURBOPACK__imported__module__272598__;
797var __TURBOPACK__imported__module__373382__ = __turbopack_context__.i(373382);
798var __TURBOPACK__imported__module__304661__2 = __TURBOPACK__imported__module__304661__;
799var __TURBOPACK__imported__module__605394__2 = __TURBOPACK__imported__module__605394__;
800var __TURBOPACK__imported__module__473753__1 = __TURBOPACK__imported__module__473753__;
801// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/logSpans.js [app-client] (ecmascript)
802;
803var __TURBOPACK__imported__module__901020__3 = __TURBOPACK__imported__module__901020__;
804var __TURBOPACK__imported__module__272598__3 = __TURBOPACK__imported__module__272598__;
805var __TURBOPACK__imported__module__304661__3 = __TURBOPACK__imported__module__304661__;
806;
807;
808;
809function logSpanStart(span) {
810    if (!__TURBOPACK__imported__module__901020__3["DEBUG_BUILD"]) return;
811    const { description = "< unknown name >", op = "< unknown op >", parent_span_id: parentSpanId } = (0, __TURBOPACK__imported__module__304661__3["spanToJSON"])(span);
812    const { spanId } = span.spanContext();
813    const sampled = (0, __TURBOPACK__imported__module__304661__3["spanIsSampled"])(span);
814    const rootSpan = (0, __TURBOPACK__imported__module__304661__3["getRootSpan"])(span);
815    const isRootSpan = rootSpan === span;
816    const header = "[Tracing] Starting ".concat(sampled ? "sampled" : "unsampled", " ").concat(isRootSpan ? "root " : "", "span");
817    const infoParts = [
818        "op: ".concat(op),
819        "name: ".concat(description),
820        "ID: ".concat(spanId)
821    ];
822    if (parentSpanId) {
823        infoParts.push("parent ID: ".concat(parentSpanId));
824    }
825    if (!isRootSpan) {
826        const { op: op2, description: description2 } = (0, __TURBOPACK__imported__module__304661__3["spanToJSON"])(rootSpan);
827        infoParts.push("root ID: ".concat(rootSpan.spanContext().spanId));
828        if (op2) {
829            infoParts.push("root op: ".concat(op2));
830        }
831        if (description2) {
832            infoParts.push("root description: ".concat(description2));
833        }
834    }
835    __TURBOPACK__imported__module__272598__3["debug"].log("".concat(header, "\n  ").concat(infoParts.join("\n  ")));
836}
837function logSpanEnd(span) {
838    if (!__TURBOPACK__imported__module__901020__3["DEBUG_BUILD"]) return;
839    const { description = "< unknown name >", op = "< unknown op >" } = (0, __TURBOPACK__imported__module__304661__3["spanToJSON"])(span);
840    const { spanId } = span.spanContext();
841    const rootSpan = (0, __TURBOPACK__imported__module__304661__3["getRootSpan"])(span);
842    const isRootSpan = rootSpan === span;
843    const msg = '[Tracing] Finishing "'.concat(op, '" ').concat(isRootSpan ? "root " : "", 'span "').concat(description, '" with ID ').concat(spanId);
844    __TURBOPACK__imported__module__272598__3["debug"].log(msg);
845}
846;
847// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/measurement.js [app-client] (ecmascript)
848;
849var __TURBOPACK__imported__module__901020__4 = __TURBOPACK__imported__module__901020__;
850var __TURBOPACK__imported__module__519988__3 = __TURBOPACK__imported__module__519988__;
851var __TURBOPACK__imported__module__272598__4 = __TURBOPACK__imported__module__272598__;
852var __TURBOPACK__imported__module__304661__4 = __TURBOPACK__imported__module__304661__;
853;
854;
855;
856;
857function setMeasurement(name, value, unit) {
858    let activeSpan = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : (0, __TURBOPACK__imported__module__304661__4["getActiveSpan"])();
859    const rootSpan = activeSpan && (0, __TURBOPACK__imported__module__304661__4["getRootSpan"])(activeSpan);
860    if (rootSpan) {
861        __TURBOPACK__imported__module__901020__4["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__4["debug"].log("[Measurement] Setting measurement on root span: ".concat(name, " = ").concat(value, " ").concat(unit));
862        rootSpan.addEvent(name, {
863            [__TURBOPACK__imported__module__519988__3["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE"]]: value,
864            [__TURBOPACK__imported__module__519988__3["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT"]]: unit
865        });
866    }
867}
868function timedEventsToMeasurements(events) {
869    if (!events || events.length === 0) {
870        return void 0;
871    }
872    const measurements = {};
873    events.forEach((event)=>{
874        const attributes = event.attributes || {};
875        const unit = attributes[__TURBOPACK__imported__module__519988__3["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT"]];
876        const value = attributes[__TURBOPACK__imported__module__519988__3["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE"]];
877        if (typeof unit === "string" && typeof value === "number") {
878            measurements[event.name] = {
879                value,
880                unit
881            };
882        }
883    });
884    return measurements;
885}
886;
887// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/segmentSpanCaptureStrategy.js [app-client] (ecmascript)
888;
889var __TURBOPACK__imported__module__923288__ = __turbopack_context__.i(923288);
890;
891function setSegmentSpanCaptureStrategy(strategy) {
892    (0, __TURBOPACK__imported__module__923288__["getSentryCarrier"])((0, __TURBOPACK__imported__module__923288__["getMainCarrier"])()).segmentSpanCaptureStrategy = strategy;
893}
894function getSegmentSpanCaptureStrategy() {
895    return (0, __TURBOPACK__imported__module__923288__["getSentryCarrier"])((0, __TURBOPACK__imported__module__923288__["getMainCarrier"])()).segmentSpanCaptureStrategy;
896}
897;
898// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/spans/hasSpanStreamingEnabled.js [app-client] (ecmascript)
899;
900function hasSpanStreamingEnabled(client) {
901    return client.getOptions().traceLifecycle === "stream";
902}
903;
904var __TURBOPACK__imported__module__242222__ = __turbopack_context__.i(242222);
905;
906;
907;
908;
909;
910;
911;
912;
913;
914;
915;
916;
917;
918;
919const MAX_SPAN_COUNT = 1e3;
920class SentrySpan {
921    /** @inheritDoc */ addLink(link) {
922        if (this._frozen) {
923            return this;
924        }
925        if (this._links) {
926            this._links.push(link);
927        } else {
928            this._links = [
929                link
930            ];
931        }
932        return this;
933    }
934    /** @inheritDoc */ addLinks(links) {
935        if (this._frozen) {
936            return this;
937        }
938        if (this._links) {
939            this._links.push(...links);
940        } else {
941            this._links = links;
942        }
943        return this;
944    }
945    /**
946   * This should generally not be used,
947   * but it is needed for being compliant with the OTEL Span interface.
948   *
949   * @hidden
950   * @internal
951   */ recordException(_exception, _time) {}
952    /** @inheritdoc */ spanContext() {
953        const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;
954        return {
955            spanId,
956            traceId,
957            traceFlags: sampled ? __TURBOPACK__imported__module__304661__2["TRACE_FLAG_SAMPLED"] : __TURBOPACK__imported__module__304661__2["TRACE_FLAG_NONE"]
958        };
959    }
960    /** @inheritdoc */ setAttribute(key, value) {
961        if (this._frozen) {
962            return this;
963        }
964        if (value === void 0) {
965            delete this._attributes[key];
966        } else {
967            this._attributes[key] = value;
968        }
969        if (key === __TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"] && value !== void 0 && (0, __TURBOPACK__imported__module__242222__["spanShouldInferOtelSource"])(this)) {
970            (0, __TURBOPACK__imported__module__242222__["markSpanSourceAsExplicit"])(this);
971        }
972        return this;
973    }
974    /** @inheritdoc */ setAttributes(attributes) {
975        Object.keys(attributes).forEach((key)=>this.setAttribute(key, attributes[key]));
976        return this;
977    }
978    /**
979   * This should generally not be used,
980   * but we need it for browser tracing where we want to adjust the start time afterwards.
981   * USE THIS WITH CAUTION!
982   *
983   * @hidden
984   * @internal
985   */ updateStartTime(timeInput) {
986        if (this._frozen) {
987            return;
988        }
989        this._startTime = (0, __TURBOPACK__imported__module__304661__2["spanTimeInputToSeconds"])(timeInput);
990    }
991    /**
992   * @inheritDoc
993   */ setStatus(value) {
994        if (this._frozen) {
995            return this;
996        }
997        this._status = value;
998        return this;
999    }
1000    /**
1001   * @inheritDoc
1002   */ updateName(name) {
1003        if (this._frozen) {
1004            return this;
1005        }
1006        this._name = name;
1007        if (!(0, __TURBOPACK__imported__module__242222__["spanShouldInferOtelSource"])(this)) {
1008            this.setAttribute(__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"], "custom");
1009        }
1010        return this;
1011    }
1012    /** @inheritdoc */ end(endTimestamp) {
1013        if (this._endTime) {
1014            this._frozen = (0, __TURBOPACK__imported__module__242222__["spanIsTracerProviderSpan"])(this);
1015            return;
1016        }
1017        this._endTime = (0, __TURBOPACK__imported__module__304661__2["spanTimeInputToSeconds"])(endTimestamp);
1018        logSpanEnd(this);
1019        this._onSpanEnded();
1020        this._frozen = (0, __TURBOPACK__imported__module__242222__["spanIsTracerProviderSpan"])(this);
1021    }
1022    /**
1023   * Get JSON representation of this span.
1024   *
1025   * @hidden
1026   * @internal This method is purely for internal purposes and should not be used outside
1027   * of SDK code. If you need to get a JSON representation of a span,
1028   * use `spanToJSON(span)` instead.
1029   */ getSpanJSON() {
1030        return {
1031            data: this._attributes,
1032            description: this._name,
1033            op: this._attributes[__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_OP"]],
1034            parent_span_id: this._parentSpanId,
1035            span_id: this._spanId,
1036            start_timestamp: this._startTime,
1037            status: (0, __TURBOPACK__imported__module__304661__2["getStatusMessage"])(this._status),
1038            timestamp: this._endTime,
1039            trace_id: this._traceId,
1040            origin: this._attributes[__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]],
1041            profile_id: this._attributes[__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_PROFILE_ID"]],
1042            exclusive_time: this._attributes[__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]],
1043            measurements: timedEventsToMeasurements(this._events),
1044            is_segment: this._isStandaloneSpan && (0, __TURBOPACK__imported__module__304661__2["getRootSpan"])(this) === this || void 0,
1045            segment_id: this._isStandaloneSpan ? (0, __TURBOPACK__imported__module__304661__2["getRootSpan"])(this).spanContext().spanId : void 0,
1046            links: (0, __TURBOPACK__imported__module__304661__2["convertSpanLinksForEnvelope"])(this._links)
1047        };
1048    }
1049    /**
1050   * Get {@link StreamedSpanJSON} representation of this span.
1051   *
1052   * @hidden
1053   * @internal This method is purely for internal purposes and should not be used outside
1054   * of SDK code. If you need to get a JSON representation of a span,
1055   * use `spanToStreamedSpanJSON(span)` instead.
1056   */ getStreamedSpanJSON() {
1057        var _this__name, _this__endTime;
1058        return {
1059            name: (_this__name = this._name) !== null && _this__name !== void 0 ? _this__name : "",
1060            span_id: this._spanId,
1061            trace_id: this._traceId,
1062            parent_span_id: this._parentSpanId,
1063            start_timestamp: this._startTime,
1064            // just in case _endTime is not set, we use the start time (i.e. duration 0)
1065            end_timestamp: (_this__endTime = this._endTime) !== null && _this__endTime !== void 0 ? _this__endTime : this._startTime,
1066            is_segment: this._isStandaloneSpan || this === (0, __TURBOPACK__imported__module__304661__2["getRootSpan"])(this),
1067            status: (0, __TURBOPACK__imported__module__304661__2["getSimpleStatus"])(this._status),
1068            attributes: (0, __TURBOPACK__imported__module__304661__2["addStatusMessageAttribute"])(this._attributes, this._status),
1069            links: (0, __TURBOPACK__imported__module__304661__2["getStreamedSpanLinks"])(this._links)
1070        };
1071    }
1072    /** @inheritdoc */ isRecording() {
1073        return !this._endTime && !!this._sampled;
1074    }
1075    /**
1076   * @inheritdoc
1077   */ addEvent(name, attributesOrStartTime, startTime) {
1078        if (this._frozen) {
1079            return this;
1080        }
1081        __TURBOPACK__imported__module__901020__2["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__2["debug"].log("[Tracing] Adding an event to span:", name);
1082        const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || (0, __TURBOPACK__imported__module__605394__2["timestampInSeconds"])();
1083        const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};
1084        const event = {
1085            name,
1086            time: (0, __TURBOPACK__imported__module__304661__2["spanTimeInputToSeconds"])(time),
1087            attributes
1088        };
1089        this._events.push(event);
1090        return this;
1091    }
1092    /**
1093   * This method should generally not be used,
1094   * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.
1095   * USE THIS WITH CAUTION!
1096   * @internal
1097   * @hidden
1098   * @experimental
1099   */ isStandaloneSpan() {
1100        return !!this._isStandaloneSpan;
1101    }
1102    /** Emit `spanEnd` when the span is ended. */ _onSpanEnded() {
1103        const client = (0, __TURBOPACK__imported__module__250804__2["getClient"])();
1104        if (client) {
1105            client.emit("spanEnd", this);
1106            if (!this._isStandaloneSpan) {
1107                client.emit("afterSpanEnd", this);
1108            }
1109        }
1110        const rootSpan = (0, __TURBOPACK__imported__module__304661__2["getRootSpan"])(this);
1111        const isSegmentSpan = this._isStandaloneSpan || this === rootSpan;
1112        if (this._isStandaloneSpan) {
1113            if (this._sampled) {
1114                sendSpanEnvelope(createSpanEnvelope([
1115                    this
1116                ], client));
1117            } else {
1118                __TURBOPACK__imported__module__901020__2["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__2["debug"].log("[Tracing] Discarding standalone span because its trace was not chosen to be sampled.");
1119                if (client) {
1120                    client.recordDroppedEvent("sample_rate", "span");
1121                }
1122            }
1123            return;
1124        }
1125        if (!isSegmentSpan) {
1126            const strategy2 = getSegmentSpanCaptureStrategy();
1127            if (strategy2) {
1128                const scope2 = (0, __TURBOPACK__imported__module__242222__["getCapturedScopesOnSpan"])(this).scope || (0, __TURBOPACK__imported__module__250804__2["getCurrentScope"])();
1129                strategy2.onChildSpanEnded(this, rootSpan, (options)=>this._convertSpanToTransaction(options), scope2);
1130            }
1131            return;
1132        }
1133        if (client && hasSpanStreamingEnabled(client)) {
1134            client.emit("afterSegmentSpanEnd", this);
1135            return;
1136        }
1137        const scope = (0, __TURBOPACK__imported__module__242222__["getCapturedScopesOnSpan"])(this).scope || (0, __TURBOPACK__imported__module__250804__2["getCurrentScope"])();
1138        const strategy = getSegmentSpanCaptureStrategy();
1139        if (strategy) {
1140            strategy.onSegmentSpanEnded((options)=>this._convertSpanToTransaction(options), scope);
1141        } else {
1142            const transactionEvent = this._convertSpanToTransaction();
1143            if (transactionEvent) {
1144                scope.captureEvent(transactionEvent);
1145            }
1146        }
1147    }
1148    /**
1149   * Finish the transaction & prepare the event to send to Sentry.
1150   */ _convertSpanToTransaction() {
1151        let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
1152        var _capturedSpanScope_getScopeData_sdkProcessingMetadata, _options_onSpanCaptured;
1153        if (!isFullFinishedSpan((0, __TURBOPACK__imported__module__304661__2["spanToJSON"])(this))) {
1154            return void 0;
1155        }
1156        if (!this._name) {
1157            __TURBOPACK__imported__module__901020__2["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__2["debug"].warn("Transaction has no name, falling back to `<unlabeled transaction>`.");
1158            this._name = "<unlabeled transaction>";
1159        }
1160        const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = (0, __TURBOPACK__imported__module__242222__["getCapturedScopesOnSpan"])(this);
1161        const normalizedRequest = capturedSpanScope === null || capturedSpanScope === void 0 ? void 0 : (_capturedSpanScope_getScopeData_sdkProcessingMetadata = capturedSpanScope.getScopeData().sdkProcessingMetadata) === null || _capturedSpanScope_getScopeData_sdkProcessingMetadata === void 0 ? void 0 : _capturedSpanScope_getScopeData_sdkProcessingMetadata.normalizedRequest;
1162        if (this._sampled !== true) {
1163            return void 0;
1164        }
1165        (_options_onSpanCaptured = options.onSpanCaptured) === null || _options_onSpanCaptured === void 0 ? void 0 : _options_onSpanCaptured.call(options, this);
1166        const spans = [];
1167        for (const descendant of (0, __TURBOPACK__imported__module__304661__2["getSpanDescendants"])(this)){
1168            var _options_isSpanAlreadyCaptured, _options_onSpanCaptured1;
1169            if (descendant === this || isStandaloneSpan(descendant) || ((_options_isSpanAlreadyCaptured = options.isSpanAlreadyCaptured) === null || _options_isSpanAlreadyCaptured === void 0 ? void 0 : _options_isSpanAlreadyCaptured.call(options, descendant))) {
1170                continue;
1171            }
1172            const spanJSON = (0, __TURBOPACK__imported__module__304661__2["spanToJSON"])(descendant);
1173            if (!isFullFinishedSpan(spanJSON)) {
1174                continue;
1175            }
1176            (_options_onSpanCaptured1 = options.onSpanCaptured) === null || _options_onSpanCaptured1 === void 0 ? void 0 : _options_onSpanCaptured1.call(options, descendant);
1177            spans.push(spanJSON);
1178        }
1179        const source = this._attributes[__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]];
1180        delete this._attributes[__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME"]];
1181        let hasGenAiSpans = false;
1182        spans.forEach((span)=>{
1183            var _span_op;
1184            delete span.data[__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME"]];
1185            if ((_span_op = span.op) === null || _span_op === void 0 ? void 0 : _span_op.startsWith("gen_ai.")) {
1186                hasGenAiSpans = true;
1187            }
1188        });
1189        const transaction = {
1190            contexts: {
1191                trace: (0, __TURBOPACK__imported__module__304661__2["spanToTransactionTraceContext"])(this)
1192            },
1193            spans: // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here
1194            // we do not use spans anymore after this point
1195            spans.length > MAX_SPAN_COUNT ? spans.sort((a, b)=>a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT) : spans,
1196            start_timestamp: this._startTime,
1197            timestamp: this._endTime,
1198            transaction: this._name,
1199            type: "transaction",
1200            sdkProcessingMetadata: {
1201                capturedSpanScope,
1202                capturedSpanIsolationScope,
1203                dynamicSamplingContext: (0, __TURBOPACK__imported__module__473753__1["getDynamicSamplingContextFromSpan"])(this),
1204                hasGenAiSpans
1205            },
1206            request: normalizedRequest,
1207            ...source && {
1208                transaction_info: {
1209                    source
1210                }
1211            }
1212        };
1213        const measurements = timedEventsToMeasurements(this._events);
1214        const hasMeasurements = measurements && Object.keys(measurements).length;
1215        if (hasMeasurements) {
1216            __TURBOPACK__imported__module__901020__2["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__2["debug"].log("[Measurements] Adding measurements to transaction event", JSON.stringify(measurements, void 0, 2));
1217            transaction.measurements = measurements;
1218        }
1219        return transaction;
1220    }
1221    /**
1222   * You should never call the constructor manually, always use `Sentry.startSpan()`
1223   * or other span methods.
1224   * @internal
1225   * @hideconstructor
1226   * @hidden
1227   */ constructor(spanContext = {}){
1228        this._traceId = spanContext.traceId || (0, __TURBOPACK__imported__module__373382__["generateTraceId"])();
1229        this._spanId = spanContext.spanId || (0, __TURBOPACK__imported__module__373382__["generateSpanId"])();
1230        this._startTime = spanContext.startTimestamp || (0, __TURBOPACK__imported__module__605394__2["timestampInSeconds"])();
1231        this._links = spanContext.links;
1232        this._attributes = {};
1233        this.setAttributes({
1234            [__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "manual",
1235            [__TURBOPACK__imported__module__519988__2["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: spanContext.op,
1236            ...spanContext.attributes
1237        });
1238        this._name = spanContext.name;
1239        if (spanContext.parentSpanId) {
1240            this._parentSpanId = spanContext.parentSpanId;
1241        }
1242        if ("sampled" in spanContext) {
1243            this._sampled = spanContext.sampled;
1244        }
1245        if (spanContext.endTimestamp) {
1246            this._endTime = spanContext.endTimestamp;
1247        }
1248        this._events = [];
1249        this._isStandaloneSpan = spanContext.isStandalone;
1250        if (this._endTime) {
1251            this._onSpanEnded();
1252        }
1253    }
1254}
1255function isSpanTimeInput(value) {
1256    return value && typeof value === "number" || value instanceof Date || Array.isArray(value);
1257}
1258function isFullFinishedSpan(input) {
1259    return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;
1260}
1261function isStandaloneSpan(span) {
1262    return span instanceof SentrySpan && span.isStandaloneSpan();
1263}
1264function sendSpanEnvelope(envelope) {
1265    const client = (0, __TURBOPACK__imported__module__250804__2["getClient"])();
1266    if (!client) {
1267        return;
1268    }
1269    const spanItems = envelope[1];
1270    if (!spanItems || spanItems.length === 0) {
1271        client.recordDroppedEvent("before_send", "span");
1272        return;
1273    }
1274    client.sendEnvelope(envelope);
1275}
1276;
1277var __TURBOPACK__imported__module__776710__ = __turbopack_context__.i(776710);
1278// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/trace.js [app-client] (ecmascript)
1279;
1280var __TURBOPACK__imported__module__301263__ = __turbopack_context__.i(301263);
1281var __TURBOPACK__imported__module__923288__1 = __TURBOPACK__imported__module__923288__;
1282var __TURBOPACK__imported__module__250804__3 = __TURBOPACK__imported__module__250804__;
1283var __TURBOPACK__imported__module__901020__5 = __TURBOPACK__imported__module__901020__;
1284var __TURBOPACK__imported__module__519988__4 = __TURBOPACK__imported__module__519988__;
1285var __TURBOPACK__imported__module__602309__ = __turbopack_context__.i(602309);
1286var __TURBOPACK__imported__module__272598__5 = __TURBOPACK__imported__module__272598__;
1287// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/handleCallbackErrors.js [app-client] (ecmascript)
1288;
1289var __TURBOPACK__imported__module__450574__ = __turbopack_context__.i(450574);
1290var __TURBOPACK__imported__module__453288__1 = __TURBOPACK__imported__module__453288__;
1291;
1292;
1293function handleCallbackErrors(fn, onError) {
1294    let onFinally = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : ()=>{}, onSuccess = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ()=>{};
1295    let maybePromiseResult;
1296    try {
1297        maybePromiseResult = fn();
1298    } catch (e) {
1299        onError(e);
1300        onFinally();
1301        throw e;
1302    }
1303    return maybeHandlePromiseRejection(maybePromiseResult, onError, onFinally, onSuccess);
1304}
1305function maybeHandlePromiseRejection(value, onError, onFinally, onSuccess) {
1306    if ((0, __TURBOPACK__imported__module__453288__1["isThenable"])(value)) {
1307        return (0, __TURBOPACK__imported__module__450574__["chainAndCopyPromiseLike"])(value, (result)=>{
1308            onFinally();
1309            onSuccess(result);
1310        }, (err)=>{
1311            onError(err);
1312            onFinally();
1313        });
1314    }
1315    onFinally();
1316    onSuccess(value);
1317    return value;
1318}
1319;
1320var __TURBOPACK__imported__module__10008__1 = __TURBOPACK__imported__module__10008__;
1321var __TURBOPACK__imported__module__170637__ = __turbopack_context__.i(170637);
1322var __TURBOPACK__imported__module__373382__1 = __TURBOPACK__imported__module__373382__;
1323var __TURBOPACK__imported__module__111139__1 = __TURBOPACK__imported__module__111139__;
1324var __TURBOPACK__imported__module__821061__1 = __TURBOPACK__imported__module__821061__;
1325var __TURBOPACK__imported__module__304661__5 = __TURBOPACK__imported__module__304661__;
1326var __TURBOPACK__imported__module__132584__ = __turbopack_context__.i(132584);
1327var __TURBOPACK__imported__module__473753__2 = __TURBOPACK__imported__module__473753__;
1328// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/sampling.js [app-client] (ecmascript)
1329;
1330var __TURBOPACK__imported__module__901020__6 = __TURBOPACK__imported__module__901020__;
1331var __TURBOPACK__imported__module__272598__6 = __TURBOPACK__imported__module__272598__;
1332var __TURBOPACK__imported__module__10008__2 = __TURBOPACK__imported__module__10008__;
1333var __TURBOPACK__imported__module__170637__1 = __TURBOPACK__imported__module__170637__;
1334;
1335;
1336;
1337;
1338function sampleSpan(options, samplingContext, sampleRand) {
1339    if (!(0, __TURBOPACK__imported__module__10008__2["hasSpansEnabled"])(options)) {
1340        return [
1341            false
1342        ];
1343    }
1344    let localSampleRateWasApplied = void 0;
1345    let sampleRate;
1346    if (typeof options.tracesSampler === "function") {
1347        sampleRate = options.tracesSampler({
1348            ...samplingContext,
1349            inheritOrSampleWith: (fallbackSampleRate)=>{
1350                if (typeof samplingContext.parentSampleRate === "number") {
1351                    return samplingContext.parentSampleRate;
1352                }
1353                if (typeof samplingContext.parentSampled === "boolean") {
1354                    return Number(samplingContext.parentSampled);
1355                }
1356                return fallbackSampleRate;
1357            }
1358        });
1359        localSampleRateWasApplied = true;
1360    } else if (samplingContext.parentSampled !== void 0) {
1361        sampleRate = samplingContext.parentSampled;
1362    } else if (typeof options.tracesSampleRate !== "undefined") {
1363        sampleRate = options.tracesSampleRate;
1364        localSampleRateWasApplied = true;
1365    }
1366    const parsedSampleRate = (0, __TURBOPACK__imported__module__170637__1["parseSampleRate"])(sampleRate);
1367    if (parsedSampleRate === void 0) {
1368        __TURBOPACK__imported__module__901020__6["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__6["debug"].warn("[Tracing] Discarding root span because of invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ".concat(JSON.stringify(sampleRate), " of type ").concat(JSON.stringify(typeof sampleRate), "."));
1369        return [
1370            false
1371        ];
1372    }
1373    if (!parsedSampleRate) {
1374        __TURBOPACK__imported__module__901020__6["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__6["debug"].log("[Tracing] Discarding transaction because ".concat(typeof options.tracesSampler === "function" ? "tracesSampler returned 0 or false" : "a negative sampling decision was inherited or tracesSampleRate is set to 0"));
1375        return [
1376            false,
1377            parsedSampleRate,
1378            localSampleRateWasApplied
1379        ];
1380    }
1381    const shouldSample = sampleRand < parsedSampleRate;
1382    if (!shouldSample) {
1383        __TURBOPACK__imported__module__901020__6["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__6["debug"].log("[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ".concat(Number(sampleRate), ")"));
1384    }
1385    return [
1386        shouldSample,
1387        parsedSampleRate,
1388        localSampleRateWasApplied
1389    ];
1390}
1391;
1392var __TURBOPACK__imported__module__728469__1 = __TURBOPACK__imported__module__728469__;
1393var __TURBOPACK__imported__module__776710__1 = __TURBOPACK__imported__module__776710__;
1394var __TURBOPACK__imported__module__242222__1 = __TURBOPACK__imported__module__242222__;
1395;
1396;
1397;
1398;
1399;
1400;
1401;
1402;
1403;
1404;
1405;
1406;
1407;
1408;
1409;
1410;
1411;
1412;
1413;
1414;
1415;
1416;
1417;
1418;
1419const SUPPRESS_TRACING_KEY = "__SENTRY_SUPPRESS_TRACING__";
1420function startSpan(options, callback) {
1421    const acs = getAcs();
1422    if (acs.startSpan) {
1423        return acs.startSpan(options, callback);
1424    }
1425    const spanArguments = parseSentrySpanArguments(options);
1426    const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;
1427    const customForkedScope = customScope === null || customScope === void 0 ? void 0 : customScope.clone();
1428    return (0, __TURBOPACK__imported__module__250804__3["withScope"])(customForkedScope, ()=>{
1429        const wrapper = getActiveSpanWrapper(customParentSpan);
1430        return wrapper(()=>{
1431            const scope = (0, __TURBOPACK__imported__module__250804__3["getCurrentScope"])();
1432            const parentSpan = getParentSpan(scope, customParentSpan);
1433            const client = (0, __TURBOPACK__imported__module__250804__3["getClient"])();
1434            const missingRequiredParent = options.onlyIfParent && !parentSpan;
1435            const activeSpan = missingRequiredParent ? startMissingRequiredParentSpan(scope, client) : createChildOrRootSpan({
1436                parentSpan,
1437                spanArguments,
1438                forceTransaction,
1439                scope
1440            });
1441            if (!spanIsIgnored(activeSpan) || !parentSpan) {
1442                (0, __TURBOPACK__imported__module__821061__1["_setSpanForScope"])(scope, activeSpan);
1443            }
1444            return handleCallbackErrors(()=>callback(activeSpan), ()=>{
1445                const { status } = (0, __TURBOPACK__imported__module__304661__5["spanToJSON"])(activeSpan);
1446                if (activeSpan.isRecording() && (!status || status === "ok")) {
1447                    activeSpan.setStatus({
1448                        code: __TURBOPACK__imported__module__776710__1["SPAN_STATUS_ERROR"],
1449                        message: "internal_error"
1450                    });
1451                }
1452            }, ()=>{
1453                activeSpan.end();
1454            });
1455        });
1456    });
1457}
1458function startSpanManual(options, callback) {
1459    const acs = getAcs();
1460    if (acs.startSpanManual) {
1461        return acs.startSpanManual(options, callback);
1462    }
1463    const spanArguments = parseSentrySpanArguments(options);
1464    const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;
1465    const customForkedScope = customScope === null || customScope === void 0 ? void 0 : customScope.clone();
1466    return (0, __TURBOPACK__imported__module__250804__3["withScope"])(customForkedScope, ()=>{
1467        const wrapper = getActiveSpanWrapper(customParentSpan);
1468        return wrapper(()=>{
1469            const scope = (0, __TURBOPACK__imported__module__250804__3["getCurrentScope"])();
1470            const parentSpan = getParentSpan(scope, customParentSpan);
1471            const missingRequiredParent = options.onlyIfParent && !parentSpan;
1472            const activeSpan = missingRequiredParent ? startMissingRequiredParentSpan(scope, (0, __TURBOPACK__imported__module__250804__3["getClient"])()) : createChildOrRootSpan({
1473                parentSpan,
1474                spanArguments,
1475                forceTransaction,
1476                scope
1477            });
1478            if (!spanIsIgnored(activeSpan) || !parentSpan) {
1479                (0, __TURBOPACK__imported__module__821061__1["_setSpanForScope"])(scope, activeSpan);
1480            }
1481            return handleCallbackErrors(// We pass the `finish` function to the callback, so the user can finish the span manually
1482            // this is mainly here for historic purposes because previously, we instructed users to call
1483            // `finish` instead of `span.end()` to also clean up the scope. Nowadays, calling `span.end()`
1484            // or `finish` has the same effect and we simply leave it here to avoid breaking user code.
1485            ()=>callback(activeSpan, ()=>activeSpan.end()), ()=>{
1486                const { status } = (0, __TURBOPACK__imported__module__304661__5["spanToJSON"])(activeSpan);
1487                if (activeSpan.isRecording() && (!status || status === "ok")) {
1488                    activeSpan.setStatus({
1489                        code: __TURBOPACK__imported__module__776710__1["SPAN_STATUS_ERROR"],
1490                        message: "internal_error"
1491                    });
1492                }
1493            });
1494        });
1495    });
1496}
1497function startInactiveSpan(options) {
1498    const acs = getAcs();
1499    if (acs.startInactiveSpan) {
1500        return acs.startInactiveSpan(options);
1501    }
1502    return _startInactiveSpanImpl(options);
1503}
1504function _INTERNAL_startInactiveSpan(options) {
1505    return _startInactiveSpanImpl(options);
1506}
1507function _startInactiveSpanImpl(options) {
1508    const spanArguments = parseSentrySpanArguments(options);
1509    const { forceTransaction, parentSpan: customParentSpan } = options;
1510    const wrapper = options.scope ? (callback)=>(0, __TURBOPACK__imported__module__250804__3["withScope"])(options.scope, callback) : customParentSpan !== void 0 ? (callback)=>withActiveSpan(customParentSpan, callback) : (callback)=>callback();
1511    return wrapper(()=>{
1512        const scope = (0, __TURBOPACK__imported__module__250804__3["getCurrentScope"])();
1513        const parentSpan = getParentSpan(scope, customParentSpan);
1514        const client = (0, __TURBOPACK__imported__module__250804__3["getClient"])();
1515        const missingRequiredParent = options.onlyIfParent && !parentSpan;
1516        if (missingRequiredParent) {
1517            return startMissingRequiredParentSpan(scope, client);
1518        }
1519        return createChildOrRootSpan({
1520            parentSpan,
1521            spanArguments,
1522            forceTransaction,
1523            scope
1524        });
1525    });
1526}
1527const continueTrace = (options, callback)=>{
1528    const carrier = (0, __TURBOPACK__imported__module__923288__1["getMainCarrier"])();
1529    const acs = (0, __TURBOPACK__imported__module__301263__["getAsyncContextStrategy"])(carrier);
1530    if (acs.continueTrace) {
1531        return acs.continueTrace(options, callback);
1532    }
1533    const { sentryTrace, baggage } = options;
1534    const client = (0, __TURBOPACK__imported__module__250804__3["getClient"])();
1535    const incomingDsc = (0, __TURBOPACK__imported__module__602309__["baggageHeaderToDynamicSamplingContext"])(baggage);
1536    if (client && !(0, __TURBOPACK__imported__module__132584__["shouldContinueTrace"])(client, incomingDsc === null || incomingDsc === void 0 ? void 0 : incomingDsc.org_id)) {
1537        return startNewTrace(callback);
1538    }
1539    return (0, __TURBOPACK__imported__module__250804__3["withScope"])((scope)=>{
1540        const propagationContext = (0, __TURBOPACK__imported__module__132584__["propagationContextFromHeaders"])(sentryTrace, baggage);
1541        scope.setPropagationContext(propagationContext);
1542        (0, __TURBOPACK__imported__module__821061__1["_setSpanForScope"])(scope, void 0);
1543        return callback();
1544    });
1545};
1546function withActiveSpan(span, callback) {
1547    const acs = getAcs();
1548    if (acs.withActiveSpan) {
1549        return acs.withActiveSpan(span, callback);
1550    }
1551    return (0, __TURBOPACK__imported__module__250804__3["withScope"])((scope)=>{
1552        (0, __TURBOPACK__imported__module__821061__1["_setSpanForScope"])(scope, span || void 0);
1553        return callback(scope);
1554    });
1555}
1556function suppressTracing(callback) {
1557    const acs = getAcs();
1558    if (acs.suppressTracing) {
1559        return acs.suppressTracing(callback);
1560    }
1561    return (0, __TURBOPACK__imported__module__250804__3["withScope"])((scope)=>{
1562        scope.setSDKProcessingMetadata({
1563            [SUPPRESS_TRACING_KEY]: true
1564        });
1565        const res = callback();
1566        scope.setSDKProcessingMetadata({
1567            [SUPPRESS_TRACING_KEY]: void 0
1568        });
1569        return res;
1570    });
1571}
1572function isTracingSuppressed() {
1573    let scope = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : (0, __TURBOPACK__imported__module__250804__3["getCurrentScope"])();
1574    const acs = getAcs();
1575    if (acs.isTracingSuppressed) {
1576        return acs.isTracingSuppressed(scope);
1577    }
1578    return scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] === true;
1579}
1580function startNewTrace(callback) {
1581    const acs = getAcs();
1582    if (acs.startNewTrace) {
1583        return acs.startNewTrace(callback);
1584    }
1585    return (0, __TURBOPACK__imported__module__250804__3["withScope"])((scope)=>{
1586        scope.setPropagationContext({
1587            traceId: (0, __TURBOPACK__imported__module__373382__1["generateTraceId"])(),
1588            sampleRand: (0, __TURBOPACK__imported__module__111139__1["s
1588afeMathRandom"])()
1589        });
1590        __TURBOPACK__imported__module__901020__5["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__5["debug"].log("Starting a new trace with id ".concat(scope.getPropagationContext().traceId));
1591        return withActiveSpan(null, callback);
1592    });
1593}
1594function startMissingRequiredParentSpan(scope, client) {
1595    client === null || client === void 0 ? void 0 : client.recordDroppedEvent("no_parent_span", "span");
1596    const span = new __TURBOPACK__imported__module__728469__1["SentryNonRecordingSpan"]({
1597        traceId: scope.getPropagationContext().traceId
1598    });
1599    (0, __TURBOPACK__imported__module__242222__1["setCapturedScopesOnSpan"])(span, scope, (0, __TURBOPACK__imported__module__250804__3["getIsolationScope"])());
1600    return span;
1601}
1602function createChildOrRootSpan(param) {
1603    let { parentSpan, spanArguments, forceTransaction, scope } = param;
1604    const isolationScope = (0, __TURBOPACK__imported__module__250804__3["getIsolationScope"])();
1605    if (!(0, __TURBOPACK__imported__module__10008__1["hasSpansEnabled"])()) {
1606        const scopePropagationContext = scope.getPropagationContext();
1607        const traceId = parentSpan ? parentSpan.spanContext().traceId : scopePropagationContext.traceId;
1608        const span2 = new __TURBOPACK__imported__module__728469__1["SentryNonRecordingSpan"]({
1609            traceId
1610        });
1611        if (parentSpan && !forceTransaction) {
1612            (0, __TURBOPACK__imported__module__304661__5["addChildSpanToSpan"])(parentSpan, span2);
1613        }
1614        (0, __TURBOPACK__imported__module__242222__1["setCapturedScopesOnSpan"])(span2, scope, isolationScope);
1615        return span2;
1616    }
1617    const client = (0, __TURBOPACK__imported__module__250804__3["getClient"])();
1618    if (_shouldIgnoreStreamedSpan(client, spanArguments)) {
1619        var _ref;
1620        if (!isTracingSuppressed(scope)) {
1621            client === null || client === void 0 ? void 0 : client.recordDroppedEvent("ignored", "span");
1622        }
1623        const ignoredSpan = new __TURBOPACK__imported__module__728469__1["SentryNonRecordingSpan"]({
1624            dropReason: "ignored",
1625            traceId: (_ref = parentSpan === null || parentSpan === void 0 ? void 0 : parentSpan.spanContext().traceId) !== null && _ref !== void 0 ? _ref : scope.getPropagationContext().traceId
1626        });
1627        if (parentSpan && !forceTransaction) {
1628            (0, __TURBOPACK__imported__module__304661__5["addChildSpanToSpan"])(parentSpan, ignoredSpan);
1629        }
1630        (0, __TURBOPACK__imported__module__242222__1["setCapturedScopesOnSpan"])(ignoredSpan, scope, isolationScope);
1631        return ignoredSpan;
1632    }
1633    let span;
1634    if (parentSpan && !forceTransaction) {
1635        span = _startChildSpan(parentSpan, scope, spanArguments, isolationScope);
1636        (0, __TURBOPACK__imported__module__304661__5["addChildSpanToSpan"])(parentSpan, span);
1637    } else if (parentSpan) {
1638        const dsc = (0, __TURBOPACK__imported__module__473753__2["getDynamicSamplingContextFromSpan"])(parentSpan);
1639        const { traceId, spanId: parentSpanId } = parentSpan.spanContext();
1640        const parentSampled = (0, __TURBOPACK__imported__module__304661__5["spanIsSampled"])(parentSpan);
1641        span = _startRootSpan({
1642            traceId,
1643            parentSpanId,
1644            ...spanArguments
1645        }, scope, isolationScope, parentSampled);
1646        (0, __TURBOPACK__imported__module__473753__2["freezeDscOnSpan"])(span, dsc);
1647    } else {
1648        const { traceId, dsc, parentSpanId, sampled: parentSampled } = scope.getPropagationContext();
1649        span = _startRootSpan({
1650            traceId,
1651            parentSpanId,
1652            ...spanArguments
1653        }, scope, isolationScope, parentSampled);
1654        if (dsc) {
1655            (0, __TURBOPACK__imported__module__473753__2["freezeDscOnSpan"])(span, dsc);
1656        }
1657    }
1658    logSpanStart(span);
1659    return span;
1660}
1661function parseSentrySpanArguments(options) {
1662    const exp = options.experimental || {};
1663    const initialCtx = {
1664        isStandalone: exp.standalone,
1665        ...options
1666    };
1667    if (options.startTime) {
1668        const ctx = {
1669            ...initialCtx
1670        };
1671        ctx.startTimestamp = (0, __TURBOPACK__imported__module__304661__5["spanTimeInputToSeconds"])(options.startTime);
1672        delete ctx.startTime;
1673        return ctx;
1674    }
1675    return initialCtx;
1676}
1677function getAcs() {
1678    const carrier = (0, __TURBOPACK__imported__module__923288__1["getMainCarrier"])();
1679    return (0, __TURBOPACK__imported__module__301263__["getAsyncContextStrategy"])(carrier);
1680}
1681function _startRootSpan(spanArguments, scope, isolationScope, parentSampled) {
1682    var _mutableSpanSamplingData_parentSampled;
1683    var _currentPropagationContext_dsc;
1684    const client = (0, __TURBOPACK__imported__module__250804__3["getClient"])();
1685    const options = (client === null || client === void 0 ? void 0 : client.getOptions()) || {};
1686    const { name = "" } = spanArguments;
1687    const mutableSpanSamplingData = {
1688        spanAttributes: {
1689            ...spanArguments.attributes
1690        },
1691        spanName: name,
1692        parentSampled
1693    };
1694    client === null || client === void 0 ? void 0 : client.emit("beforeSampling", mutableSpanSamplingData, {
1695        decision: false
1696    });
1697    const finalParentSampled = (_mutableSpanSamplingData_parentSampled = mutableSpanSamplingData.parentSampled) !== null && _mutableSpanSamplingData_parentSampled !== void 0 ? _mutableSpanSamplingData_parentSampled : parentSampled;
1698    const finalAttributes = mutableSpanSamplingData.spanAttributes;
1699    const currentPropagationContext = scope.getPropagationContext();
1700    const _isTracingSuppressed = isTracingSuppressed(scope);
1701    const [sampled, sampleRate, localSampleRateWasApplied] = _isTracingSuppressed ? [
1702        false
1703    ] : sampleSpan(options, {
1704        name,
1705        parentSampled: finalParentSampled,
1706        attributes: finalAttributes,
1707        normalizedRequest: isolationScope.getScopeData().sdkProcessingMetadata.normalizedRequest,
1708        parentSampleRate: (0, __TURBOPACK__imported__module__170637__["parseSampleRate"])((_currentPropagationContext_dsc = currentPropagationContext.dsc) === null || _currentPropagationContext_dsc === void 0 ? void 0 : _currentPropagationContext_dsc.sample_rate)
1709    }, currentPropagationContext.sampleRand);
1710    const rootSpan = new SentrySpan({
1711        ...spanArguments,
1712        attributes: {
1713            [__TURBOPACK__imported__module__519988__4["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: "custom",
1714            [__TURBOPACK__imported__module__519988__4["SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE"]]: sampleRate !== void 0 && localSampleRateWasApplied ? sampleRate : void 0,
1715            ...finalAttributes
1716        },
1717        sampled
1718    });
1719    if (!sampled && client && !_isTracingSuppressed) {
1720        __TURBOPACK__imported__module__901020__5["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__5["debug"].log("[Tracing] Discarding root span because its trace was not chosen to be sampled.");
1721        client.recordDroppedEvent("sample_rate", hasSpanStreamingEnabled(client) ? "span" : "transaction");
1722    }
1723    (0, __TURBOPACK__imported__module__242222__1["setCapturedScopesOnSpan"])(rootSpan, scope, isolationScope);
1724    if (client) {
1725        client.emit("spanStart", rootSpan);
1726    }
1727    return rootSpan;
1728}
1729function _startChildSpan(parentSpan, scope, spanArguments, isolationScope) {
1730    const { spanId, traceId } = parentSpan.spanContext();
1731    const _isTracingSuppressed = isTracingSuppressed(scope);
1732    const sampled = _isTracingSuppressed ? false : (0, __TURBOPACK__imported__module__304661__5["spanIsSampled"])(parentSpan);
1733    const childSpan = sampled ? new SentrySpan({
1734        ...spanArguments,
1735        parentSpanId: spanId,
1736        traceId,
1737        sampled
1738    }) : new __TURBOPACK__imported__module__728469__1["SentryNonRecordingSpan"]({
1739        traceId
1740    });
1741    (0, __TURBOPACK__imported__module__304661__5["addChildSpanToSpan"])(parentSpan, childSpan);
1742    (0, __TURBOPACK__imported__module__242222__1["setCapturedScopesOnSpan"])(childSpan, scope, isolationScope);
1743    const client = (0, __TURBOPACK__imported__module__250804__3["getClient"])();
1744    if (!client) {
1745        return childSpan;
1746    }
1747    if (hasSpanStreamingEnabled(client) && (0, __TURBOPACK__imported__module__728469__1["spanIsNonRecordingSpan"])(childSpan)) {
1748        if ((0, __TURBOPACK__imported__module__728469__1["spanIsNonRecordingSpan"])(parentSpan) && parentSpan.dropReason) {
1749            childSpan.dropReason = parentSpan.dropReason;
1750            client.recordDroppedEvent(parentSpan.dropReason, "span");
1751        } else if (!_isTracingSuppressed) {
1752            childSpan.dropReason = "sample_rate";
1753            client.recordDroppedEvent("sample_rate", "span");
1754        }
1755    }
1756    client.emit("spanStart", childSpan);
1757    if (spanArguments.endTimestamp) {
1758        client.emit("spanEnd", childSpan);
1759        client.emit("afterSpanEnd", childSpan);
1760    }
1761    return childSpan;
1762}
1763function getParentSpan(scope, customParentSpan) {
1764    if (customParentSpan) {
1765        return customParentSpan;
1766    }
1767    if (customParentSpan === null) {
1768        return void 0;
1769    }
1770    const span = (0, __TURBOPACK__imported__module__821061__1["_getSpanForScope"])(scope);
1771    if (!span) {
1772        return void 0;
1773    }
1774    const client = (0, __TURBOPACK__imported__module__250804__3["getClient"])();
1775    const options = client ? client.getOptions() : {};
1776    if (options.parentSpanIsAlwaysRootSpan) {
1777        return (0, __TURBOPACK__imported__module__304661__5["getRootSpan"])(span);
1778    }
1779    return span;
1780}
1781function getActiveSpanWrapper(parentSpan) {
1782    return parentSpan !== void 0 ? (callback)=>{
1783        return withActiveSpan(parentSpan, callback);
1784    } : (callback)=>callback();
1785}
1786function _shouldIgnoreStreamedSpan(client, spanArguments) {
1787    var _spanArguments_attributes;
1788    const ignoreSpans = client === null || client === void 0 ? void 0 : client.getOptions().ignoreSpans;
1789    if (!client || !hasSpanStreamingEnabled(client) || !(ignoreSpans === null || ignoreSpans === void 0 ? void 0 : ignoreSpans.length)) {
1790        return false;
1791    }
1792    return shouldIgnoreSpan({
1793        description: spanArguments.name || "",
1794        op: ((_spanArguments_attributes = spanArguments.attributes) === null || _spanArguments_attributes === void 0 ? void 0 : _spanArguments_attributes[__TURBOPACK__imported__module__519988__4["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]) || spanArguments.op,
1795        attributes: spanArguments.attributes
1796    }, ignoreSpans);
1797}
1798function spanIsIgnored(span) {
1799    return (0, __TURBOPACK__imported__module__728469__1["spanIsNonRecordingSpan"])(span) && span.dropReason === "ignored";
1800}
1801;
1802var __TURBOPACK__imported__module__242222__2 = __TURBOPACK__imported__module__242222__;
1803;
1804;
1805;
1806;
1807;
1808;
1809;
1810;
1811;
1812;
1813;
1814;
1815;
1816;
1817const TRACING_DEFAULTS = {
1818    idleTimeout: 1e3,
1819    finalTimeout: 3e4,
1820    childSpanTimeout: 15e3
1821};
1822const FINISH_REASON_HEARTBEAT_FAILED = "heartbeatFailed";
1823const FINISH_REASON_IDLE_TIMEOUT = "idleTimeout";
1824const FINISH_REASON_FINAL_TIMEOUT = "finalTimeout";
1825const FINISH_REASON_EXTERNAL_FINISH = "externalFinish";
1826function startIdleSpan(startSpanOptions) {
1827    let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
1828    const activities = /* @__PURE__ */ new Map();
1829    let _finished = false;
1830    let _idleTimeoutID;
1831    let _childSpanTimeoutID;
1832    let _finishReason = FINISH_REASON_EXTERNAL_FINISH;
1833    let _autoFinishAllowed = !options.disableAutoFinish;
1834    const _cleanupHooks = [];
1835    const { idleTimeout = TRACING_DEFAULTS.idleTimeout, finalTimeout = TRACING_DEFAULTS.finalTimeout, childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout, beforeSpanEnd, trimIdleSpanEndTimestamp = true } = options;
1836    const client = (0, __TURBOPACK__imported__module__250804__1["getClient"])();
1837    const scope = (0, __TURBOPACK__imported__module__250804__1["getCurrentScope"])();
1838    if (!client || !(0, __TURBOPACK__imported__module__10008__["hasSpansEnabled"])()) {
1839        const span2 = new __TURBOPACK__imported__module__728469__["SentryNonRecordingSpan"]({
1840            traceId: scope.getPropagationContext().traceId
1841        });
1842        (0, __TURBOPACK__imported__module__242222__2["setCapturedScopesOnSpan"])(span2, scope, (0, __TURBOPACK__imported__module__250804__1["getIsolationScope"])());
1843        return span2;
1844    }
1845    const previousActiveSpan = (0, __TURBOPACK__imported__module__304661__["getActiveSpan"])();
1846    const span = _startIdleSpan(startSpanOptions);
1847    span.end = new Proxy(span.end, {
1848        apply (target, thisArg, args) {
1849            if (beforeSpanEnd) {
1850                beforeSpanEnd(span);
1851            }
1852            if ((0, __TURBOPACK__imported__module__728469__["spanIsNonRecordingSpan"])(thisArg)) {
1853                return;
1854            }
1855            const [definedEndTimestamp, ...rest] = args;
1856            const timestamp = definedEndTimestamp || (0, __TURBOPACK__imported__module__605394__1["timestampInSeconds"])();
1857            const spanEndTimestamp = (0, __TURBOPACK__imported__module__304661__["spanTimeInputToSeconds"])(timestamp);
1858            const spans = (0, __TURBOPACK__imported__module__304661__["getSpanDescendants"])(span).filter((child)=>child !== span);
1859            const spanJson = (0, __TURBOPACK__imported__module__304661__["spanToJSON"])(span);
1860            if (!spans.length || !trimIdleSpanEndTimestamp) {
1861                onIdleSpanEnded(spanEndTimestamp);
1862                return Reflect.apply(target, thisArg, [
1863                    spanEndTimestamp,
1864                    ...rest
1865                ]);
1866            }
1867            const ignoreSpans = client.getOptions().ignoreSpans;
1868            const latestSpanEndTimestamp = spans === null || spans === void 0 ? void 0 : spans.reduce((acc, current)=>{
1869                const currentSpanJson = (0, __TURBOPACK__imported__module__304661__["spanToJSON"])(current);
1870                if (!currentSpanJson.timestamp) {
1871                    return acc;
1872                }
1873                if (ignoreSpans && shouldIgnoreSpan({
1874                    description: currentSpanJson.description,
1875                    op: currentSpanJson.op,
1876                    attributes: currentSpanJson.data
1877                }, ignoreSpans)) {
1878                    return acc;
1879                }
1880                return acc ? Math.max(acc, currentSpanJson.timestamp) : currentSpanJson.timestamp;
1881            }, void 0);
1882            const spanStartTimestamp = spanJson.start_timestamp;
1883            const endTimestamp = Math.min(spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1e3 : Infinity, Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)));
1884            onIdleSpanEnded(endTimestamp);
1885            return Reflect.apply(target, thisArg, [
1886                endTimestamp,
1887                ...rest
1888            ]);
1889        }
1890    });
1891    function _cancelIdleTimeout() {
1892        if (_idleTimeoutID) {
1893            clearTimeout(_idleTimeoutID);
1894            _idleTimeoutID = void 0;
1895        }
1896    }
1897    function _cancelChildSpanTimeout() {
1898        if (_childSpanTimeoutID) {
1899            clearTimeout(_childSpanTimeoutID);
1900            _childSpanTimeoutID = void 0;
1901        }
1902    }
1903    function _restartIdleTimeout(endTimestamp) {
1904        _cancelIdleTimeout();
1905        _idleTimeoutID = setTimeout(()=>{
1906            if (!_finished && activities.size === 0 && _autoFinishAllowed) {
1907                _finishReason = FINISH_REASON_IDLE_TIMEOUT;
1908                span.end(endTimestamp);
1909            }
1910        }, idleTimeout);
1911    }
1912    function _restartChildSpanTimeout(endTimestamp) {
1913        _cancelChildSpanTimeout();
1914        _childSpanTimeoutID = setTimeout(()=>{
1915            if (!_finished && _autoFinishAllowed) {
1916                _finishReason = FINISH_REASON_HEARTBEAT_FAILED;
1917                span.end(endTimestamp);
1918            }
1919        }, childSpanTimeout);
1920    }
1921    function _pushActivity(spanId) {
1922        _cancelIdleTimeout();
1923        activities.set(spanId, true);
1924        const endTimestamp = (0, __TURBOPACK__imported__module__605394__1["timestampInSeconds"])();
1925        _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1e3);
1926    }
1927    function _popActivity(spanId) {
1928        if (activities.has(spanId)) {
1929            activities.delete(spanId);
1930        }
1931        if (activities.size === 0) {
1932            const endTimestamp = (0, __TURBOPACK__imported__module__605394__1["timestampInSeconds"])();
1933            _restartIdleTimeout(endTimestamp + idleTimeout / 1e3);
1934            _cancelChildSpanTimeout();
1935        }
1936    }
1937    function onIdleSpanEnded(endTimestamp) {
1938        _finished = true;
1939        activities.clear();
1940        _cleanupHooks.forEach((cleanup)=>cleanup());
1941        (0, __TURBOPACK__imported__module__821061__["_setSpanForScope"])(scope, previousActiveSpan);
1942        const spanJSON = (0, __TURBOPACK__imported__module__304661__["spanToJSON"])(span);
1943        const { start_timestamp: startTimestamp } = spanJSON;
1944        if (!startTimestamp) {
1945            return;
1946        }
1947        const attributes = spanJSON.data;
1948        if (!attributes[__TURBOPACK__imported__module__519988__1["SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON"]]) {
1949            span.setAttribute(__TURBOPACK__imported__module__519988__1["SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON"], _finishReason);
1950        }
1951        const currentStatus = spanJSON.status;
1952        if (!currentStatus || currentStatus === "unknown") {
1953            span.setStatus({
1954                code: __TURBOPACK__imported__module__776710__["SPAN_STATUS_OK"]
1955            });
1956        }
1957        __TURBOPACK__imported__module__272598__["debug"].log('[Tracing] Idle span "'.concat(spanJSON.op, '" finished'));
1958        const childSpans = (0, __TURBOPACK__imported__module__304661__["getSpanDescendants"])(span).filter((child)=>child !== span);
1959        let discardedSpans = 0;
1960        childSpans.forEach((childSpan)=>{
1961            if (childSpan.isRecording()) {
1962                childSpan.setStatus({
1963                    code: __TURBOPACK__imported__module__776710__["SPAN_STATUS_ERROR"],
1964                    message: "cancelled"
1965                });
1966                childSpan.end(endTimestamp);
1967                __TURBOPACK__imported__module__901020__["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__["debug"].log("[Tracing] Cancelling span since span ended early", JSON.stringify(childSpan, void 0, 2));
1968            }
1969            const childSpanJSON = (0, __TURBOPACK__imported__module__304661__["spanToJSON"])(childSpan);
1970            const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;
1971            const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;
1972            const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1e3;
1973            const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;
1974            if (__TURBOPACK__imported__module__901020__["DEBUG_BUILD"]) {
1975                const stringifiedSpan = JSON.stringify(childSpan, void 0, 2);
1976                if (!spanStartedBeforeIdleSpanEnd) {
1977                    __TURBOPACK__imported__module__272598__["debug"].log("[Tracing] Discarding span since it happened after idle span was finished", stringifiedSpan);
1978                } else if (!spanEndedBeforeFinalTimeout) {
1979                    __TURBOPACK__imported__module__272598__["debug"].log("[Tracing] Discarding span since it finished after idle span final timeout", stringifiedSpan);
1980                }
1981            }
1982            if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {
1983                (0, __TURBOPACK__imported__module__304661__["removeChildSpanFromSpan"])(span, childSpan);
1984                discardedSpans++;
1985            }
1986        });
1987        if (discardedSpans > 0) {
1988            span.setAttribute("sentry.idle_span_discarded_spans", discardedSpans);
1989        }
1990    }
1991    _cleanupHooks.push(client.on("spanStart", (startedSpan)=>{
1992        if (_finished || startedSpan === span || !!(0, __TURBOPACK__imported__module__304661__["spanToJSON"])(startedSpan).timestamp || startedSpan instanceof SentrySpan && startedSpan.isStandaloneSpan()) {
1993            return;
1994        }
1995        const allSpans = (0, __TURBOPACK__imported__module__304661__["getSpanDescendants"])(span);
1996        if (allSpans.includes(startedSpan)) {
1997            _pushActivity(startedSpan.spanContext().spanId);
1998        }
1999    }));
2000    _cleanupHooks.push(client.on("spanEnd", (endedSpan)=>{
2001        if (_finished) {
2002            return;
2003        }
2004        _popActivity(endedSpan.spanContext().spanId);
2005    }));
2006    _cleanupHooks.push(client.on("idleSpanEnableAutoFinish", (spanToAllowAutoFinish)=>{
2007        if (spanToAllowAutoFinish === span) {
2008            _autoFinishAllowed = true;
2009            _restartIdleTimeout();
2010            if (activities.size) {
2011                _restartChildSpanTimeout();
2012            }
2013        }
2014    }));
2015    if (!options.disableAutoFinish) {
2016        _restartIdleTimeout();
2017    }
2018    setTimeout(()=>{
2019        if (!_finished) {
2020            span.setStatus({
2021                code: __TURBOPACK__imported__module__776710__["SPAN_STATUS_ERROR"],
2022                message: "deadline_exceeded"
2023            });
2024            _finishReason = FINISH_REASON_FINAL_TIMEOUT;
2025            span.end();
2026        }
2027    }, finalTimeout);
2028    return span;
2029}
2030function _startIdleSpan(options) {
2031    const span = startInactiveSpan(options);
2032    (0, __TURBOPACK__imported__module__821061__["_setSpanForScope"])((0, __TURBOPACK__imported__module__250804__1["getCurrentScope"])(), span);
2033    __TURBOPACK__imported__module__901020__["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__["debug"].log("[Tracing] Started span is an idle span");
2034    return span;
2035}
2036;
2037var __TURBOPACK__imported__module__272598__7 = __TURBOPACK__imported__module__272598__;
2038var __TURBOPACK__imported__module__605394__3 = __TURBOPACK__imported__module__605394__;
2039// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/url.js [app-client] (ecmascript)
2040;
2041// MERGED MODULE: [project]/node_modules/@sentry/conventions/dist/attributes.mjs [app-client] (ecmascript)
2042;
2043const e = "ai.citations", i = "ai.completion_tokens.used", t = "ai.documents", n = "ai.finish_reason", r = "ai.frequency_penalty", a = "ai.function_call", s = "ai.generation_id", o = "ai.input_messages", l = "ai.is_search_required", p = "ai.metadata", c = "ai.model_id", u = "ai.model.provider", b = "ai.pipeline.name", g = "ai.preamble", d = "ai.presence_penalty", m = "ai.prompt_tokens.used", y = "ai.raw_prompting", _ = "ai.responses", h = "ai.response_format", v = "ai.search_queries", f = "ai.search_results", S = "ai.seed", E = "ai.streaming", T = "ai.tags", I = "ai.temperature", O = "ai.texts", k = "ai.tools", A = "ai.tool_calls", x = "ai.top_k", w = "ai.top_p", R = "ai.total_cost", N = "ai.total_tokens.used", C = "ai.warnings", P = "angular.version", D = "app.app_build", L = "app.app_identifier", U = "app.app_name", M = "app.app_start_time", q = "app.app_version", G = "app.build", Y = "app.identifier", V = "app.in_foreground", W = "app.name", F = "app_start_cold", B = "app.start_time", H = "app_start_type", z = "app_start_warm", K = "app.version", j = "app.vitals.frames.delay.value", Q = "app.vitals.frames.frozen.count", X = "app.vitals.frames.slow.count", J = "app.vitals.frames.total.count", Z = "app.vitals.start.cold.value", $ = "app.vitals.start.prewarmed", ee = "app.vitals.start.reason", ie = "app.vitals.start.screen", te = "app.vitals.start.type", ne = "app.vitals.start.warm.value", re = "app.vitals.ttfd.value", ae = "app.vitals.ttid.value", se = "art.gc.blocking_count", oe = "art.gc.blocking_time", le = "art.gc.pre_oome_count", pe = "art.gc.total_count", ce = "art.gc.total_time", ue = "art.gc.waiting_time", be = "art.memory.free", ge = "art.memory.free_until_gc", de = "art.memory.free_until_oome", me = "art.memory.max", ye = "art.memory.total", _e = "aws.cloudwatch.logs.log_group", he = "aws.cloudwatch.logs.log_stream", ve = "aws.cloudwatch.logs.url", fe = "aws.dynamodb.attribute_definitions", Se = "aws.dynamodb.consistent_read", Ee = "aws.dynamodb.consumed_capacity", Te = "aws.dynamodb.count", Ie = "aws.dynamodb.exclusive_start_table", Oe = "aws.dynamodb.global_secondary_indexes", ke = "aws.dynamodb.global_secondary_index_updates", Ae = "aws.dynamodb.index_name", xe = "aws.dynamodb.item_collection_metrics", we = "aws.dynamodb.limit", Re = "aws.dynamodb.local_secondary_indexes", Ne = "aws.dynamodb.projection", Ce = "aws.dynamodb.provisioned_read_capacity", Pe = "aws.dynamodb.provisioned_write_capacity", De = "aws.dynamodb.scanned_count", Le = "aws.dynamodb.scan_forward", Ue = "aws.dynamodb.segment", Me = "aws.dynamodb.select", qe = "aws.dynamodb.table_count", Ge = "aws.dynamodb.table_names", Ye = "aws.dynamodb.total_segments", Ve = "aws.extended_request_id", We = "aws.kinesis.stream_name", Fe = "aws.kinesis.stream.name", Be = "aws.lambda.aws_request_id", He = "aws.lambda.execution_duration_in_millis", ze = "aws.lambda.function_name", Ke = "aws.lambda.function_version", je = "aws.lambda.invoked_arn", Qe = "aws.lambda.invoked_function_arn", Xe = "aws.lambda.remaining_time_in_millis", Je = "aws.log.group.names", Ze = "aws.log.stream.names", $e = "aws.request.extended_id", ei = "aws.request_id", ii = "aws.request.id", ti = "aws.s3.bucket", ni = "aws.secretsmanager.secret.arn", ri = "aws.sns.topic.arn", ai = "aws.step_functions.activity.arn", si = "aws.step_functions.state_machine.arn", oi = "blocked_main_thread", li = "browser.name", pi = "browser.performance.navigation.activation_start", ci = "browser.performance.time_origin", ui = "browser.report.type", bi = "browser.script.invoker", gi = "browser.script.invoker_type", di = "browser.script.source_char_position", mi = "browser.version", yi = "browser.web_vital.cls.report_event", _i = "browser.web_vital.cls.source.<key>", hi = "browser.web_vital.cls.source", vi = "browser.web_vital.cls.value", fi = "browser.web_vital.fcp.value", Si = "browser.web_vital.fp.value", Ei = "browser.web_vital.inp.value", Ti = "browser.web_vital.lcp.element", Ii = "browser.web_vital.lcp.id", Oi = "browser.web_vital.lcp.load_time", ki = "browser.web_vital.lcp.render_time", Ai = "browser.web_vital.lcp.report_event", xi = "browser.web_vital.lcp.size", wi = "browser.web_vital.lcp.url", Ri = "browser.web_vital.lcp.value", Ni = "browser.web_vital.ttfb.request_time", Ci = "browser.web_vital.ttfb.value", Pi = "cache.hit", Di = "cache.item_size", Li = "cache.key", Ui = "cache.operation", Mi = "cache.ttl", qi = "cache.write", Gi = "channel", Yi = "client.address", Vi = "client.port", Wi = "cloudflare.d1.duration", Fi = "cloudflare.d1.query_type", Bi = "cloudflare.d1.rows_read", Hi = "cloudflare.d1.rows_written", zi = "cloudflare.durable_object.query.bindings", Ki = "cloudflare.durable_object.response.rows_read", ji = "cloudflare.durable_object.response.rows_written", Qi = "cloudflare.r2.bucket", Xi = "cloudflare.r2.operation", Ji = "cloudflare.r2.request.delimiter", Zi = "cloudflare.r2.request.key", $i = "cloudflare.r2.request.part_number", et = "cloudflare.r2.request.prefix", it = "cloudflare.workflow.attempt", tt = "cloudflare.workflow.retries.backoff", nt = "cloudflare.workflow.retries.delay", rt = "cloudflare.workflow.retries.limit", at = "cloudflare.workflow.timeout", st = "cloud.account.id", ot = "cloud.availability_zone", lt = "cloud.platform", pt = "cloud.provider", ct = "cloud.region", ut = "cloud.resource_id", bt = "cls", gt = "cls.source.<key>", dt = "cls.source", mt = "code.filepath", yt = "code.file.path", _t = "code.function", ht = "code.function.name", vt = "code.lineno", ft = "code.line.number", St = "code.namespace", Et = "connectionType", Tt = "connection.rtt", It = "culture.calendar", Ot = "culture.display_name", kt = "culture.is_24_hour_format", At = "culture.locale", xt = "culture.timezone", wt = "db.collection.name", Rt = "db.driver.name", Nt = "db.name", Ct = "db.namespace", Pt = "db.operation", Dt = "db.operation.batch.size", Lt = "db.operation.name", Ut = "db.query.parameter.<key>", Mt = "db.query.parameter", qt = "db.query.summary", Gt = "db.query.text", Yt = "db.redis.connection", Vt = "db.redis.key", Wt = "db.redis.parameters", Ft = "db.response.status_code", Bt = "db.sql.bindings", Ht = "db.statement", zt = "db.stored_procedure.name", Kt = "db.system", jt = "db.system.name", Qt = "db.user", Xt = "deviceMemory", Jt = "device.archs", Zt = "device.battery_level", $t = "device.battery_temperature", en = "device.boot_time", tn = "device.brand", nn = "device.charging", rn = "device.chipset", an = "device.class", sn = "device.connection_type", on = "device.cpu_description", ln = "device.external_free_storage", pn 
2043= "device.external_storage_size", cn = "device.family", un = "device.free_memory", bn = "device.free_storage", gn = "device.id", dn = "device.locale", mn = "device.low_memory", yn = "device.low_power_mode", _n = "device.manufacturer", hn = "device.memory.estimated_capacity", vn = "device.memory_size", fn = "device.model", Sn = "device.model_id", En = "device.name", Tn = "device.online", In = "device.orientation", On = "device.processor_count", kn = "device.processor_frequency", An = "device.screen_density", xn = "device.screen_dpi", wn = "device.screen_height_pixels", Rn = "device.screen_width_pixels", Nn = "device.simulator", Cn = "device.storage_size", Pn = "device.thermal_state", Dn = "device.timezone", Ln = "device.usable_memory", Un = "dist", Mn = "effectiveConnectionType", qn = "environment", Gn = "error.type", Yn = "event.id", Vn = "event.name", Wn = "exception.escaped", Fn = "exception.message", Bn = "exception.stacktrace", Hn = "exception.type", zn = "faas.coldstart", Kn = "faas.cron", jn = "faas.duration_in_ms", Qn = "faas.entry_point", Xn = "faas.execution", Jn = "faas.id", Zn = "faas.identity", $n = "faas.invocation_id", er = "faas.invoked_name", ir = "faas.invoked_provider", tr = "faas.invoked_region", nr = "faas.name", rr = "faas.time", ar = "faas.trigger", sr = "faas.version", or = "fcp", lr = "flag.evaluation.<key>", pr = "flag.evaluation", cr = "fp", ur = "frames.delay", br = "frames.frozen", gr = "frames_frozen_rate", dr = "frames.slow", mr = "frames_slow_rate", yr = "frames.total", _r = "fs_error", hr = "gcp.function.context.event_id", vr = "gcp.function.context.event_type", fr = "gcp.function.context.id", Sr = "gcp.function.context.resource", Er = "gcp.function.context.source", Tr = "gcp.function.context.specversion", Ir = "gcp.function.context.time", Or = "gcp.function.context.timestamp", kr = "gcp.function.context.type", Ar = "gcp.project.id", xr = "gen_ai.agent.name", wr = "gen_ai.context.utilization", Rr = "gen_ai.context.window_size", Nr = "gen_ai.conversation.id", Cr = "gen_ai.cost.cache_creation.input_tokens", Pr = "gen_ai.cost.cache_read.input_tokens", Dr = "gen_ai.cost.input_tokens", Lr = "gen_ai.cost.output_tokens", Ur = "gen_ai.cost.reasoning.output_tokens", Mr = "gen_ai.cost.total_tokens", qr = "gen_ai.embeddings.input", Gr = "gen_ai.function_id", Yr = "gen_ai.input.messages", Vr = "gen_ai.operation.name", Wr = "gen_ai.operation.type", Fr = "gen_ai.output.messages", Br = "gen_ai.pipeline.name", Hr = "gen_ai.prompt", zr = "gen_ai.prompt.name", Kr = "gen_ai.provider.name", jr = "gen_ai.request.available_tools", Qr = "gen_ai.request.frequency_penalty", Xr = "gen_ai.request.max_tokens", Jr = "gen_ai.request.messages", Zr = "gen_ai.request.model", $r = "gen_ai.request.presence_penalty", ea = "gen_ai.request.reasoning_effort", ia = "gen_ai.request.seed", ta = "gen_ai.request.stop_sequences", na = "gen_ai.request.temperature", ra = "gen_ai.request.top_k", aa = "gen_ai.request.top_p", sa = "gen_ai.response.finish_reasons", oa = "gen_ai.response.id", la = "gen_ai.response.model", pa = "gen_ai.response.streaming", ca = "gen_ai.response.text", ua = "gen_ai.response.time_to_first_chunk", ba = "gen_ai.response.time_to_first_token", ga = "gen_ai.response.tokens_per_second", da = "gen_ai.response.tool_calls", ma = "gen_ai.system", ya = "gen_ai.system_instructions", _a = "gen_ai.system.message", ha = "gen_ai.tool.call.arguments", va = "gen_ai.tool.call.result", fa = "gen_ai.tool.definitions", Sa = "gen_ai.tool.description", Ea = "gen_ai.tool.input", Ta = "gen_ai.tool.message", Ia = "gen_ai.tool.name", Oa = "gen_ai.tool.output", ka = "gen_ai.tool.type", Aa = "gen_ai.usage.cache_creation.input_tokens", xa = "gen_ai.usage.cache_read.input_tokens", wa = "gen_ai.usage.completion_tokens", Ra = "gen_ai.usage.input_tokens", Na = "gen_ai.usage.input_tokens.cached", Ca = "gen_ai.usage.input_tokens.cache_write", Pa = "gen_ai.usage.output_tokens", Da = "gen_ai.usage.output_tokens.reasoning", La = "gen_ai.usage.prompt_tokens", Ua = "gen_ai.usage.reasoning.output_tokens", Ma = "gen_ai.usage.total_tokens", qa = "graphql.document", Ga = "graphql.operation.name", Ya = "graphql.operation.type", Va = "hardwareConcurrency", Wa = "http.client_ip", Fa = "http.decoded_response_content_length", Ba = "http.flavor", Ha = "http.fragment", za = "http.host", Ka = "http.method", ja = "http.query", Qa = "http.request.body.data", Xa = "http.request.connection_end", Ja = "http.request.connect_start", Za = "http.request.domain_lookup_end", $a = "http.request.domain_lookup_start", es = "http.request.fetch_start", is = "http.request.header.<key>", ts = "http.request.header", ns = "http.request.method", rs = "http.request_method", as = "http.request.redirect_end", ss = "http.request.redirect_start", os = "http.request.request_start", ls = "http.request.resend_count", ps = "http.request.response_end", cs = "http.request.response_start", us = "http.request.same_origin", bs = "http.request.secure_connection_start", gs = "http.request.time_to_first_byte", ds = "http.request.worker_start", ms = "http.response.body.size", ys = "http.response_content_length", _s = "http.response.header.content-length", hs = "http.response.header.<key>", vs = "http.response.header", fs = "http.response.size", Ss = "http.response.status_code", Es = "http.response_transfer_size", Ts = "http.route", Is = "http.scheme", Os = "http.server_name", ks = "http.server.request.time_in_queue", As = "http.status_code", xs = "http.target", ws = "http.url", Rs = "http.user_agent", Ns = "id", Cs = "inp", Ps = "jsonrpc.protocol.version", Ds = "jsonrpc.request.id", Ls = "jvm.gc.action", Us = "jvm.gc.name", Ms = "jvm.memory.pool.name", qs = "jvm.memory.type", Gs = "jvm.thread.daemon", Ys = "jvm.thread.state", Vs = "koa.name", Ws = "koa.type", Fs = "lcp", Bs = "lcp.element", Hs = "lcp.id", zs = "lcp.loadTime", Ks = "lcp.renderTime", js = "lcp.size", Qs = "lcp.url", Xs = "logger.name", Js = "mcp.cancelled.reason", Zs = "mcp.cancelled.request_id", $s = "mcp.client.name", eo = "m
2043cp.client.title", io = "mcp.client.version", to = "mcp.lifecycle.phase", no = "mcp.logging.data_type", ro = "mcp.logging.level", ao = "mcp.logging.logger", so = "mcp.logging.message", oo = "mcp.method.name", lo = "mcp.progress.current", po = "mcp.progress.message", co = "mcp.progress.percentage", uo = "mcp.progress.token", bo = "mcp.progress.total", go = "mcp.prompt.name", mo = "mcp.prompt.result.description", yo = "mcp.prompt.result.message_content", _o = "mcp.prompt.result.message_count", ho = "mcp.prompt.result.message_role", vo = "mcp.protocol.ready", fo = "mcp.protocol.version", So = "mcp.request.argument.<key>", Eo = "mcp.request.argument", To = "mcp.request.argument.name", Io = "mcp.request.argument.uri", Oo = "mcp.request.id", ko = "mcp.resource.protocol", Ao = "mcp.resource.uri", xo = "mcp.server.name", wo = "mcp.server.title", Ro = "mcp.server.version", No = "mcp.session.id", Co = "mcp.tool.name", Po = "mcp.tool.result.content", Do = "mcp.tool.result.content_count", Lo = "mcp.tool.result.is_error", Uo = "mcp.transport", Mo = "mdc.<key>", qo = "mdc", Go = "messaging.batch.message_count", Yo = "messaging.destination", Vo = "messaging.destination.connection", Wo = "messaging.destination.name", Fo = "messaging.message.body.size", Bo = "messaging.message.conversation_id", Ho = "messaging.message.envelope.size", zo = "messaging.message.id", Ko = "messaging.message.receive.latency", jo = "messaging.message.retry.count", Qo = "messaging.operation.name", Xo = "messaging.operation.type", Jo = "messaging.rabbitmq.destination.routing_key", Zo = "messaging.system", $o = "method", el = "middleware.name", il = "navigation.origin", tl = "navigation.route.id", nl = "navigation.type", rl = "nel.elapsed_time", al = "nel.phase", sl = "nel.referrer", ol = "nel.sampling_function", ll = "nel.type", pl = "network.connection.effective_type", cl = "network.connection.rtt", ul = "network.connection.type", bl = "network.local.address", gl = "network.local.port", dl = "network.peer.address", ml = "network.peer.port", yl = "network.protocol.name", _l = "network.protocol.version", hl = "network.transport", vl = "network.type", fl = "net.host.ip", Sl = "net.host.name", El = "net.host.port", Tl = "net.peer.ip", Il = "net.peer.name", Ol = "net.peer.port", kl = "net.protocol.name", Al = "net.protocol.version", xl = "net.sock.family", wl = "net.sock.host.addr", Rl = "net.sock.host.port", Nl = "net.sock.peer.addr", Cl = "net.sock.peer.name", Pl = "net.sock.peer.port", Dl = "net.transport", Ll = "os.build", Ul = "os.build_id", Ml = "os.description", ql = "os.kernel_version", Gl = "os.name", Yl = "os.raw_description", Vl = "os.rooted", Wl = "os.theme", Fl = "os.type", Bl = "os.version", Hl = "otel.kind", zl = "otel.scope.name", Kl = "otel.scope.version", jl = "otel.status_code", Ql = "otel.status_description", Xl = "params.<key>", Jl = "params", Zl = "performance.activationStart", $l = "performance.timeOrigin", ep = "previous_route", ip = "process.command_args", tp = "process.executable.name", np = "process.pid", rp = "process.runtime.description", ap = "process.runtime.engine.name", sp = "process.runtime.engine.version", op = "process.runtime.name", lp = "process.runtime.version", pp = "query.<key>", cp = "query", up = "react.version", bp = "release", gp = "remix.action_form_data.<key>", dp = "remix.action_form_data", mp = "replay_id", yp = "resource.deployment.environment", _p = "resource.deployment.environment.name", hp = "resource.render_blocking_status", vp = "route", fp = "rpc.grpc.status_code", Sp = "rpc.method", Ep = "rpc.response.status_code", Tp = "rpc.service", Ip = "rpc.system", Op = "rpc.system.name", kp = "runtime.build", Ap = "runtime.name", xp = "runtime.raw_description", wp = "runtime.version", Rp = "score.<key>", Np = "score", Cp = "score.ratio.<key>", Pp = "score.ratio", Dp = "score.total", Lp = "score.weight.<key>", Up = "score.weight", Mp = "sentry.action", qp = "sentry.browser.name", Gp = "sentry.browser.version", Yp = "sentry.cancellation_reason", Vp = "sentry.category", Wp = "sentry.client_sample_rate", Fp = "sentry.description", Bp = "sentry.dist", Hp = "sentry.domain", zp = "sentry.dsc.environment", Kp = "sentry.dsc.project_id", jp = "sentry.dsc.public_key", Qp = "sentry.dsc.release", Xp = "sentry.dsc.sampled", Jp = "sentry.dsc.sample_rate", Zp = "sentry.dsc.trace_id", $p = "sentry.dsc.transaction", ec = "sentry.environment", ic = "sentry.exclusive_time", tc = "sentry.graphql.operation", nc = "sentry.group", rc = "sentry.http.prefetch", ac = "sentry.idle_span_finish_reason", sc = "sentry.is_remote", oc = "sentry.kind", lc = "sentry.main_thread", pc = "sentry.message.parameter.<key>", cc = "sentry.message.template", uc = "sentry.metric.source", bc = "sentry.mobile", gc = "sentry.module.<key>", dc = "sentry.module", mc = "sentry.nextjs.ssr.function.route", yc = "sentry.nextjs.ssr.function.type", _c = "sentry.normalized_db_query", hc = "sentry.normalized_db_query.hash", vc = "sentry.normalized_description", fc = "sentry.observed_timestamp_nanos", Sc = "sentry.op", Ec = "sentry.origin", Tc = "sentry.platform", Ic = "sentry.profiler_id", Oc = "sentry.profile_id", kc = "sentry.release", Ac = "sentry.replay_id", xc = "sentry.replay_is_buffering", wc = "sentry.report_event", Rc = "sentry.sdk.integrations", Nc = "sentry.sdk.name", Cc = "sentry.sdk.version", Pc = "sentry.segment.id", Dc = "sentry.segment_id", Lc = "sentry.segment.name", Uc = "sentry.server_sample_rate", Mc = "sentry.source", qc = "sentry.span.source", Gc = "sentry.status", Yc = "sentry.status_code", Vc = "sentry.status.message", Wc = "sentry.sveltekit.navigation.from", Fc = "sentry.sveltekit.navigation.to", Bc = "sentry.sveltekit.navigation.type", Hc = "sentry.thread.id", zc = "sentry.timestamp.sequence", Kc = "sentry.trace_lifecycle", jc = "sentry.trace.parent_span_id", Qc = "sentry.trace.status", Xc = "sentry.transaction", Jc = "sentry.user.email", Zc = "sentry.user.geo.city", $c = "sentry.user.geo.country_code", eu = "sentry.user.geo.region", iu = "sentry.user.geo.subdivision", tu = "sentry.user.id", nu = "sentry.user.ip", ru = "sentry.user.username", au = "server.address", su = "server_name", ou = "server.port", lu = "service.name", pu = "service.version", cu = "session.id", uu = "stall_percentage", bu = "stall_total_time", gu = "state.type", du = "thread.id", mu = "thread.name", yu = "timber.tag", _u = "time_to_full_display", hu = "t
2043ime_to_initial_display", vu = "transaction", fu = "trpc.procedure_path", Su = "trpc.procedure_type", Eu = "ttfb", Tu = "ttfb.requestTime", Iu = "type", Ou = "ui.component_name", ku = "ui.contributes_to_ttfd", Au = "ui.contributes_to_ttid", xu = "ui.element.height", wu = "ui.element.id", Ru = "ui.element.identifier", Nu = "ui.element.load_time", Cu = "ui.element.paint_type", Pu = "ui.element.render_time", Du = "ui.element.type", Lu = "ui.element.url", Uu = "ui.element.width", Mu = "url", qu = "url.domain", Gu = "url.fragment", Yu = "url.full", Vu = "url.path", Wu = "url.path.parameter.<key>", Fu = "url.path.parameter", Bu = "url.port", Hu = "url.query", zu = "url.same_origin", Ku = "url.scheme", ju = "url.template", Qu = "user_agent.original", Xu = "user.email", Ju = "user.full_name", Zu = "user.geo.city", $u = "user.geo.country_code", eb = "user.geo.region", ib = "user.geo.subdivision", tb = "user.hash", nb = "user.id", rb = "user.ip_address", ab = "user.name", sb = "user.roles", ob = "vercel.branch", lb = "vercel.build_id", pb = "vercel.deployment_id", cb = "vercel.destination", ub = "vercel.edge_type", bb = "vercel.entrypoint", gb = "vercel.execution_region", db = "vercel.id", mb = "vercel.ja3_digest", yb = "vercel.ja4_digest", _b = "vercel.log_type", hb = "vercel.path", vb = "vercel.project_id", fb = "vercel.project_name", Sb = "vercel.proxy.cache_id", Eb = "vercel.proxy.client_ip", Tb = "vercel.proxy.host", Ib = "vercel.proxy.lambda_region", Ob = "vercel.proxy.method", kb = "vercel.proxy.path", Ab = "vercel.proxy.path_type", xb = "vercel.proxy.path_type_variant", wb = "vercel.proxy.referer", Rb = "vercel.proxy.region", Nb = "vercel.proxy.response_byte_size", Cb = "vercel.proxy.scheme", Pb = "vercel.proxy.status_code", Db = "vercel.proxy.timestamp", Lb = "vercel.proxy.user_agent", Ub = "vercel.proxy.vercel_cache", Mb = "vercel.proxy.vercel_id", qb = "vercel.proxy.waf_action", Gb = "vercel.proxy.waf_rule_id", Yb = "vercel.request_id", Vb = "vercel.source", Wb = "vercel.status_code", Fb = {
2044    "ai.citations": "string[]",
2045    "ai.completion_tokens.used": "integer",
2046    "ai.documents": "string[]",
2047    "ai.finish_reason": "string",
2048    "ai.frequency_penalty": "double",
2049    "ai.function_call": "string",
2050    "ai.generation_id": "string",
2051    "ai.input_messages": "string",
2052    "ai.is_search_required": "boolean",
2053    "ai.metadata": "string",
2054    "ai.model_id": "string",
2055    "ai.model.provider": "string",
2056    "ai.pipeline.name": "string",
2057    "ai.preamble": "string",
2058    "ai.presence_penalty": "double",
2059    "ai.prompt_tokens.used": "integer",
2060    "ai.raw_prompting": "boolean",
2061    "ai.responses": "string[]",
2062    "ai.response_format": "string",
2063    "ai.search_queries": "string[]",
2064    "ai.search_results": "string[]",
2065    "ai.seed": "string",
2066    "ai.streaming": "boolean",
2067    "ai.tags": "string",
2068    "ai.temperature": "double",
2069    "ai.texts": "string[]",
2070    "ai.tools": "string[]",
2071    "ai.tool_calls": "string[]",
2072    "ai.top_k": "integer",
2073    "ai.top_p": "double",
2074    "ai.total_cost": "double",
2075    "ai.total_tokens.used": "integer",
2076    "ai.warnings": "string[]",
2077    "angular.version": "string",
2078    "app.app_build": "string",
2079    "app.app_identifier": "string",
2080    "app.app_name": "string",
2081    "app.app_start_time": "string",
2082    "app.app_version": "string",
2083    "app.build": "string",
2084    "app.identifier": "string",
2085    "app.in_foreground": "boolean",
2086    "app.name": "string",
2087    app_start_cold: "double",
2088    "app.start_time": "string",
2089    app_start_type: "string",
2090    app_start_warm: "double",
2091    "app.version": "string",
2092    "app.vitals.frames.delay.value": "integer",
2093    "app.vitals.frames.frozen.count": "integer",
2094    "app.vitals.frames.slow.count": "integer",
2095    "app.vitals.frames.total.count": "integer",
2096    "app.vitals.start.cold.value": "double",
2097    "app.vitals.start.prewarmed": "boolean",
2098    "app.vitals.start.reason": "string",
2099    "app.vitals.start.screen": "string",
2100    "app.vitals.start.type": "string",
2101    "app.vitals.start.warm.value": "double",
2102    "app.vitals.ttfd.value": "double",
2103    "app.vitals.ttid.value": "double",
2104    "art.gc.blocking_count": "integer",
2105    "art.gc.blocking_time": "double",
2106    "art.gc.pre_oome_count": "integer",
2107    "art.gc.total_count": "integer",
2108    "art.gc.total_time": "double",
2109    "art.gc.waiting_time": "double",
2110    "art.memory.free": "integer",
2111    "art.memory.free_until_gc": "integer",
2112    "art.memory.free_until_oome": "integer",
2113    "art.memory.max": "integer",
2114    "art.memory.total": "integer",
2115    "aws.cloudwatch.logs.log_group": "string",
2116    "aws.cloudwatch.logs.log_stream": "string",
2117    "aws.cloudwatch.logs.url": "string",
2118    "aws.dynamodb.attribute_definitions": "string[]",
2119    "aws.dynamodb.consistent_read": "boolean",
2120    "aws.dynamodb.consumed_capacity": "string[]",
2121    "aws.dynamodb.count": "integer",
2122    "aws.dynamodb.exclusive_start_table": "string",
2123    "aws.dynamodb.global_secondary_indexes": "string[]",
2124    "aws.dynamodb.global_secondary_index_updates": "string[]",
2125    "aws.dynamodb.index_name": "string",
2126    "aws.dynamodb.item_collection_metrics": "string",
2127    "aws.dynamodb.limit": "integer",
2128    "aws.dynamodb.local_secondary_indexes": "string[]",
2129    "aws.dynamodb.projection": "string",
2130    "aws.dynamodb.provisioned_read_capacity": "double",
2131    "aws.dynamodb.provisioned_write_capacity": "double",
2132    "aws.dynamodb.scanned_count": "integer",
2133    "aws.dynamodb.scan_forward": "boolean",
2134    "aws.dynamodb.segment": "integer",
2135    "aws.dynamodb.select": "string",
2136    "aws.dynamodb.table_count": "integer",
2137    "aws.dynamodb.table_names": "string[]",
2138    "aws.dynamodb.total_segments": "integer",
2139    "aws.extended_request_id": "string",
2140    "aws.kinesis.stream_name": "string",
2141    "aws.kinesis.stream.name": "string",
2142    "aws.lambda.aws_request_id": "string",
2143    "aws.lambda.execution_duration_in_millis": "double",
2144    "aws.lambda.function_name": "string",
2145    "aws.lambda.function_version": "string",
2146    "aws.lambda.invoked_arn": "string",
2147    "aws.lambda.invoked_function_arn": "string",
2148    "aws.lambda.remaining_time_in_millis": "double",
2149    "aws.log.group.names": "string[]",
2150    "aws.log.stream.names": "string[]",
2151    "aws.request.extended_id": "string",
2152    "aws.request_id": "string",
2153    "aws.request.id": "string",
2154    "aws.s3.bucket": "string",
2155    "aws.secretsmanager.secret.arn": "string",
2156    "aws.sns.topic.arn": "string",
2157    "aws.step_functions.activity.arn": "string",
2158    "aws.step_functions.state_machine.arn": "string",
2159    blocked_main_thread: "boolean",
2160    "browser.name": "string",
2161    "browser.performance.navigation.activation_start": "double",
2162    "browser.performance.time_origin": "double",
2163    "browser.report.type": "string",
2164    "browser.script.invoker": "string",
2165    "browser.script.invoker_type": "string",
2166    "browser.script.source_char_position": "integer",
2167    "browser.version": "string",
2168    "browser.web_vital.cls.report_event": "string",
2169    "browser.web_vital.cls.source.<key>": "string",
2170    "browser.web_vital.cls.value": "double",
2171    "browser.web_vital.fcp.value": "double",
2172    "browser.web_vital.fp.value": "double",
2173    "browser.web_vital.inp.value": "double",
2174    "browser.web_vital.lcp.element": "string",
2175    "browser.web_vital.lcp.id": "string",
2176    "browser.web_vital.lcp.load_time": "integer",
2177    "browser.web_vital.lcp.render_time": "integer",
2178    "browser.web_vital.lcp.report_event": "string",
2179    "browser.web_vital.lcp.size": "integer",
2180    "browser.web_vital.lcp.url": "string",
2181    "browser.web_vital.lcp.value": "double",
2182    "browser.web_vital.ttfb.request_time": "double",
2183    "browser.web_vital.ttfb.value": "double",
2184    "cache.hit": "boolean",
2185    "cache.item_size": "integer",
2186    "cache.key": "string[]",
2187    "cache.operation": "string",
2188    "cache.ttl": "integer",
2189    "cache.write": "boolean",
2190    channel: "string",
2191    "client.address": "string",
2192    "client.port": "integer",
2193    "cloudflare.d1.duration": "integer",
2194    "cloudflare.d1.query_type": "string",
2195    "cloudflare.d1.rows_read": "integer",
2196    "cloudflare.d1.rows_written": "integer",
2197    "cloudflare.durable_object.query.bindings": "integer",
2198    "cloudflare.durable_object.response.rows_read": "integer",
2199    "cloudflare.durable_object.response.rows_written": "integer",
2200    "cloudflare.r2.bucket": "string",
2201    "cloudflare.r2.operation": "string",
2202    "cloudflare.r2.request.delimiter": "string",
2203    "cloudflare.r2.request.key": "string",
2204    "cloudflare.r2.request.part_number": "integer",
2205    "cloudflare.r2.request.prefix": "string",
2206    "cloudflare.workflow.attempt": "integer",
2207    "cloudflare.workflow.retries.backoff": "string",
2208    "cloudflare.workflow.retries.delay": "string",
2209    "cloudflare.workflow.retries.limit": "integer",
2210    "cloudflare.workflow.timeout": "string",
2211    "cloud.account.id": "string",
2212    "cloud.availability_zone": "string",
2213    "cloud.platform": "string",
2214    "cloud.provider": "string",
2215    "cloud.region": "string",
2216    "cloud.resource_id": "string",
2217    cls: "double",
2218    "cls.source.<key>": "string",
2219    "code.filepath": "string",
2220    "code.file.path": "string",
2221    "code.function": "string",
2222    "code.function.name": "string",
2223    "code.lineno": "integer",
2224    "code.line.number": "integer",
2225    "code.namespace": "string",
2226    connectionType: "string",
2227    "connection.rtt": "integer",
2228    "culture.calendar": "string",
2229    "culture.display_name": "string",
2230    "culture.is_24_hour_format": "boolean",
2231    "culture.locale": "string",
2232    "culture.timezone": "string",
2233    "db.collection.name": "string",
2234    "db.driver.name": "string",
2235    "db.name": "string",
2236    "db.namespace": "string",
2237    "db.operation": "string",
2238    "db.operation.batch.size": "integer",
2239    "db.operation.name": "string",
2240    "db.query.parameter.<key>": "string",
2241    "db.query.summary": "string",
2242    "db.query.text": "string",
2243    "db.redis.connection": "string",
2244    "db.redis.key": "string",
2245    "db.redis.parameters": "string[]",
2246    "db.response.status_code": "string",
2247    "db.sql.bindings": "string[]",
2248    "db.statement": "string",
2249    "db.stored_procedure.name": "string",
2250    "db.system": "string",
2251    "db.system.name": "string",
2252    "db.user": "string",
2253    deviceMemory: "string",
2254    "device.archs": "string[]",
2255    "device.battery_level": "double",
2256    "device.battery_temperature": "double",
2257    "device.boot_time": "string",
2258    "device.brand": "string",
2259    "device.charging": "boolean",
2260    "device.chipset": "string",
2261    "device.class": "string",
2262    "device.connection_type": "string",
2263    "device.cpu_description": "string",
2264    "device.external_free_storage": "integer",
2265    "device.external_storage_size": "integer",
2266    "device.family": "string",
2267    "device.free_memory": "integer",
2268    "device.free_storage": "integer",
2269    "device.id": "string",
2270    "device.locale": "string",
2271    "device.low_memory": "boolean",
2272    "device.low_power_mode": "boolean",
2273    "device.manufacturer": "string",
2274    "device.memory.estimated_capacity": "integer",
2275    "device.memory_size": "integer",
2276    "device.model": "string",
2277    "device.model_id": "string",
2278    "device.name": "string",
2279    "device.online": "boolean",
2280    "device.orientation": "string",
2281    "device.processor_count": "integer",
2282    "device.processor_frequency": "double",
2283    "device.screen_density": "double",
2284    "device.screen_dpi": "integer",
2285    "device.screen_height_pixels": "integer",
2286    "device.screen_width_pixels": "integer",
2287    "device.simulator": "boolean",
2288    "device.storage_size": "integer",
2289    "device.thermal_state": "string",
2290    "device.timezone": "string",
2291    "device.usable_memory": "integer",
2292    dist: "string",
2293    effectiveConnectionType: "string",
2294    environment: "string",
2295    "error.type": "string",
2296    "event.id": "integer",
2297    "event.name": "string",
2298    "exception.escaped": "boolean",
2299    "exception.message": "string",
2300    "exception.stacktrace": "string",
2301    "exception.type": "string",
2302    "faas.coldstart": "boolean",
2303    "faas.cron": "string",
2304    "faas.duration_in_ms": "integer",
2305    "faas.entry_point": "string",
2306    "faas.execution": "string",
2307    "faas.id": "string",
2308    "faas.identity": "string",
2309    "faas.invocation_id": "string",
2310    "faas.invoked_name": "string",
2311    "faas.invoked_provider": "string",
2312    "faas.invoked_region": "string",
2313    "faas.name": "string",
2314    "faas.time": "string",
2315    "faas.trigger": "string",
2316    "faas.version": "string",
2317    fcp: "double",
2318    "flag.evaluation.<key>": "boolean",
2319    fp: "double",
2320    "frames.delay": "integer",
2321    "frames.frozen": "integer",
2322    frames_frozen_rate: "double",
2323    "frames.slow": "integer",
2324    frames_slow_rate: "double",
2325    "frames.total": "integer",
2326    fs_error: "string",
2327    "gcp.function.context.event_id": "string",
2328    "gcp.function.context.event_type": "string",
2329    "gcp.function.context.id": "string",
2330    "gcp.function.context.resource": "string",
2331    "gcp.function.context.source": "string",
2332    "gcp.function.context.specversion": "string",
2333    "gcp.function.context.time": "string",
2334    "gcp.function.context.timestamp": "string",
2335    "gcp.function.context.type": "string",
2336    "gcp.project.id": "string",
2337    "gen_ai.agent.name": "string",
2338    "gen_ai.context.utilization": "double",
2339    "gen_ai.context.window_size": "integer",
2340    "gen_ai.conversation.id": "string",
2341    "gen_ai.cost.cache_creation.input_tokens": "double",
2342    "gen_ai.cost.cache_read.input_tokens": "double",
2343    "gen_ai.cost.input_tokens": "double",
2344    "gen_ai.cost.output_tokens": "double",
2345    "gen_ai.cost.reasoning.output_tokens": "double",
2346    "gen_ai.cost.total_tokens": "double",
2347    "gen_ai.embeddings.input": "string",
2348    "gen_ai.function_id": "string",
2349    "gen_ai.input.messages": "string",
2350    "gen_ai.operation.name": "string",
2351    "gen_ai.operation.type": "string",
2352    "gen_ai.output.messages": "string",
2353    "gen_ai.pipeline.name": "string",
2354    "gen_ai.prompt": "string",
2355    "gen_ai.prompt.name": "string",
2356    "gen_ai.provider.name": "string",
2357    "gen_ai.request.available_tools": "string",
2358    "gen_ai.request.frequency_penalty": "double",
2359    "gen_ai.request.max_tokens": "integer",
2360    "gen_ai.request.messages": "string",
2361    "gen_ai.request.model": "string",
2362    "gen_ai.request.presence_penalty": "double",
2363    "gen_ai.request.reasoning_effort": "string",
2364    "gen_ai.request.seed": "string",
2365    "gen_ai.request.stop_sequences": "string[]",
2366    "gen_ai.request.temperature": "double",
2367    "gen_ai.request.top_k": "integer",
2368    "gen_ai.request.top_p": "double",
2369    "gen_ai.response.finish_reasons": "string",
2370    "gen_ai.response.id": "string",
2371    "gen_ai.response.model": "string",
2372    "gen_ai.response.streaming": "boolean",
2373    "gen_ai.response.text": "string",
2374    "gen_ai.response.time_to_first_chunk": "double",
2375    "gen_ai.response.time_to_first_token": "double",
2376    "gen_ai.response.tokens_per_second": "double",
2377    "gen_ai.response.tool_calls": "string",
2378    "gen_ai.system": "string",
2379    "gen_ai.system_instructions": "string",
2380    "gen_ai.system.message": "string",
2381    "gen_ai.tool.call.arguments": "string",
2382    "gen_ai.tool.call.result": "string",
2383    "gen_ai.tool.definitions": "string",
2384    "gen_ai.tool.description": "string",
2385    "gen_ai.tool.input": "string",
2386    "gen_ai.tool.message": "string",
2387    "gen_ai.tool.name": "string",
2388    "gen_ai.tool.output": "string",
2389    "gen_ai.tool.type": "string",
2390    "gen_ai.usage.cache_creation.input_tokens": "integer",
2391    "gen_ai.usage.cache_read.input_tokens": "integer",
2392    "gen_ai.usage.completion_tokens": "integer",
2393    "gen_ai.usage.input_tokens": "integer",
2394    "gen_ai.usage.input_tokens.cached": "integer",
2395    "gen_ai.usage.input_tokens.cache_write": "integer",
2396    "gen_ai.usage.output_tokens": "integer",
2397    "gen_ai.usage.output_tokens.reasoning": "integer",
2398    "gen_ai.usage.prompt_tokens": "integer",
2399    "gen_ai.usage.reasoning.output_tokens": "integer",
2400    "gen_ai.usage.total_tokens": "integer",
2401    "graphql.document": "string",
2402    "graphql.operation.name": "string",
2403    "graphql.operation.type": "string",
2404    hardwareConcurrency: "string",
2405    "http.client_ip": "string",
2406    "http.decoded_response_content_length": "integer",
2407    "http.flavor": "string",
2408    "http.fragment": "string",
2409    "http.host": "string",
2410    "http.method": "string",
2411    "http.query": "string",
2412    "http.request.body.data": "string",
2413    "http.request.connection_end": "double",
2414    "http.request.connect_start": "double",
2415    "http.request.domain_lookup_end": "double",
2416    "http.request.domain_lookup_start": "double",
2417    "http.request.fetch_start": "double",
2418    "http.request.header.<key>": "string[]",
2419    "http.request.method": "string",
2420    "http.request_method": "string",
2421    "http.request.redirect_end": "double",
2422    "http.request.redirect_start": "double",
2423    "http.request.request_start": "double",
2424    "http.request.resend_count": "integer",
2425    "http.request.response_end": "double",
2426    "http.request.response_start": "double",
2427    "http.request.same_origin": "boolean",
2428    "http.request.secure_connection_start": "double",
2429    "http.request.time_to_first_byte": "double",
2430    "http.request.worker_start": "double",
2431    "http.response.body.size": "integer",
2432    "http.response_content_length": "integer",
2433    "http.response.header.content-length": "string",
2434    "http.response.header.<key>": "string[]",
2435    "http.response.size": "integer",
2436    "http.response.status_code": "integer",
2437    "http.response_transfer_size": "integer",
2438    "http.route": "string",
2439    "http.scheme": "string",
2440    "http.server_name": "string",
2441    "http.server.request.time_in_queue": "double",
2442    "http.status_code": "integer",
2443    "http.target": "string",
2444    "http.url": "string",
2445    "http.user_agent": "string",
2446    id: "string",
2447    inp: "double",
2448    "jsonrpc.protocol.version": "string",
2449    "jsonrpc.request.id": "string",
2450    "jvm.gc.action": "string",
2451    "jvm.gc.name": "string",
2452    "jvm.memory.pool.name": "string",
2453    "jvm.memory.type": "string",
2454    "jvm.thread.daemon": "boolean",
2455    "jvm.thread.state": "string",
2456    "koa.name": "string",
2457    "koa.type": "string",
2458    lcp: "double",
2459    "lcp.element": "string",
2460    "lcp.id": "string",
2461    "lcp.loadTime": "integer",
2462    "lcp.renderTime": "integer",
2463    "lcp.size": "integer",
2464    "lcp.url": "string",
2465    "logger.name": "string",
2466    "mcp.cancelled.reason": "string",
2467    "mcp.cancelled.request_id": "string",
2468    "mcp.client.name": "string",
2469    "mcp.client.title": "string",
2470    "mcp.client.version": "string",
2471    "mcp.lifecycle.phase": "string",
2472    "mcp.logging.data_type": "string",
2473    "mcp.logging.level": "string",
2474    "mcp.logging.logger": "string",
2475    "mcp.logging.message": "string",
2476    "mcp.method.name": "string",
2477    "mcp.progress.current": "integer",
2478    "mcp.progress.message": "string",
2479    "mcp.progress.percentage": "double",
2480    "mcp.progress.token": "string",
2481    "mcp.progress.total": "integer",
2482    "mcp.prompt.name": "string",
2483    "mcp.prompt.result.description": "string",
2484    "mcp.prompt.result.message_content": "string",
2485    "mcp.prompt.result.message_count": "integer",
2486    "mcp.prompt.result.message_role": "string",
2487    "mcp.protocol.ready": "integer",
2488    "mcp.protocol.version": "string",
2489    "mcp.request.argument.<key>": "string",
2490    "mcp.request.argument.name": "string",
2491    "mcp.request.argument.uri": "string",
2492    "mcp.request.id": "string",
2493    "mcp.resource.protocol": "string",
2494    "mcp.resource.uri": "string",
2495    "mcp.server.name": "string",
2496    "mcp.server.title": "string",
2497    "mcp.server.version": "string",
2498    "mcp.session.id": "string",
2499    "mcp.tool.name": "string",
2500    "mcp.tool.result.content": "string",
2501    "mcp.tool.result.content_count": "integer",
2502    "mcp.tool.result.is_error": "boolean",
2503    "mcp.transport": "string",
2504    "mdc.<key>": "string",
2505    "messaging.batch.message_count": "integer",
2506    "messaging.destination": "string",
2507    "messaging.destination.connection": "string",
2508    "messaging.destination.name": "string",
2509    "messaging.message.body.size": "integer",
2510    "messaging.message.conversation_id": "string",
2511    "messaging.message.envelope.size": "integer",
2512    "messaging.message.id": "string",
2513    "messaging.message.receive.latency": "integer",
2514    "messaging.message.retry.count": "integer",
2515    "messaging.operation.name": "string",
2516    "messaging.operation.type": "string",
2517    "messaging.rabbitmq.destination.routing_key": "string",
2518    "messaging.system": "string",
2519    method: "string",
2520    "middleware.name": "string",
2521    "navigation.origin": "string",
2522    "navigation.route.id": "string",
2523    "navigation.type": "string",
2524    "nel.elapsed_time": "integer",
2525    "nel.phase": "string",
2526    "nel.referrer": "string",
2527    "nel.sampling_function": "double",
2528    "nel.type": "string",
2529    "network.connection.effective_type": "string",
2530    "network.connection.rtt": "integer",
2531    "network.connection.type": "string",
2532    "network.local.address": "string",
2533    "network.local.port": "integer",
2534    "network.peer.address": "string",
2535    "network.peer.port": "integer",
2536    "network.protocol.name": "string",
2537    "network.protocol.version": "string",
2538    "network.transport": "string",
2539    "network.type": "string",
2540    "net.host.ip": "string",
2541    "net.host.name": "string",
2542    "net.host.port": "integer",
2543    "net.peer.ip": "string",
2544    "net.peer.name": "string",
2545    "net.peer.port": "integer",
2546    "net.protocol.name": "string",
2547    "net.protocol.version": "string",
2548    "net.sock.family": "string",
2549    "net.sock.host.addr": "string",
2550    "net.sock.host.port": "integer",
2551    "net.sock.peer.addr": "string",
2552    "net.sock.peer.name": "string",
2553    "net.sock.peer.port": "integer",
2554    "net.transport": "string",
2555    "os.build": "string",
2556    "os.build_id": "string",
2557    "os.description": "string",
2558    "os.kernel_version": "string",
2559    "os.name": "string",
2560    "os.raw_description": "string",
2561    "os.rooted": "boolean",
2562    "os.theme": "string",
2563    "os.type": "string",
2564    "os.version": "string",
2565    "otel.kind": "string",
2566    "otel.scope.name": "string",
2567    "otel.scope.version": "string",
2568    "otel.status_code": "string",
2569    "otel.status_description": "string",
2570    "params.<key>": "string",
2571    "performance.activationStart": "double",
2572    "performance.timeOrigin": "double",
2573    previous_route: "string",
2574    "process.command_args": "string[]",
2575    "process.executable.name": "string",
2576    "process.pid": "integer",
2577    "process.runtime.description": "string",
2578    "process.runtime.engine.name": "string",
2579    "process.runtime.engine.version": "string",
2580    "process.runtime.name": "string",
2581    "process.runtime.version": "string",
2582    "query.<key>": "string",
2583    "react.version": "string",
2584    release: "string",
2585    "remix.action_form_data.<key>": "string",
2586    replay_id: "string",
2587    "resource.deployment.environment": "string",
2588    "resource.deployment.environment.name": "string",
2589    "resource.render_blocking_status": "string",
2590    route: "string",
2591    "rpc.grpc.status_code": "integer",
2592    "rpc.method": "string",
2593    "rpc.response.status_code": "string",
2594    "rpc.service": "string",
2595    "rpc.system": "string",
2596    "rpc.system.name": "string",
2597    "runtime.build": "string",
2598    "runtime.name": "string",
2599    "runtime.raw_description": "string",
2600    "runtime.version": "string",
2601    "score.<key>": "double",
2602    "score.ratio.<key>": "double",
2603    "score.total": "double",
2604    "score.weight.<key>": "double",
2605    "sentry.action": "string",
2606    "sentry.browser.name": "string",
2607    "sentry.browser.version": "string",
2608    "sentry.cancellation_reason": "string",
2609    "sentry.category": "string",
2610    "sentry.client_sample_rate": "double",
2611    "sentry.description": "string",
2612    "sentry.dist": "string",
2613    "sentry.domain": "string",
2614    "sentry.dsc.environment": "string",
2615    "sentry.dsc.project_id": "string",
2616    "sentry.dsc.public_key": "string",
2617    "sentry.dsc.release": "string",
2618    "sentry.dsc.sampled": "boolean",
2619    "sentry.dsc.sample_rate": "string",
2620    "sentry.dsc.trace_id": "string",
2621    "sentry.dsc.transaction": "string",
2622    "sentry.environment": "string",
2623    "sentry.exclusive_time": "double",
2624    "sentry.graphql.operation": "string",
2625    "sentry.group": "string",
2626    "sentry.http.prefetch": "boolean",
2627    "sentry.idle_span_finish_reason": "string",
2628    "sentry.is_remote": "boolean",
2629    "sentry.kind": "string",
2630    "sentry.main_thread": "boolean",
2631    "sentry.message.parameter.<key>": "string",
2632    "sentry.message.template": "string",
2633    "sentry.metric.source": "string",
2634    "sentry.mobile": "boolean",
2635    "sentry.module.<key>": "string",
2636    "sentry.nextjs.ssr.function.route": "string",
2637    "sentry.nextjs.ssr.function.type": "string",
2638    "sentry.normalized_db_query": "string",
2639    "sentry.normalized_db_query.hash": "string",
2640    "sentry.normalized_description": "string",
2641    "sentry.observed_timestamp_nanos": "string",
2642    "sentry.op": "string",
2643    "sentry.origin": "string",
2644    "sentry.platform": "string",
2645    "sentry.profiler_id": "string",
2646    "sentry.profile_id": "string",
2647    "sentry.release": "string",
2648    "sentry.replay_id": "string",
2649    "sentry.replay_is_buffering": "boolean",
2650    "sentry.report_event": "string",
2651    "sentry.sdk.integrations": "string[]",
2652    "sentry.sdk.name": "string",
2653    "sentry.sdk.version": "string",
2654    "sentry.segment.id": "string",
2655    "sentry.segment_id": "string",
2656    "sentry.segment.name": "string",
2657    "sentry.server_sample_rate": "double",
2658    "sentry.source": "string",
2659    "sentry.span.source": "string",
2660    "sentry.status": "string",
2661    "sentry.status_code": "integer",
2662    "sentry.status.message": "string",
2663    "sentry.sveltekit.navigation.from": "string",
2664    "sentry.sveltekit.navigation.to": "string",
2665    "sentry.sveltekit.navigation.type": "string",
2666    "sentry.thread.id": "integer",
2667    "sentry.timestamp.sequence": "integer",
2668    "sentry.trace_lifecycle": "string",
2669    "sentry.trace.parent_span_id": "string",
2670    "sentry.trace.status": "string",
2671    "sentry.transaction": "string",
2672    "sentry.user.email": "string",
2673    "sentry.user.geo.city": "string",
2674    "sentry.user.geo.country_code": "string",
2675    "sentry.user.geo.region": "string",
2676    "sentry.user.geo.subdivision": "string",
2677    "sentry.user.id": "string",
2678    "sentry.user.ip": "string",
2679    "sentry.user.username": "string",
2680    "server.address": "string",
2681    server_name: "string",
2682    "server.port": "integer",
2683    "service.name": "string",
2684    "service.version": "string",
2685    "session.id": "string",
2686    stall_percentage: "double",
2687    stall_total_time: "double",
2688    "state.type": "string",
2689    "thread.id": "integer",
2690    "thread.name": "string",
2691    "timber.tag": "string",
2692    time_to_full_display: "double",
2693    time_to_initial_display: "double",
2694    transaction: "string",
2695    "trpc.procedure_path": "string",
2696    "trpc.procedure_type": "string",
2697    ttfb: "double",
2698    "ttfb.requestTime": "double",
2699    type: "string",
2700    "ui.component_name": "string",
2701    "ui.contributes_to_ttfd": "boolean",
2702    "ui.contributes_to_ttid": "boolean",
2703    "ui.element.height": "integer",
2704    "ui.element.id": "string",
2705    "ui.element.identifier": "string",
2706    "ui.element.load_time": "double",
2707    "ui.element.paint_type": "string",
2708    "ui.element.render_time": "double",
2709    "ui.element.type": "string",
2710    "ui.element.url": "string",
2711    "ui.element.width": "integer",
2712    url: "string",
2713    "url.domain": "string",
2714    "url.fragment": "string",
2715    "url.full": "string",
2716    "url.path": "string",
2717    "url.path.parameter.<key>": "string",
2718    "url.port": "integer",
2719    "url.query": "string",
2720    "url.same_origin": "boolean",
2721    "url.scheme": "string",
2722    "url.template": "string",
2723    "user_agent.original": "string",
2724    "user.email": "string",
2725    "user.full_name": "string",
2726    "user.geo.city": "string",
2727    "user.geo.country_code": "string",
2728    "user.geo.region": "string",
2729    "user.geo.subdivision": "string",
2730    "user.hash": "string",
2731    "user.id": "string",
2732    "user.ip_address": "string",
2733    "user.name": "string",
2734    "user.roles": "string[]",
2735    "vercel.branch": "string",
2736    "vercel.build_id": "string",
2737    "vercel.deployment_id": "string",
2738    "vercel.destination": "string",
2739    "vercel.edge_type": "string",
2740    "vercel.entrypoint": "string",
2741    "vercel.execution_region": "string",
2742    "vercel.id": "string",
2743    "vercel.ja3_digest": "string",
2744    "vercel.ja4_digest": "string",
2745    "vercel.log_type": "string",
2746    "vercel.path": "string",
2747    "vercel.project_id": "string",
2748    "vercel.project_name": "string",
2749    "vercel.proxy.cache_id": "string",
2750    "vercel.proxy.client_ip": "string",
2751    "vercel.proxy.host": "string",
2752    "vercel.proxy.lambda_region": "string",
2753    "vercel.proxy.method": "string",
2754    "vercel.proxy.path": "string",
2755    "vercel.proxy.path_type": "string",
2756    "vercel.proxy.path_type_variant": "string",
2757    "vercel.proxy.referer": "string",
2758    "vercel.proxy.region": "string",
2759    "vercel.proxy.response_byte_size": "integer",
2760    "vercel.proxy.scheme": "string",
2761    "vercel.proxy.status_code": "integer",
2762    "vercel.proxy.timestamp": "integer",
2763    "vercel.proxy.user_agent": "string[]",
2764    "vercel.proxy.vercel_cache": "string",
2765    "vercel.proxy.vercel_id": "string",
2766    "vercel.proxy.waf_action": "string",
2767    "vercel.proxy.waf_rule_id": "string",
2768    "vercel.request_id": "string",
2769    "vercel.source": "string",
2770    "vercel.status_code": "integer"
2771}, Bb = {
2772    "ai.citations": {
2773        brief: "References or sources cited by the AI model in its response.",
2774        type: "string[]",
2775        applyScrubbing: {
2776            key: "auto"
2777        },
2778        isInOtel: !1,
2779        visibility: "public",
2780        example: [
2781            "Citation 1",
2782            "Citation 2"
2783        ],
2784        deprecation: {},
2785        changelog: [
2786            {
2787                version: "0.5.0",
2788                prs: [
2789                    264
2790                ]
2791            },
2792            {
2793                version: "0.1.0",
2794                prs: [
2795                    55
2796                ]
2797            }
2798        ]
2799    },
2800    "ai.completion_tokens.used": {
2801        brief: "The number of tokens used to respond to the message.",
2802        type: "integer",
2803        applyScrubbing: {
2804            key: "manual"
2805        },
2806        isInOtel: !1,
2807        visibility: "public",
2808        example: 10,
2809        deprecation: {
2810            replacement: "gen_ai.usage.output_tokens"
2811        },
2812        aliases: [
2813            "gen_ai.usage.output_tokens",
2814            "gen_ai.usage.completion_tokens"
2815        ],
2816        changelog: [
2817            {
2818                version: "0.4.0",
2819                prs: [
2820                    228
2821                ]
2822            },
2823            {
2824                version: "0.1.0",
2825                prs: [
2826                    57,
2827                    61
2828                ]
2829            },
2830            {
2831                version: "0.0.0"
2832            }
2833        ]
2834    },
2835    "ai.documents": {
2836        brief: "Documents or content chunks used as context for the AI model.",
2837        type: "string[]",
2838        applyScrubbing: {
2839            key: "auto"
2840        },
2841        isInOtel: !1,
2842        visibility: "public",
2843        example: [
2844            "document1.txt",
2845            "document2.pdf"
2846        ],
2847        deprecation: {},
2848        changelog: [
2849            {
2850                version: "0.5.0",
2851                prs: [
2852                    264
2853                ]
2854            },
2855            {
2856                version: "0.1.0",
2857                prs: [
2858                    55
2859                ]
2860            }
2861        ]
2862    },
2863    "ai.finish_reason": {
2864        brief: "The reason why the model stopped generating.",
2865        type: "string",
2866        applyScrubbing: {
2867            key: "manual"
2868        },
2869        isInOtel: !1,
2870        visibility: "public",
2871        example: "COMPLETE",
2872        deprecation: {
2873            replacement: "gen_ai.response.finish_reasons"
2874        },
2875        aliases: [
2876            "gen_ai.response.finish_reasons"
2877        ],
2878        changelog: [
2879            {
2880                version: "0.1.0",
2881                prs: [
2882                    55,
2883                    57,
2884                    61,
2885                    108,
2886                    127
2887                ]
2888            }
2889        ]
2890    },
2891    "ai.frequency_penalty": {
2892        brief: "Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is a
2892pplied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.",
2893        type: "double",
2894        applyScrubbing: {
2895            key: "manual"
2896        },
2897        isInOtel: !1,
2898        visibility: "public",
2899        example: .5,
2900        deprecation: {
2901            replacement: "gen_ai.request.frequency_penalty"
2902        },
2903        aliases: [
2904            "gen_ai.request.frequency_penalty"
2905        ],
2906        changelog: [
2907            {
2908                version: "0.4.0",
2909                prs: [
2910                    228
2911                ]
2912            },
2913            {
2914                version: "0.1.0",
2915                prs: [
2916                    55,
2917                    57,
2918                    61,
2919                    108
2920                ]
2921            }
2922        ]
2923    },
2924    "ai.function_call": {
2925        brief: "For an AI model call, the function that was called. This is deprecated for OpenAI, and replaced by tool_calls",
2926        type: "string",
2927        applyScrubbing: {
2928            key: "auto"
2929        },
2930        isInOtel: !1,
2931        visibility: "public",
2932        example: "function_name",
2933        deprecation: {
2934            replacement: "gen_ai.tool.name"
2935        },
2936        aliases: [
2937            "gen_ai.tool.name",
2938            "mcp.tool.name"
2939        ],
2940        changelog: [
2941            {
2942                version: "0.1.0",
2943                prs: [
2944                    55,
2945                    57,
2946                    61,
2947                    108
2948                ]
2949            }
2950        ]
2951    },
2952    "ai.generation_id": {
2953        brief: "Unique identifier for the completion.",
2954        type: "string",
2955        applyScrubbing: {
2956            key: "manual"
2957        },
2958        isInOtel: !1,
2959        visibility: "public",
2960        example: "gen_123abc",
2961        deprecation: {
2962            replacement: "gen_ai.response.id"
2963        },
2964        aliases: [
2965            "gen_ai.response.id"
2966        ],
2967        changelog: [
2968            {
2969                version: "0.1.0",
2970                prs: [
2971                    55,
2972                    57,
2973                    61,
2974                    108,
2975                    127
2976                ]
2977            }
2978        ]
2979    },
2980    "ai.input_messages": {
2981        brief: "The input messages sent to the model",
2982        type: "string",
2983        applyScrubbing: {
2984            key: "manual"
2985        },
2986        isInOtel: !1,
2987        visibility: "public",
2988        example: '[{"role": "user", "message": "hello"}]',
2989        deprecation: {
2990            replacement: "gen_ai.input.messages"
2991        },
2992        aliases: [
2993            "gen_ai.request.messages"
2994        ],
2995        changelog: [
2996            {
2997                version: "0.1.0",
2998                prs: [
2999                    65,
3000                    119
3001                ]
3002            },
3003            {
3004                version: "0.0.0"
3005            }
3006        ]
3007    },
3008    "ai.is_search_required": {
3009        brief: "Boolean indicating if the model needs to perform a search.",
3010        type: "boolean",
3011        applyScrubbing: {
3012            key: "manual"
3013        },
3014        isInOtel: !1,
3015        visibility: "public",
3016        example: !1,
3017        deprecation: {},
3018        changelog: [
3019            {
3020                version: "0.5.0",
3021                prs: [
3022                    264
3023                ]
3024            },
3025            {
3026                version: "0.1.0",
3027                prs: [
3028                    55
3029                ]
3030            }
3031        ]
3032    },
3033    "ai.metadata": {
3034        brief: "Extra metadata passed to an AI pipeline step.",
3035        type: "string",
3036        applyScrubbing: {
3037            key: "manual"
3038        },
3039        isInOtel: !1,
3040        visibility: "public",
3041        example: '{"user_id": 123, "session_id": "abc123"}',
3042        deprecation: {},
3043        changelog: [
3044            {
3045                version: "0.5.0",
3046                prs: [
3047                    264
3048                ]
3049            },
3050            {
3051                version: "0.1.0",
3052                prs: [
3053                    55,
3054                    127
3055                ]
3056            }
3057        ]
3058    },
3059    "ai.model_id": {
3060        brief: "The vendor-specific ID of the model used.",
3061        type: "string",
3062        applyScrubbing: {
3063            key: "manual"
3064        },
3065        isInOtel: !1,
3066        visibility: "public",
3067        example: "gpt-4",
3068        deprecation: {
3069            replacement: "gen_ai.response.model"
3070        },
3071        aliases: [
3072            "gen_ai.response.model"
3073        ],
3074        changelog: [
3075            {
3076                version: "0.1.0",
3077                prs: [
3078                    57,
3079                    61,
3080                    127
3081                ]
3082            },
3083            {
3084                version: "0.0.0"
3085            }
3086        ]
3087    },
3088    "ai.model.provider": {
3089        brief: "The provider of the model.",
3090        type: "string",
3091        applyScrubbing: {
3092            key: "manual"
3093        },
3094        isInOtel: !1,
3095        visibility: "public",
3096        example: "openai",
3097        deprecation: {
3098            replacement: "gen_ai.provider.name"
3099        },
3100        aliases: [
3101            "gen_ai.provider.name",
3102            "gen_ai.system"
3103        ],
3104        changelog: [
3105            {
3106                version: "0.4.0",
3107                prs: [
3108                    253
3109                ]
3110            },
3111            {
3112                version: "0.1.0",
3113                prs: [
3114                    57,
3115                    61,
3116                    108,
3117                    127
3118                ]
3119            }
3120        ]
3121    },
3122    "ai.pipeline.name": {
3123        brief: "The name of the AI pipeline.",
3124        type: "string",
3125        applyScrubbing: {
3126            key: "manual"
3127        },
3128        isInOtel: !1,
3129        visibility: "public",
3130        example: "Autofix Pipeline",
3131        deprecation: {
3132            replacement: "gen_ai.pipeline.name"
3133        },
3134        aliases: [
3135            "gen_ai.pipeline.name"
3136        ],
3137        changelog: [
3138            {
3139                version: "0.1.0",
3140                prs: [
3141                    53,
3142                    76,
3143                    108,
3144                    127
3145                ]
3146            }
3147        ]
3148    },
3149    "ai.preamble": {
3150        brief: "For an AI model call, the preamble parameter. Preambles are a part of the prompt used to adjust the model's overall behavior and conversation style.",
3151        type: "string",
3152        applyScrubbing: {
3153            key: "auto"
3154        },
3155        isInOtel: !1,
3156        visibility: "public",
3157        example: "You are now a clown.",
3158        deprecation: {
3159            replacement: "gen_ai.system_instructions"
3160        },
3161        aliases: [
3162            "gen_ai.system_instructions"
3163        ],
3164        changelog: [
3165            {
3166                version: "0.5.0",
3167                prs: [
3168                    264
3169                ]
3170            },
3171            {
3172                version: "0.1.0",
3173                prs: [
3174                    55
3175                ]
3176            }
3177        ]
3178    },
3179    "ai.presence_penalty": {
3180        brief: "Used to reduce repetitiveness of generated tokens. Similar to frequency_penalty, except that this penalty is applied equally to all tokens that have already appeared, regardless of their exact frequencies.",
3181        type: "double",
3182        applyScrubbing: {
3183            key: "manual"
3184        },
3185        isInOtel: !1,
3186        visibility: "public",
3187        example: .5,
3188        deprecation: {
3189            replacement: "gen_ai.request.presence_penalty"
3190        },
3191        aliases: [
3192            "gen_ai.request.presence_penalty"
3193        ],
3194        changelog: [
3195            {
3196                version: "0.4.0",
3197                prs: [
3198                    228
3199                ]
3200            },
3201            {
3202                version: "0.1.0",
3203                prs: [
3204                    55,
3205                    57,
3206                    61,
3207                    108
3208                ]
3209            }
3210        ]
3211    },
3212    "ai.prompt_tokens.used": {
3213        brief: "The number of tokens used to process just the prompt.",
3214        type: "integer",
3215        applyScrubbing: {
3216            key: "manual"
3217        },
3218        isInOtel: !1,
3219        visibility: "public",
3220        example: 20,
3221        deprecation: {
3222            replacement: "gen_ai.usage.input_tokens"
3223        },
3224        aliases: [
3225            "gen_ai.usage.prompt_tokens",
3226            "gen_ai.usage.input_tokens"
3227        ],
3228        changelog: [
3229            {
3230                version: "0.4.0",
3231                prs: [
3232                    228
3233                ]
3234            },
3235            {
3236                version: "0.1.0",
3237                prs: [
3238                    57,
3239                    61
3240                ]
3241            },
3242            {
3243                version: "0.0.0"
3244            }
3245        ]
3246    },
3247    "ai.raw_prompting": {
3248        brief: "When enabled, the user\u2019s prompt will be sent to the model without any pre-processing.",
3249        type: "boolean",
3250        applyScrubbing: {
3251            key: "manual"
3252        },
3253        isInOtel: !1,
3254        visibility: "public",
3255        example: !0,
3256        deprecation: {},
3257        changelog: [
3258            {
3259                version: "0.5.0",
3260                prs: [
3261                    264
3262                ]
3263            },
3264            {
3265                version: "0.1.0",
3266                prs: [
3267                    55
3268                ]
3269            }
3270        ]
3271    },
3272    "ai.responses": {
3273        brief: "The response messages sent back by the AI model.",
3274        type: "string[]",
3275        applyScrubbing: {
3276            key: "manual"
3277        },
3278        isInOtel: !1,
3279        visibility: "public",
3280        example: [
3281            "hello",
3282            "world"
3283        ],
3284        deprecation: {
3285            replacement: "gen_ai.output.messages"
3286        },
3287        changelog: [
3288            {
3289                version: "0.1.0",
3290                prs: [
3291                    65,
3292                    127
3293                ]
3294            },
3295            {
3296                version: "0.0.0"
3297            }
3298        ]
3299    },
3300    "ai.response_format": {
3301        brief: "For an AI model call, the format of the response",
3302        type: "string",
3303        applyScrubbing: {
3304            key: "manual"
3305        },
3306        isInOtel: !1,
3307        visibility: "public",
3308        example: "json_object",
3309        deprecation: {},
3310        changelog: [
3311            {
3312                version: "0.5.0",
3313                prs: [
3314                    264
3315                ]
3316            },
3317            {
3318                version: "0.1.0",
3319                prs: [
3320                    55,
3321                    127
3322                ]
3323            }
3324        ]
3325    },
3326    "ai.search_queries": {
3327        brief: "Queries used to search for relevant context or documents.",
3328        type: "string[]",
3329        applyScrubbing: {
3330            key: "auto"
3331        },
3332        isInOtel: !1,
3333        visibility: "public",
3334        example: [
3335            "climate change effects",
3336            "renewable energy"
3337        ],
3338        deprecation: {},
3339        changelog: [
3340            {
3341                version: "0.5.0",
3342                prs: [
3343                    264
3344                ]
3345            },
3346            {
3347                version: "0.1.0",
3348                prs: [
3349                    55
3350                ]
3351            }
3352        ]
3353    },
3354    "ai.search_results": {
3355        brief: "Results returned from search queries for context.",
3356        type: "string[]",
3357        applyScrubbing: {
3358            key: "auto"
3359        },
3360        isInOtel: !1,
3361        visibility: "public",
3362        example: [
3363            "search_result_1, search_result_2"
3364        ],
3365        deprecation: {},
3366        changelog: [
3367            {
3368                version: "0.5.0",
3369                prs: [
3370                    264
3371                ]
3372            },
3373            {
3374                version: "0.1.0",
3375                prs: [
3376                    55
3377                ]
3378            }
3379        ]
3380    },
3381    "ai.seed": {
3382        brief: "The seed, ideally models given the same seed and same other parameters will produce the exact same output.",
3383        type: "string",
3384        applyScrubbing: {
3385            key: "manual"
3386        },
3387        isInOtel: !1,
3388        visibility: "public",
3389        example: "1234567890",
3390        deprecation: {
3391            replacement: "gen_ai.request.seed"
3392        },
3393        aliases: [
3394            "gen_ai.request.seed"
3395        ],
3396        changelog: [
3397            {
3398                version: "0.1.0",
3399                prs: [
3400                    55,
3401                    57,
3402                    61,
3403                    108,
3404                    127
3405                ]
3406            }
3407        ]
3408    },
3409    "ai.streaming": {
3410        brief: "Whether the request was streamed back.",
3411        type: "boolean",
3412        applyScrubbing: {
3413            key: "manual"
3414        },
3415        isInOtel: !1,
3416        visibility: "public",
3417        example: !0,
3418        deprecation: {
3419            replacement: "gen_ai.response.streaming"
3420        },
3421        aliases: [
3422            "gen_ai.response.streaming"
3423        ],
3424        changelog: [
3425            {
3426                version: "0.1.0",
3427                prs: [
3428                    76,
3429                    108
3430                ]
3431            },
3432            {
3433                version: "0.0.0"
3434            }
3435        ]
3436    },
3437    "ai.tags": {
3438        brief: "Tags that describe an AI pipeline step.",
3439        type: "string",
3440        applyScrubbing: {
3441            key: "manual"
3442        },
3443        isInOtel: !1,
3444        visibility: "public",
3445        example: '{"executed_function": "add_integers"}',
3446        deprecation: {},
3447        changelog: [
3448            {
3449                version: "0.5.0",
3450                prs: [
3451                    264
3452                ]
3453            },
3454            {
3455                version: "0.1.0",
3456                prs: [
3457                    55,
3458                    127
3459                ]
3460            }
3461        ]
3462    },
3463    "ai.temperature": {
3464        brief: "For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.",
3465        type: "double",
3466        applyScrubbing: {
3467            key: "manual"
3468        },
3469        isInOtel: !1,
3470        visibility: "public",
3471        example: .1,
3472        deprecation: {
3473            replacement: "gen_ai.request.temperature"
3474        },
3475        aliases: [
3476            "gen_ai.request.temperature"
3477        ],
3478        changelog: [
3479            {
3480                version: "0.4.0",
3481                prs: [
3482                    228
3483                ]
3484            },
3485            {
3486                version: "0.1.0",
3487                prs: [
3488                    55,
3489                    57,
3490                    61,
3491                    108
3492                ]
3493            }
3494        ]
3495    },
3496    "ai.texts": {
3497        brief: "Raw text inputs provided to the model.",
3498        type: "string[]",
3499        applyScrubbing: {
3500            key: "auto"
3501        },
3502        isInOtel: !1,
3503        visibility: "public",
3504        example: [
3505            "Hello, how are you?",
3506            "What is the capital of France?"
3507        ],
3508        deprecation: {
3509            replacement: "gen_ai.input.messages"
3510        },
3511        aliases: [
3512            "gen_ai.input.messages"
3513        ],
3514        changelog: [
3515            {
3516                version: "0.5.0",
3517                prs: [
3518                    264
3519                ]
3520            },
3521            {
3522                version: "0.1.0",
3523                prs: [
3524                    55
3525                ]
3526            }
3527        ]
3528    },
3529    "ai.tools": {
3530        brief: "For an AI model call, the functions that are available",
3531        type: "string[]",
3532        applyScrubbing: {
3533            key: "manual"
3534        },
3535        isInOtel: !1,
3536        visibility: "public",
3537        example: [
3538            "function_1",
3539            "function_2"
3540        ],
3541        deprecation: {
3542            replacement: "gen_ai.tool.definitions"
3543        },
3544        changelog: [
3545            {
3546                version: "0.1.0",
3547                prs: [
3548                    55,
3549                    65,
3550                    127
3551                ]
3552            }
3553        ]
3554    },
3555    "ai.tool_calls": {
3556        brief: "For an AI model call, the tool calls that were made.",
3557        type: "string[]",
3558        applyScrubbing: {
3559            key: "auto"
3560        },
3561        isInOtel: !1,
3562        visibility: "public",
3563        example: [
3564            "tool_call_1",
3565            "tool_call_2"
3566        ],
3567        deprecation: {
3568            replacement: "gen_ai.output.messages"
3569        },
3570        changelog: [
3571            {
3572                version: "0.1.0",
3573                prs: [
3574                    55,
3575                    65
3576                ]
3577            }
3578        ]
3579    },
3580    "ai.top_k": {
3581        brief: "Limits the model to only consider the K most likely next tokens, where K is an integer (e.g., top_k=20 means only the 20 highest probability tokens are considered).",
3582        type: "integer",
3583        applyScrubbing: {
3584            key: "manual"
3585        },
3586        isInOtel: !1,
3587        visibility: "public",
3588        example: 35,
3589        deprecation: {
3590            replacement: "gen_ai.request.top_k"
3591        },
3592        aliases: [
3593            "gen_ai.request.top_k"
3594        ],
3595        changelog: [
3596            {
3597                version: "0.4.0",
3598                prs: [
3599                    228
3600                ]
3601            },
3602            {
3603                version: "0.1.0",
3604                prs: [
3605                    55,
3606                    57,
3607                    61,
3608                    108
3609                ]
3610            }
3611        ]
3612    },
3613    "ai.top_p": {
3614        brief: "Limits the model to only consider tokens whose cumulative probability mass adds up to p, where p is a float between 0 and 1 (e.g., top_p=0.7 means only tokens that sum up to 70% of the probability mass are considered).",
3615        type: "double",
3616        applyScrubbing: {
3617            key: "manual"
3618        },
3619        isInOtel: !1,
3620        visibility: "public",
3621        example: .7,
3622        deprecation: {
3623            replacement: "gen_ai.request.top_p"
3624        },
3625        aliases: [
3626            "gen_ai.request.top_p"
3627        ],
3628        changelog: [
3629            {
3630                version: "0.4.0",
3631                prs: [
3632                    228
3633                ]
3634            },
3635            {
3636                version: "0.1.0",
3637                prs: [
3638                    55,
3639                    57,
3640                    61,
3641                    108
3642                ]
3643            }
3644        ]
3645    },
3646    "ai.total_cost": {
3647        brief: "The total cost for the tokens used.",
3648        type: "double",
3649        applyScrubbing: {
3650            key: "manual"
3651        },
3652        isInOtel: !1,
3653        visibility: "public",
3654        example: 12.34,
3655        deprecation: {
3656            replacement: "gen_ai.cost.total_tokens"
3657        },
3658        aliases: [
3659            "gen_ai.cost.total_tokens"
3660        ],
3661        changelog: [
3662            {
3663                version: "0.5.0",
3664                prs: [
3665                    264
3666                ]
3667            },
3668            {
3669                version: "0.4.0",
3670                prs: [
3671                    228
3672                ]
3673            },
3674            {
3675                version: "0.1.0",
3676                prs: [
3677                    53
3678                ]
3679            }
3680        ]
3681    },
3682    "ai.total_tokens.used": {
3683        brief: "The total number of tokens used to process the prompt.",
3684        type: "integer",
3685        applyScrubbing: {
3686            key: "manual"
3687        },
3688        isInOtel: !1,
3689        visibility: "public",
3690        example: 30,
3691        deprecation: {
3692            replacement: "gen_ai.usage.total_tokens"
3693        },
3694        aliases: [
3695            "gen_ai.usage.total_tokens"
3696        ],
3697        changelog: [
3698            {
3699                version: "0.4.0",
3700                prs: [
3701                    228
3702                ]
3703            },
3704            {
3705                version: "0.1.0",
3706                prs: [
3707                    57,
3708                    61,
3709                    108
3710                ]
3711            },
3712            {
3713                version: "0.0.0"
3714            }
3715        ]
3716    },
3717    "ai.warnings": {
3718        brief: "Warning messages generated during model execution.",
3719        type: "string[]",
3720        applyScrubbing: {
3721            key: "auto"
3722        },
3723        isInOtel: !1,
3724        visibility: "public",
3725        example: [
3726            "Token limit exceeded"
3727        ],
3728        deprecation: {},
3729        changelog: [
3730            {
3731                version: "0.5.0",
3732                prs: [
3733                    264
3734                ]
3735            },
3736            {
3737                version: "0.1.0",
3738                prs: [
3739                    55
3740                ]
3741            }
3742        ]
3743    },
3744    "angular.version": {
3745        brief: "The version of the Angular framework",
3746        type: "string",
3747        applyScrubbing: {
3748            key: "manual"
3749        },
3750        isInOtel: !1,
3751        visibility: "public",
3752        example: "17.1.0",
3753        changelog: [
3754            {
3755                version: "0.7.0",
3756                prs: [
3757                    367
3758                ],
3759                description: "Added angular.version attribute"
3760            }
3761        ]
3762    },
3763    "app.app_build": {
3764        brief: "Internal build identifier, as it appears on the platform.",
3765        type: "string",
3766        applyScrubbing: {
3767            key: "manual"
3768        },
3769        isInOtel: !1,
3770        visibility: "public",
3771        example: "1",
3772        deprecation: {
3773            replacement: "app.build",
3774            reason: "Deprecated in favor of app.build"
3775        },
3776        aliases: [
3777            "app.build"
3778        ],
3779        changelog: [
3780            {
3781                version: "0.5.0",
3782                prs: [
3783                    296
3784                ],
3785                description: "Added and deprecated app.app_build in favor of app.build"
3786            }
3787        ]
3788    },
3789    "app.app_identifier": {
3790        brief: "Version-independent application identifier, often a dotted bundle ID.",
3791        type: "string",
3792        applyScrubbing: {
3793            key: "manual"
3794        },
3795        isInOtel: !1,
3796        visibility: "public",
3797        example: "com.example.myapp",
3798        deprecation: {
3799            replacement: "app.identifier",
3800            reason: "Deprecated in favor of app.identifier"
3801        },
3802        aliases: [
3803            "app.identifier"
3804        ],
3805        changelog: [
3806            {
3807                version: "0.5.0",
3808                prs: [
3809                    296
3810                ],
3811                description: "Added and deprecated app.app_identifier in favor of app.identifier"
3812            }
3813        ]
3814    },
3815    "app.app_name": {
3816        brief: "Human readable application name, as it appears on the platform.",
3817        type: "string",
3818        applyScrubbing: {
3819            key: "manual"
3820        },
3821        isInOtel: !1,
3822        visibility: "public",
3823        example: "My App",
3824        deprecation: {
3825            replacement: "app.name",
3826            reason: "Deprecated in favor of app.name"
3827        },
3828        aliases: [
3829            "app.name"
3830        ],
3831        changelog: [
3832            {
3833                version: "0.5.0",
3834                prs: [
3835                    296
3836                ],
3837                description: "Added and deprecated app.app_name in favor of app.name"
3838            }
3839        ]
3840    },
3841    "app.app_start_time": {
3842        brief: "Formatted UTC timestamp when the user started the application.",
3843        type: "string",
3844        applyScrubbing: {
3845            key: "manual"
3846        },
3847        isInOtel: !1,
3848        visibility: "public",
3849        example: "2025-01-01T00:00:00.000Z",
3850        deprecation: {
3851            replacement: "app.start_time",
3852            reason: "Deprecated in favor of app.start_time"
3853        },
3854        aliases: [
3855            "app.start_time"
3856        ],
3857        changelog: [
3858            {
3859                version: "0.5.0",
3860                prs: [
3861                    296
3862                ],
3863                description: "Added and deprecated app.app_start_time in favor of app.start_time"
3864            }
3865        ]
3866    },
3867    "app.app_version": {
3868        brief: "Human readable application version, as it appears on the platform.",
3869        type: "string",
3870        applyScrubbing: {
3871            key: "manual"
3872        },
3873        isInOtel: !1,
3874        visibility: "public",
3875        example: "1.0.0",
3876        deprecation: {
3877            replacement: "app.version",
3878            reason: "Deprecated in favor of app.version"
3879        },
3880        aliases: [
3881            "app.version"
3882        ],
3883        changelog: [
3884            {
3885                version: "0.5.0",
3886                prs: [
3887                    296
3888                ],
3889                description: "Added and deprecated app.app_version in favor of app.version"
3890            }
3891        ]
3892    },
3893    "app.build": {
3894        brief: "Internal build identifier, as it appears on the platform.",
3895        type: "string",
3896        applyScrubbing: {
3897            key: "manual"
3898        },
3899        isInOtel: !1,
3900        visibility: "public",
3901        example: "1",
3902        aliases: [
3903            "app.app_build"
3904        ],
3905        changelog: [
3906            {
3907                version: "0.5.0",
3908                prs: [
3909                    296
3910                ],
3911                description: "Added app.build attribute"
3912            }
3913        ]
3914    },
3915    "app.identifier": {
3916        brief: "Version-independent application identifier, often a dotted bundle ID.",
3917        type: "string",
3918        applyScrubbing: {
3919            key: "manual"
3920        },
3921        isInOtel: !1,
3922        visibility: "public",
3923        example: "com.example.myapp",
3924        aliases: [
3925            "app.app_identifier"
3926        ],
3927        changelog: [
3928            {
3929                version: "0.5.0",
3930                prs: [
3931                    296
3932                ],
3933                description: "Added app.identifier attribute"
3934            }
3935        ]
3936    },
3937    "app.in_foreground": {
3938        brief: "Whether the application is currently in the foreground.",
3939        type: "boolean",
3940        applyScrubbing: {
3941            key: "manual"
3942        },
3943        isInOtel: !1,
3944        visibility: "public",
3945        example: !0,
3946        changelog: [
3947            {
3948                version: "0.5.0",
3949                prs: [
3950                    296
3951                ],
3952                description: "Added app.in_foreground attribute"
3953            }
3954        ]
3955    },
3956    "app.name": {
3957        brief: "Human readable application name, as it appears on the platform.",
3958        type: "string",
3959        applyScrubbing: {
3960            key: "manual"
3961        },
3962        isInOtel: !1,
3963        visibility: "public",
3964        example: "My App",
3965        aliases: [
3966            "app.app_name"
3967        ],
3968        changelog: [
3969            {
3970                version: "0.5.0",
3971                prs: [
3972                    296
3973                ],
3974                description: "Added app.name attribute"
3975            }
3976        ]
3977    },
3978    app_start_cold: {
3979        brief: "The duration of a cold app start in milliseconds",
3980        type: "double",
3981        applyScrubbing: {
3982            key: "manual"
3983        },
3984        isInOtel: !1,
3985        visibility: "public",
3986        example: 1234.56,
3987        deprecation: {
3988            replacement: "app.vitals.start.cold.value",
3989            reason: "Replaced by app.vitals.start.cold.value to align with the app.vitals.* namespace for mobile performance attributes"
3990        },
3991        aliases: [
3992            "app.vitals.start.cold.value"
3993        ],
3994        changelog: [
3995            {
3996                version: "0.5.0",
3997                prs: [
3998                    323
3999                ],
4000                description: "Added and deprecated in favor of app.vitals.start.cold.value"
4001            }
4002        ]
4003    },
4004    "app.start_time": {
4005        brief: "Formatted UTC timestamp when the user started the application.",
4006        type: "string",
4007        applyScrubbing: {
4008            key: "manual"
4009        },
4010        isInOtel: !1,
4011        visibility: "public",
4012        example: "2025-01-01T00:00:00.000Z",
4013        aliases: [
4014            "app.app_start_time"
4015        ],
4016        changelog: [
4017            {
4018                version: "0.5.0",
4019                prs: [
4020                    296
4021                ],
4022                description: "Added app.start_time attribute"
4023            }
4024        ]
4025    },
4026    app_start_type: {
4027        brief: "Mobile app start variant. Either cold or warm.",
4028        type: "string",
4029        applyScrubbing: {
4030            key: "manual"
4031        },
4032        isInOtel: !1,
4033        visibility: "public",
4034        example: "cold",
4035        deprecation: {
4036            replacement: "app.vitals.start.type",
4037            reason: "Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes"
4038        },
4039        aliases: [
4040            "app.vitals.start.type"
4041        ],
4042        changelog: [
4043            {
4044                version: "0.5.0",
4045                prs: [
4046                    313
4047                ],
4048                description: "Deprecated in favor of app.vitals.start.type"
4049            },
4050            {
4051                version: "0.1.0",
4052                prs: [
4053                    127
4054                ]
4055            },
4056            {
4057                version: "0.0.0"
4058            }
4059        ]
4060    },
4061    app_start_warm: {
4062        brief: "The duration of a warm app start in milliseconds",
4063        type: "double",
4064        applyScrubbing: {
4065            key: "manual"
4066        },
4067        isInOtel: !1,
4068        visibility: "public",
4069        example: 1234.56,
4070        deprecation: {
4071            replacement: "app.vitals.start.warm.value",
4072            reason: "Replaced by app.vitals.start.warm.value to align with the app.vitals.* namespace for mobile performance attributes"
4073        },
4074        aliases: [
4075            "app.vitals.start.warm.value"
4076        ],
4077        changelog: [
4078            {
4079                version: "0.5.0",
4080                prs: [
4081                    323
4082                ],
4083                description: "Added and deprecated in favor of app.vitals.start.warm.value"
4084            }
4085        ]
4086    },
4087    "app.version": {
4088        brief: "Human readable application version, as it appears on the platform.",
4089        type: "string",
4090        applyScrubbing: {
4091            key: "manual"
4092        },
4093        isInOtel: !1,
4094        visibility: "public",
4095        example: "1.0.0",
4096        aliases: [
4097            "app.app_version"
4098        ],
4099        changelog: [
4100            {
4101                version: "0.5.0",
4102                prs: [
4103                    296
4104                ],
4105                description: "Added app.version attribute"
4106            }
4107        ]
4108    },
4109    "app.vitals.frames.delay.value": {
4110        brief: "The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).",
4111        type: "integer",
4112        applyScrubbing: {
4113            key: "manual"
4114        },
4115        isInOtel: !1,
4116        visibility: "public",
4117        example: 5,
4118        aliases: [
4119            "frames.delay"
4120        ],
4121        changelog: [
4122            {
4123                version: "0.5.0",
4124                prs: [
4125                    313
4126                ],
4127                description: "Added app.vitals.frames.delay.value to replace frames.delay"
4128            }
4129        ]
4130    },
4131    "app.vitals.frames.frozen.count": {
4132        brief: "The number of frozen frames rendered during the lifetime of the span.",
4133        type: "integer",
4134        applyScrubbing: {
4135            key: "manual"
4136        },
4137        isInOtel: !1,
4138        visibility: "public",
4139        example: 3,
4140        aliases: [
4141            "frames.frozen"
4142        ],
4143        changelog: [
4144            {
4145                version: "0.5.0",
4146                prs: [
4147                    313
4148                ],
4149                description: "Added app.vitals.frames.frozen.count to replace frames.frozen"
4150            }
4151        ]
4152    },
4153    "app.vitals.frames.slow.count": {
4154        brief: "The number of slow frames rendered during the lifetime of the span.",
4155        type: "integer",
4156        applyScrubbing: {
4157            key: "manual"
4158        },
4159        isInOtel: !1,
4160        visibility: "public",
4161        example: 1,
4162        aliases: [
4163            "frames.slow"
4164        ],
4165        changelog: [
4166            {
4167                version: "0.5.0",
4168                prs: [
4169                    313
4170                ],
4171                description: "Added app.vitals.frames.slow.count to replace frames.slow"
4172            }
4173        ]
4174    },
4175    "app.vitals.frames.total.count": {
4176        brief: "The number of total frames rendered during the lifetime of the span.",
4177        type: "integer",
4178        applyScrubbing: {
4179            key: "manual"
4180        },
4181        isInOtel: !1,
4182        visibility: "public",
4183        example: 60,
4184        aliases: [
4185            "frames.total"
4186        ],
4187        changelog: [
4188            {
4189                version: "0.5.0",
4190                prs: [
4191                    313
4192                ],
4193                description: "Added app.vitals.frames.total.count to replace frames.total"
4194            }
4195        ]
4196    },
4197    "app.vitals.start.cold.value": {
4198        brief: "The duration of a cold app start in milliseconds",
4199        type: "double",
4200        applyScrubbing: {
4201            key: "manual"
4202        },
4203        isInOtel: !1,
4204        visibility: "public",
4205        example: 1234.56,
4206        aliases: [
4207            "app_start_cold"
4208        ],
4209        changelog: [
4210            {
4211                version: "0.5.0",
4212                prs: [
4213                    313
4214                ],
4215                description: "Added app.vitals.start.cold.value attribute"
4216            }
4217        ]
4218    },
4219    "app.vitals.start.prewarmed": {
4220        brief: "Whether the app start was prewarmed.",
4221        type: "boolean",
4222        applyScrubbing: {
4223            key: "manual"
4224        },
4225        isInOtel: !1,
4226        visibility: "public",
4227        example: !0,
4228        changelog: [
4229            {
4230                version: "0.11.0",
4231                prs: [
4232                    379
4233                ],
4234                description: "Added app.vitals.start.prewarmed attribute"
4235            }
4236        ]
4237    },
4238    "app.vitals.start.reason": {
4239        brief: "The reason that triggered the app start.",
4240        type: "string",
4241        applyScrubbing: {
4242            key: "manual"
4243        },
4244        isInOtel: !1,
4245        visibility: "public",
4246        example: "push",
4247        changelog: [
4248            {
4249                version: "0.7.0",
4250                prs: [
4251                    353
4252                ],
4253                description: "Added app.vitals.start.reason attribute"
4254            }
4255        ]
4256    },
4257    "app.vitals.start.screen": {
4258        brief: "The screen that is rendered when the app start is complete. This is the screen the user first sees and can interact with after launch. The absence of this attribute on the app start span indicates a background app start where no UI was rendered.",
4259        type: "string",
4260        applyScrubbing: {
4261            key: "manual"
4262        },
4263        isInOtel: !1,
4264        visibility: "public",
4265        example: "MainActivity",
4266        changelog: [
4267            {
4268                version: "0.7.0",
4269                prs: [
4270                    353
4271                ],
4272                description: "Added app.vitals.start.screen attribute"
4273            }
4274        ]
4275    },
4276    "app.vitals.start.type": {
4277        brief: "The type of app start, for example `cold` or `warm`",
4278        type: "string",
4279        applyScrubbing: {
4280            key: "manual"
4281        },
4282        isInOtel: !1,
4283        visibility: "public",
4284        example: "cold",
4285        aliases: [
4286            "app_start_type"
4287        ],
4288        changelog: [
4289            {
4290                version: "0.5.0",
4291                prs: [
4292                    313
4293                ],
4294                description: "Added app.vitals.start.type attribute"
4295            }
4296        ]
4297    },
4298    "app.vitals.start.warm.value": {
4299        brief: "The duration of a warm app start in milliseconds",
4300        type: "double",
4301        applyScrubbing: {
4302            key: "manual"
4303        },
4304        isInOtel: !1,
4305        visibility: "public",
4306        example: 1234.56,
4307        aliases: [
4308            "app_start_warm"
4309        ],
4310        changelog: [
4311            {
4312                version: "0.5.0",
4313                prs: [
4314                    313
4315                ],
4316                description: "Added app.vitals.start.warm.value attribute"
4317            }
4318        ]
4319    },
4320    "app.vitals.ttfd.value": {
4321        brief: "The duration of time to full display in milliseconds",
4322        type: "double",
4323        applyScrubbing: {
4324            key: "manual"
4325        },
4326        isInOtel: !1,
4327        visibility: "public",
4328        example: 1234.56,
4329        aliases: [
4330            "time_to_full_display"
4331        ],
4332        changelog: [
4333            {
4334                version: "0.5.0",
4335                prs: [
4336                    313
4337                ],
4338                description: "Added app.vitals.ttfd.value attribute"
4339            }
4340        ]
4341    },
4342    "app.vitals.ttid.value": {
4343        brief: "The duration of time to initial display in milliseconds",
4344        type: "double",
4345        applyScrubbing: {
4346            key: "manual"
4347        },
4348        isInOtel: !1,
4349        visibility: "public",
4350        example: 1234.56,
4351        aliases: [
4352            "time_to_initial_display"
4353        ],
4354        changelog: [
4355            {
4356                version: "0.5.0",
4357                prs: [
4358                    313
4359                ],
4360                description: "Added app.vitals.ttid.value attribute"
4361            }
4362        ]
4363    },
4364    "art.gc.blocking_count": {
4365        brief: "Total number of blocking (stop-the-world) garbage collections performed by the Android Runtime",
4366        type: "integer",
4367        applyScrubbing: {
4368            key: "manual"
4369        },
4370        isInOtel: !1,
4371        visibility: "public",
4372        example: 1,
4373        changelog: [
4374            {
4375                version: "0.11.0",
4376                prs: [
4377                    382
4378                ],
4379                description: "Added art.gc.blocking_count attribute"
4380            }
4381        ]
4382    },
4383    "art.gc.blocking_time": {
4384        brief: "Total time spent in blocking (stop-the-world) garbage collections by the Android Runtime, in milliseconds",
4385        type: "double",
4386        applyScrubbing: {
4387            key: "manual"
4388        },
4389        isInOtel: !1,
4390        visibility: "public",
4391        example: 11.873,
4392        changelog: [
4393            {
4394                version: "0.11.0",
4395                prs: [
4396                    382
4397                ],
4398                description: "Added art.gc.blocking_time attribute"
4399            }
4400        ]
4401    },
4402    "art.gc.pre_oome_count": {
4403        brief: "Total number of garbage collections triggered as a last resort before an OutOfMemoryError by the Android Runtime",
4404        type: "integer",
4405        applyScrubbing: {
4406            key: "manual"
4407        },
4408        isInOtel: !1,
4409        visibility: "public",
4410        example: 0,
4411        changelog: [
4412            {
4413                version: "0.11.0",
4414                prs: [
4415                    382
4416                ],
4417                description: "Added art.gc.pre_oome_count attribute"
4418            }
4419        ]
4420    },
4421    "art.gc.total_count": {
4422        brief: "Total number of garbage collections performed by the Android Runtime",
4423        type: "integer",
4424        applyScrubbing: {
4425            key: "manual"
4426        },
4427        isInOtel: !1,
4428        visibility: "public",
4429        example: 1,
4430        changelog: [
4431            {
4432                version: "0.11.0",
4433                prs: [
4434                    382
4435                ],
4436                description: "Added art.gc.total_count attribute"
4437            }
4438        ]
4439    },
4440    "art.gc.total_time": {
4441        brief: "Total time spent in garbage collection by the Android Runtime, in milliseconds",
4442        type: "double",
4443        applyScrubbing: {
4444            key: "manual"
4445        },
4446        isInOtel: !1,
4447        visibility: "public",
4448        example: 11.807,
4449        changelog: [
4450            {
4451                version: "0.11.0",
4452                prs: [
4453                    382
4454                ],
4455                description: "Added art.gc.total_time attribute"
4456            }
4457        ]
4458    },
4459    "art.gc.waiting_time": {
4460        brief: "Total time threads spent waiting for garbage collection to complete in the Android Runtime, in milliseconds",
4461        type: "double",
4462        applyScrubbing: {
4463            key: "manual"
4464        },
4465        isInOtel: !1,
4466        visibility: "public",
4467        example: 8.054,
4468        changelog: [
4469            {
4470                version: "0.11.0",
4471                prs: [
4472                    382
4473                ],
4474                description: "Added art.gc.waiting_time attribute"
4475            }
4476        ]
4477    },
4478    "art.memory.free": {
4479        brief: "Free memory available to the process as reported by the Android Runtime, in bytes",
4480        type: "integer",
4481        applyScrubbing: {
4482            key: "manual"
4483        },
4484        isInOtel: !1,
4485        visibility: "public",
4486        example: 3181568,
4487        changelog: [
4488            {
4489                version: "0.11.0",
4490                prs: [
4491                    382
4492                ],
4493                description: "Added art.memory.free attribute"
4494            }
4495        ]
4496    },
4497    "art.memory.free_until_gc": {
4498        brief: "Free memory available before a garbage collection would be triggered by the Android Runtime, in bytes",
4499        type: "integer",
4500        applyScrubbing: {
4501            key: "manual"
4502        },
4503        isInOtel: !1,
4504        visibility: "public",
4505        example: 3181568,
4506        changelog: [
4507            {
4508                version: "0.11.0",
4509                prs: [
4510                    382
4511                ],
4512                description: "Added art.memory.free_until_gc attribute"
4513            }
4514        ]
4515    },
4516    "art.memory.free_until_oome": {
4517        brief: "Free memory available before an OutOfMemoryError would be thrown by the Android Runtime, in bytes",
4518        type: "integer",
4519        applyScrubbing: {
4520            key: "manual"
4521        },
4522        isInOtel: !1,
4523        visibility: "public",
4524        example: 196083712,
4525        changelog: [
4526            {
4527                version: "0.11.0",
4528                prs: [
4529                    382
4530                ],
4531                description: "Added art.memory.free_until_oome attribute"
4532            }
4533        ]
4534    },
4535    "art.memory.max": {
4536        brief: "Maximum memory the process is allowed to use as reported by the Android Runtime, in bytes",
4537        type: "integer",
4538        applyScrubbing: {
4539            key: "manual"
4540        },
4541        isInOtel: !1,
4542        visibility: "public",
4543        example: 201326592,
4544        changelog: [
4545            {
4546                version: "0.11.0",
4547                prs: [
4548                    382
4549                ],
4550                description: "Added art.memory.max attribute"
4551            }
4552        ]
4553    },
4554    "art.memory.total": {
4555        brief: "Total memory currently allocated to the process by the Android Runtime, in bytes",
4556        type: "integer",
4557        applyScrubbing: {
4558            key: "manual"
4559        },
4560        isInOtel: !1,
4561        visibility: "public",
4562        example: 7774208,
4563        changelog: [
4564            {
4565                version: "0.11.0",
4566                prs: [
4567                    382
4568                ],
4569                description: "Added art.memory.total attribute"
4570            }
4571        ]
4572    },
4573    "aws.cloudwatch.logs.log_group": {
4574        brief: "The name of the CloudWatch Logs log group",
4575        type: "string",
4576        applyScrubbing: {
4577            key: 
4577"manual"
4578        },
4579        isInOtel: !1,
4580        visibility: "public",
4581        example: "/aws/lambda/my-function",
4582        changelog: [
4583            {
4584                version: "0.7.0",
4585                prs: [
4586                    369
4587                ],
4588                description: "Added aws.cloudwatch.logs.log_group attribute"
4589            }
4590        ]
4591    },
4592    "aws.cloudwatch.logs.log_stream": {
4593        brief: "The name of the CloudWatch Logs log stream",
4594        type: "string",
4595        applyScrubbing: {
4596            key: "manual"
4597        },
4598        isInOtel: !1,
4599        visibility: "public",
4600        example: "2024/01/01/[$LATEST]abcdef1234567890",
4601        changelog: [
4602            {
4603                version: "0.7.0",
4604                prs: [
4605                    369
4606                ],
4607                description: "Added aws.cloudwatch.logs.log_stream attribute"
4608            }
4609        ]
4610    },
4611    "aws.cloudwatch.logs.url": {
4612        brief: "The URL to the CloudWatch Logs log group",
4613        type: "string",
4614        applyScrubbing: {
4615            key: "manual"
4616        },
4617        isInOtel: !1,
4618        visibility: "public",
4619        example: "https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/my-log-group",
4620        changelog: [
4621            {
4622                version: "0.7.0",
4623                prs: [
4624                    369
4625                ],
4626                description: "Added aws.cloudwatch.logs.url attribute"
4627            }
4628        ]
4629    },
4630    "aws.dynamodb.attribute_definitions": {
4631        brief: "The JSON-serialized value of each item in the `AttributeDefinitions` request field.",
4632        type: "string[]",
4633        applyScrubbing: {
4634            key: "manual"
4635        },
4636        isInOtel: !0,
4637        visibility: "public",
4638        example: [
4639            '{ "AttributeName": "string", "AttributeType": "string" }'
4640        ],
4641        changelog: [
4642            {
4643                version: "0.16.0",
4644                prs: [
4645                    479
4646                ],
4647                description: "Added aws.dynamodb.attribute_definitions attribute"
4648            }
4649        ]
4650    },
4651    "aws.dynamodb.consistent_read": {
4652        brief: "The value of the `ConsistentRead` request parameter.",
4653        type: "boolean",
4654        applyScrubbing: {
4655            key: "manual"
4656        },
4657        isInOtel: !0,
4658        visibility: "public",
4659        example: !0,
4660        changelog: [
4661            {
4662                version: "0.16.0",
4663                prs: [
4664                    479
4665                ],
4666                description: "Added aws.dynamodb.consistent_read attribute"
4667            }
4668        ]
4669    },
4670    "aws.dynamodb.consumed_capacity": {
4671        brief: "The JSON-serialized value of each item in the `ConsumedCapacity` response field.",
4672        type: "string[]",
4673        applyScrubbing: {
4674            key: "manual"
4675        },
4676        isInOtel: !0,
4677        visibility: "public",
4678        example: [
4679            '{ "CapacityUnits": number, "GlobalSecondaryIndexes": { "string" : { "CapacityUnits": number, "ReadCapacityUnits": number, "WriteCapacityUnits": number } }, "LocalSecondaryIndexes": { "string" : { "CapacityUnits": number, "ReadCapacityUnits": number, "WriteCapacityUnits": number } }, "ReadCapacityUnits": number, "Table": { "CapacityUnits": number, "ReadCapacityUnits": number, "WriteCapacityUnits": number }, "TableName": "string", "WriteCapacityUnits": number }'
4680        ],
4681        changelog: [
4682            {
4683                version: "0.16.0",
4684                prs: [
4685                    479
4686                ],
4687                description: "Added aws.dynamodb.consumed_capacity attribute"
4688            }
4689        ]
4690    },
4691    "aws.dynamodb.count": {
4692        brief: "The value of the `Count` response parameter.",
4693        type: "integer",
4694        applyScrubbing: {
4695            key: "manual"
4696        },
4697        isInOtel: !0,
4698        visibility: "public",
4699        example: 10,
4700        changelog: [
4701            {
4702                version: "0.16.0",
4703                prs: [
4704                    479
4705                ],
4706                description: "Added aws.dynamodb.count attribute"
4707            }
4708        ]
4709    },
4710    "aws.dynamodb.exclusive_start_table": {
4711        brief: "The value of the `ExclusiveStartTableName` request parameter.",
4712        type: "string",
4713        applyScrubbing: {
4714            key: "manual"
4715        },
4716        isInOtel: !0,
4717        visibility: "public",
4718        example: "Users",
4719        changelog: [
4720            {
4721                version: "0.16.0",
4722                prs: [
4723                    479
4724                ],
4725                description: "Added aws.dynamodb.exclusive_start_table attribute"
4726            }
4727        ]
4728    },
4729    "aws.dynamodb.global_secondary_indexes": {
4730        brief: "The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field.",
4731        type: "string[]",
4732        applyScrubbing: {
4733            key: "manual"
4734        },
4735        isInOtel: !0,
4736        visibility: "public",
4737        example: [
4738            '{ "IndexName": "string", "KeySchema": [ { "AttributeName": "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits": number } }'
4739        ],
4740        changelog: [
4741            {
4742                version: "0.16.0",
4743                prs: [
4744                    479
4745                ],
4746                description: "Added aws.dynamodb.global_secondary_indexes attribute"
4747            }
4748        ]
4749    },
4750    "aws.dynamodb.global_secondary_index_updates": {
4751        brief: "The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field.",
4752        type: "string[]",
4753        applyScrubbing: {
4754            key: "manual"
4755        },
4756        isInOtel: !0,
4757        visibility: "public",
4758        example: [
4759            '{ "Create": { "IndexName": "string", "KeySchema": [ { "AttributeName": "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { "ReadCapacityUnits": number, "WriteCapacityUnits": number } }'
4760        ],
4761        changelog: [
4762            {
4763                version: "0.16.0",
4764                prs: [
4765                    479
4766                ],
4767                description: "Added aws.dynamodb.global_secondary_index_updates attribute"
4768            }
4769        ]
4770    },
4771    "aws.dynamodb.index_name": {
4772        brief: "The value of the `IndexName` request parameter.",
4773        type: "string",
4774        applyScrubbing: {
4775            key: "manual"
4776        },
4777        isInOtel: !0,
4778        visibility: "public",
4779        example: "name_to_group",
4780        changelog: [
4781            {
4782                version: "0.16.0",
4783                prs: [
4784                    479
4785                ],
4786                description: "Added aws.dynamodb.index_name attribute"
4787            }
4788        ]
4789    },
4790    "aws.dynamodb.item_collection_metrics": {
4791        brief: "The JSON-serialized value of the `ItemCollectionMetrics` response field.",
4792        type: "string",
4793        applyScrubbing: {
4794            key: "manual"
4795        },
4796        isInOtel: !0,
4797        visibility: "public",
4798        example: '{ "string" : [ { "ItemCollectionKey": { "string" : { "B": blob, "BOOL": boolean, "BS": [ blob ], "L": [ "AttributeValue" ], "M": { "string" : "AttributeValue" }, "N": "string", "NS": [ "string" ], "NULL": boolean, "S": "string", "SS": [ "string" ] } }, "SizeEstimateRangeGB": [ number ] } ] }',
4799        changelog: [
4800            {
4801                version: "0.16.0",
4802                prs: [
4803                    479
4804                ],
4805                description: "Added aws.dynamodb.item_collection_metrics attribute"
4806            }
4807        ]
4808    },
4809    "aws.dynamodb.limit": {
4810        brief: "The value of the `Limit` request parameter.",
4811        type: "integer",
4812        applyScrubbing: {
4813            key: "manual"
4814        },
4815        isInOtel: !0,
4816        visibility: "public",
4817        example: 10,
4818        changelog: [
4819            {
4820                version: "0.16.0",
4821                prs: [
4822                    479
4823                ],
4824                description: "Added aws.dynamodb.limit attribute"
4825            }
4826        ]
4827    },
4828    "aws.dynamodb.local_secondary_indexes": {
4829        brief: "The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.",
4830        type: "string[]",
4831        applyScrubbing: {
4832            key: "manual"
4833        },
4834        isInOtel: !0,
4835        visibility: "public",
4836        example: [
4837            '{ "IndexArn": "string", "IndexName": "string", "IndexSizeBytes": number, "ItemCount": number, "KeySchema": [ { "AttributeName": "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ "string" ], "ProjectionType": "string" } }'
4838        ],
4839        changelog: [
4840            {
4841                version: "0.16.0",
4842                prs: [
4843                    479
4844                ],
4845                description: "Added aws.dynamodb.local_secondary_indexes attribute"
4846            }
4847        ]
4848    },
4849    "aws.dynamodb.projection": {
4850        brief: "The value of the `ProjectionExpression` request parameter.",
4851        type: "string",
4852        applyScrubbing: {
4853            key: "manual"
4854        },
4855        isInOtel: !0,
4856        visibility: "public",
4857        example: "Title, Price, Color",
4858        changelog: [
4859            {
4860                version: "0.16.0",
4861                prs: [
4862                    479
4863                ],
4864                description: "Added aws.dynamodb.projection attribute"
4865            }
4866        ]
4867    },
4868    "aws.dynamodb.provisioned_read_capacity": {
4869        brief: "The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.",
4870        type: "double",
4871        applyScrubbing: {
4872            key: "manual"
4873        },
4874        isInOtel: !0,
4875        visibility: "public",
4876        example: 1,
4877        changelog: [
4878            {
4879                version: "0.16.0",
4880                prs: [
4881                    479
4882                ],
4883                description: "Added aws.dynamodb.provisioned_read_capacity attribute"
4884            }
4885        ]
4886    },
4887    "aws.dynamodb.provisioned_write_capacity": {
4888        brief: "The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.",
4889        type: "double",
4890        applyScrubbing: {
4891            key: "manual"
4892        },
4893        isInOtel: !0,
4894        visibility: "public",
4895        example: 2,
4896        changelog: [
4897            {
4898                version: "0.16.0",
4899                prs: [
4900                    479
4901                ],
4902                description: "Added aws.dynamodb.provisioned_write_capacity attribute"
4903            }
4904        ]
4905    },
4906    "aws.dynamodb.scanned_count": {
4907        brief: "The value of the `ScannedCount` response parameter.",
4908        type: "integer",
4909        applyScrubbing: {
4910            key: "manual"
4911        },
4912        isInOtel: !0,
4913        visibility: "public",
4914        example: 50,
4915        changelog: [
4916            {
4917                version: "0.16.0",
4918                prs: [
4919                    479
4920                ],
4921                description: "Added aws.dynamodb.scanned_count attribute"
4922            }
4923        ]
4924    },
4925    "aws.dynamodb.scan_forward": {
4926        brief: "The value of the `ScanIndexForward` request parameter.",
4927        type: "boolean",
4928        applyScrubbing: {
4929            key: "manual"
4930        },
4931        isInOtel: !0,
4932        visibility: "public",
4933        example: !0,
4934        changelog: [
4935            {
4936                version: "0.16.0",
4937                prs: [
4938                    479
4939                ],
4940                description: "Added aws.dynamodb.scan_forward attribute"
4941            }
4942        ]
4943    },
4944    "aws.dynamodb.segment": {
4945        brief: "The value of the `Segment` request parameter.",
4946        type: "integer",
4947        applyScrubbing: {
4948            key: "manual"
4949        },
4950        isInOtel: !0,
4951        visibility: "public",
4952        example: 10,
4953        changelog: [
4954            {
4955                version: "0.16.0",
4956                prs: [
4957                    479
4958                ],
4959                description: "Added aws.dynamodb.segment attribute"
4960            }
4961        ]
4962    },
4963    "aws.dynamodb.select": {
4964        brief: "The value of the `Select` request parameter.",
4965        type: "string",
4966        applyScrubbing: {
4967            key: "manual"
4968        },
4969        isInOtel: !0,
4970        visibility: "public",
4971        example: "ALL_ATTRIBUTES",
4972        changelog: [
4973            {
4974                version: "0.16.0",
4975                prs: [
4976                    479
4977                ],
4978                description: "Added aws.dynamodb.select attribute"
4979            }
4980        ]
4981    },
4982    "aws.dynamodb.table_count": {
4983        brief: "The number of items in the `TableNames` response parameter.",
4984        type: "integer",
4985        applyScrubbing: {
4986            key: "manual"
4987        },
4988        isInOtel: !0,
4989        visibility: "public",
4990        example: 20,
4991        changelog: [
4992            {
4993                version: "0.16.0",
4994                prs: [
4995                    479
4996                ],
4997                description: "Added aws.dynamodb.table_count attribute"
4998            }
4999        ]
5000    },
5001    "aws.dynamodb.table_names": {
5002        brief: "The keys in the `RequestItems` object field.",
5003        type: "string[]",
5004        applyScrubbing: {
5005            key: "manual"
5006        },
5007        isInOtel: !0,
5008        visibility: "public",
5009        example: [
5010            "Users",
5011            "Cats"
5012        ],
5013        changelog: [
5014            {
5015                version: "0.16.0",
5016                prs: [
5017                    479
5018                ],
5019                description: "Added aws.dynamodb.table_names attribute"
5020            }
5021        ]
5022    },
5023    "aws.dynamodb.total_segments": {
5024        brief: "The value of the `TotalSegments` request parameter.",
5025        type: "integer",
5026        applyScrubbing: {
5027            key: "manual"
5028        },
5029        isInOtel: !0,
5030        visibility: "public",
5031        example: 100,
5032        changelog: [
5033            {
5034                version: "0.16.0",
5035                prs: [
5036                    479
5037                ],
5038                description: "Added aws.dynamodb.total_segments attribute"
5039            }
5040        ]
5041    },
5042    "aws.extended_request_id": {
5043        brief: "The AWS extended request ID as returned in the response headers.",
5044        type: "string",
5045        applyScrubbing: {
5046            key: "manual"
5047        },
5048        isInOtel: !0,
5049        visibility: "public",
5050        example: "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=",
5051        aliases: [
5052            "aws.request.extended_id"
5053        ],
5054        changelog: [
5055            {
5056                version: "0.16.0",
5057                prs: [
5058                    480
5059                ],
5060                description: "Added aws.extended_request_id attribute"
5061            }
5062        ]
5063    },
5064    "aws.kinesis.stream_name": {
5065        brief: "The name of the AWS Kinesis stream the request refers to.",
5066        type: "string",
5067        applyScrubbing: {
5068            key: "manual"
5069        },
5070        isInOtel: !0,
5071        visibility: "public",
5072        example: "some-stream-name",
5073        aliases: [
5074            "aws.kinesis.stream.name"
5075        ],
5076        changelog: [
5077            {
5078                version: "0.16.0",
5079                prs: [
5080                    480
5081                ],
5082                description: "Added aws.kinesis.stream_name attribute"
5083            }
5084        ]
5085    },
5086    "aws.kinesis.stream.name": {
5087        brief: "The name of the AWS Kinesis stream the request refers to.",
5088        type: "string",
5089        applyScrubbing: {
5090            key: "manual"
5091        },
5092        isInOtel: !1,
5093        visibility: "public",
5094        example: "some-stream-name",
5095        deprecation: {
5096            replacement: "aws.kinesis.stream_name",
5097            reason: "This attribute is being deprecated in favor of aws.kinesis.stream_name, which is the OTel-aligned replacement."
5098        },
5099        aliases: [
5100            "aws.kinesis.stream_name"
5101        ],
5102        changelog: [
5103            {
5104                version: "0.16.0",
5105                prs: [
5106                    480
5107                ],
5108                description: "Added aws.kinesis.stream.name attribute, deprecated in favor of aws.kinesis.stream_name"
5109            }
5110        ]
5111    },
5112    "aws.lambda.aws_request_id": {
5113        brief: "The AWS request ID as received by the Lambda function runtime",
5114        type: "string",
5115        applyScrubbing: {
5116            key: "manual"
5117        },
5118        isInOtel: !1,
5119        visibility: "public",
5120        example: "8476a536-e9f4-11e8-9739-2dfe598c3fcd",
5121        deprecation: {
5122            replacement: "faas.invocation_id",
5123            reason: "This attribute is being deprecated in favor of faas.invocation_id"
5124        },
5125        aliases: [
5126            "faas.invocation_id",
5127            "faas.execution"
5128        ],
5129        changelog: [
5130            {
5131                version: "0.16.0",
5132                prs: [
5133                    473
5134                ],
5135                description: "Added faas.execution as an alias"
5136            },
5137            {
5138                version: "0.11.1",
5139                prs: [
5140                    414,
5141                    424
5142                ],
5143                description: "Deprecated aws.lambda.aws_request_id in favor of faas.invocation_id"
5144            },
5145            {
5146                version: "0.7.0",
5147                prs: [
5148                    369
5149                ],
5150                description: "Added aws.lambda.aws_request_id attribute"
5151            }
5152        ]
5153    },
5154    "aws.lambda.execution_duration_in_millis": {
5155        brief: "The execution duration of the Lambda function invocation in milliseconds",
5156        type: "double",
5157        applyScrubbing: {
5158            key: "manual"
5159        },
5160        isInOtel: !1,
5161        visibility: "public",
5162        example: 1234.56,
5163        changelog: [
5164            {
5165                version: "0.7.0",
5166                prs: [
5167                    369
5168                ],
5169                description: "Added aws.lambda.execution_duration_in_millis attribute"
5170            }
5171        ]
5172    },
5173    "aws.lambda.function_name": {
5174        brief: "The name of the Lambda function",
5175        type: "string",
5176        applyScrubbing: {
5177            key: "manual"
5178        },
5179        isInOtel: !1,
5180        visibility: "public",
5181        example: "my-function",
5182        deprecation: {
5183            replacement: "faas.name",
5184            reason: "Use the OTel-aligned faas.name attribute instead"
5185        },
5186        aliases: [
5187            "faas.name"
5188        ],
5189        changelog: [
5190            {
5191                version: "0.11.1",
5192                prs: [
5193                    414
5194                ],
5195                description: "Deprecated aws.lambda.function_name in favor of faas.name"
5196            },
5197            {
5198                version: "0.7.0",
5199                prs: [
5200                    369
5201                ],
5202                description: "Added aws.lambda.function_name attribute"
5203            }
5204        ]
5205    },
5206    "aws.lambda.function_version": {
5207        brief: "The version of the Lambda function",
5208        type: "string",
5209        applyScrubbing: {
5210            key: "manual"
5211        },
5212        isInOtel: !1,
5213        visibility: "public",
5214        example: "$LATEST",
5215        deprecation: {
5216            replacement: "faas.version",
5217            reason: "Use the OTel-aligned faas.version attribute instead"
5218        },
5219        aliases: [
5220            "faas.version"
5221        ],
5222        changelog: [
5223            {
5224                version: "0.11.1",
5225                prs: [
5226                    414,
5227                    424
5228                ],
5229                description: "Deprecated aws.lambda.function_version in favor of faas.version"
5230            },
5231            {
5232                version: "0.7.0",
5233                prs: [
5234                    369
5235                ],
5236                description: "Added aws.lambda.function_version attribute"
5237            }
5238        ]
5239    },
5240    "aws.lambda.invoked_arn": {
5241        brief: "The full ARN of the Lambda function that was invoked",
5242        type: "string",
5243        applyScrubbing: {
5244            key: "manual"
5245        },
5246        isInOtel: !0,
5247        visibility: "public",
5248        example: "arn:aws:lambda:us-east-1:123456789012:function:my-function",
5249        aliases: [
5250            "aws.lambda.invoked_function_arn"
5251        ],
5252        changelog: [
5253            {
5254                version: "0.11.1",
5255                prs: [
5256                    414
5257                ]
5258            }
5259        ]
5260    },
5261    "aws.lambda.invoked_function_arn": {
5262        brief: "The full ARN of the Lambda function that was invoked",
5263        type: "string",
5264        applyScrubbing: {
5265            key: "manual"
5266        },
5267        isInOtel: !1,
5268        visibility: "public",
5269        example: "arn:aws:lambda:us-east-1:123456789012:function:my-function",
5270        deprecation: {
5271            replacement: "aws.lambda.invoked_arn",
5272            reason: "This attribute is being deprecated in favor of aws.lambda.invoked_arn"
5273        },
5274        aliases: [
5275            "aws.lambda.invoked_arn"
5276        ],
5277        changelog: [
5278            {
5279                version: "0.11.1",
5280                prs: [
5281                    414
5282                ],
5283                description: "Deprecated aws.lambda.invoked_function_arn in favor of aws.lambda.invoked_arn"
5284            },
5285            {
5286                version: "0.7.0",
5287                prs: [
5288                    369
5289                ],
5290                description: "Added aws.lambda.invoked_function_arn attribute"
5291            }
5292        ]
5293    },
5294    "aws.lambda.remaining_time_in_millis": {
5295        brief: "The remaining time in milliseconds before the Lambda function times out",
5296        type: "double",
5297        applyScrubbing: {
5298            key: "manual"
5299        },
5300        isInOtel: !1,
5301        visibility: "public",
5302        example: 5e3,
5303        changelog: [
5304            {
5305                version: "0.7.0",
5306                prs: [
5307                    369
5308                ],
5309                description: "Added aws.lambda.remaining_time_in_millis attribute"
5310            }
5311        ]
5312    },
5313    "aws.log.group.names": {
5314        brief: "The name(s) of the AWS log group(s) an application is writing to.",
5315        type: "string[]",
5316        applyScrubbing: {
5317            key: "manual"
5318        },
5319        isInOtel: !0,
5320        visibility: "public",
5321        example: [
5322            "/aws/lambda/my-function",
5323            "opentelemetry-service"
5324        ],
5325        changelog: [
5326            {
5327                version: "0.11.1",
5328                prs: [
5329                    414
5330                ]
5331            }
5332        ]
5333    },
5334    "aws.log.stream.names": {
5335        brief: "The name(s) of the AWS log stream(s) an application is writing to.",
5336        type: "string[]",
5337        applyScrubbing: {
5338            key: "manual"
5339        },
5340        isInOtel: !0,
5341        visibility: "public",
5342        example: [
5343            "logs/main/10838bed-421f-43ef-870a-f43feacbbb5b"
5344        ],
5345        changelog: [
5346            {
5347                version: "0.11.1",
5348                prs: [
5349                    414
5350                ]
5351            }
5352        ]
5353    },
5354    "aws.request.extended_id": {
5355        brief: "The AWS extended request ID as returned in the response headers.",
5356        type: "string",
5357        applyScrubbing: {
5358            key: "manual"
5359        },
5360        isInOtel: !1,
5361        visibility: "public",
5362        example: "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=",
5363        deprecation: {
5364            replacement: "aws.extended_request_id",
5365            reason: "This attribute is being deprecated in favor of aws.extended_request_id, which is the OTel-aligned replacement."
5366        },
5367        aliases: [
5368            "aws.extended_request_id"
5369        ],
5370        changelog: [
5371            {
5372                version: "0.16.0",
5373                prs: [
5374                    480
5375                ],
5376                description: "Added aws.request.extended_id attribute, deprecated in favor of aws.extended_request_id"
5377            }
5378        ]
5379    },
5380    "aws.request_id": {
5381        brief: "The AWS request ID as returned in the response headers.",
5382        type: "string",
5383        applyScrubbing: {
5384            key: "manual"
5385        },
5386        isInOtel: !0,
5387        visibility: "public",
5388        example: "79b9da39-b7ae-508a-a6bc-864b2829c622",
5389        aliases: [
5390            "aws.request.id"
5391        ],
5392        changelog: [
5393            {
5394                version: "0.16.0",
5395                prs: [
5396                    480
5397                ],
5398                description: "Added aws.request_id attribute"
5399            }
5400        ]
5401    },
5402    "aws.request.id": {
5403        brief: "The AWS request ID as returned in the response headers.",
5404        type: "string",
5405        applyScrubbing: {
5406            key: "manual"
5407        },
5408        isInOtel: !1,
5409        visibility: "public",
5410        example: "79b9da39-b7ae-508a-a6bc-864b2829c622",
5411        deprecation: {
5412            replacement: "aws.request_id",
5413            reason: "This attribute is being deprecated in favor of aws.request_id, which is the OTel-aligned replacement."
5414        },
5415        aliases: [
5416            "aws.request_id"
5417        ],
5418        changelog: [
5419            {
5420                version: "0.16.0",
5421                prs: [
5422                    480
5423                ],
5424                description: "Added aws.request.id attribute, deprecated in favor of aws.request_id"
5425            }
5426        ]
5427    },
5428    "aws.s3.bucket": {
5429        brief: "The S3 bucket name the request refers to.",
5430        type: "string",
5431        applyScrubbing: {
5432            key: "manual"
5433        },
5434        isInOtel: !0,
5435        visibility: "public",
5436        example: "ot-demo-test",
5437        changelog: [
5438            {
5439                version: "0.16.0",
5440                prs: [
5441                    480
5442                ],
5443                description: "Added aws.s3.bucket attribute"
5444            }
5445        ]
5446    },
5447    "aws.secretsmanager.secret.arn": {
5448        brief: "The ARN of the Secret stored in Secrets Manager.",
5449        type: "string",
5450        applyScrubbing: {
5451            key: "manual"
5452        },
5453        isInOtel: !0,
5454        visibility: "public",
5455        example: "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters",
5456        changelog: [
5457            {
5458                version: "0.16.0",
5459                prs: [
5460                    480
5461                ],
5462                description: "Added aws.secretsmanager.secret.arn attribute"
5463            }
5464        ]
5465    },
5466    "aws.sns.topic.arn": {
5467        brief: "The ARN of the AWS SNS Topic. An Amazon SNS topic is a logical access point that acts as a communication channel.",
5468        type: "string",
5469        applyScrubbing: {
5470            key: "manual"
5471        },
5472        isInOtel: !0,
5473        visibility: "public",
5474        example: "arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE",
5475        changelog: [
5476            {
5477                version: "0.16.0",
5478                prs: [
5479                    480
5480                ],
5481                description: "Added aws.sns.topic.arn attribute"
5482            }
5483        ]
5484    },
5485    "aws.step_functions.activity.arn": {
5486        brief: "The ARN of the AWS Step Functions Activity.",
5487        type: "string",
5488        applyScrubbing: {
5489            key: "manual"
5490        },
5491        isInOtel: !0,
5492        visibility: "public",
5493        example: "arn:aws:states:us-east-1:123456789012:activity:get-greeting",
5494        changelog: [
5495            {
5496                version: "0.16.0",
5497                prs: [
5498                    480
5499                ],
5500                description: "Added aws.step_functions.activity.arn attribute"
5501            }
5502        ]
5503    },
5504    "aws.step_functions.state_machine.arn": {
5505        brief: "The ARN of the AWS Step Functions State Machine.",
5506        type: "string",
5507        applyScrubbing: {
5508            key: "manual"
5509        },
5510        isInOtel: !0,
5511        visibility: "public",
5512        example: "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1",
5513        changelog: [
5514            {
5515                version: "0.16.0",
5516                prs: [
5517                    480
5518                ],
5519                description: "Added aws.step_functions.state_machine.arn attribute"
5520            }
5521        ]
5522    },
5523    blocked_main_thread: {
5524        brief: "Whether the main thread was blocked by the span.",
5525        type: "boolean",
5526        applyScrubbing: {
5527            key: "manual"
5528        },
5529        isInOtel: !1,
5530        visibility: "public",
5531        example: !0,
5532        changelog: [
5533            {
5534                version: "0.0.0"
5535            }
5536        ]
5537    },
5538    "browser.name": {
5539        brief: "The name of the browser.",
5540        type: "string",
5541        applyScrubbing: {
5542            key: "manual"
5543        },
5544        isInOtel: !1,
5545        visibility: "public",
5546        example: "Chrome",
5547        aliases: [
5548            "sentry.browser.name"
5549        ],
5550        changelog: [
5551            {
5552                version: "0.1.0",
5553                prs: [
5554                    127,
5555                    139
5556                ]
5557            },
5558            {
5559                version: "0.0.0"
5560            }
5561        ]
5562    },
5563    "browser.performance.navigation.activation_start": {
5564        brief: "The time between initiating a navigation to a page and the browser activating the page",
5565        type: "double",
5566        applyScrubbing: {
5567            key: "manual"
5568        },
5569        isInOtel: !1,
5570        visibility: "public",
5571        example: 1.983,
5572        aliases: [
5573            "performance.activationStart"
5574        ],
5575        changelog: [
5576            {
5577                version: "0.5.0",
5578                prs: [
5579                    321
5580                ],
5581                description: "Added browser.performance.navigation.activation_start attribute"
5582            }
5583        ]
5584    },
5585    "browser.performance.time_origin": {
5586        brief: "The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated",
5587        type: "double",
5588        applyScrubbing: {
5589            key: "manual"
5590        },
5591        isInOtel: !1,
5592        visibility: "public",
5593        example: 1776185678886e-3,
5594        aliases: [
5595            "performance.timeOrigin"
5596        ],
5597        changelog: [
5598            {
5599                version: "0.5.0",
5600                prs: [
5601                    321
5602                ],
5603                description: "Added browser.performance.time_origin attribute attribute"
5604            }
5605        ]
5606    },
5607    "browser.report.type": {
5608        brief: "A browser report sent via reporting API..",
5609        type: "string",
5610        applyScrubbing: {
5611            key: "manual"
5612        },
5613        isInOtel: !1,
5614        visibility: "public",
5615        example: "network-error",
5616        changelog: [
5617            {
5618                version: "0.1.0",
5619                prs: [
5620                    68,
5621                    127
5622                ]
5623            }
5624        ]
5625    },
5626    "browser.script.invoker": {
5627        brief: "How a script was called in the browser.",
5628        type: "string",
5629        applyScrubbing: {
5630            key: "manual"
5631        },
5632        isInOtel: !1,
5633        visibility: "public",
5634        example: "Window.requestAnimationFrame",
5635        changelog: [
5636            {
5637                version: "0.1.0",
5638                prs: [
5639                    127
5640                ]
5641            },
5642            {
5643                version: "0.0.0"
5644            }
5645        ]
5646    },
5647    "browser.script.invoker_type": {
5648        brief: "Browser script entry point type.",
5649        type: "string",
5650        applyScrubbing: {
5651            key: "manual"
5652        },
5653        isInOtel: !1,
5654        visibility: "public",
5655        example: "event-listener",
5656        changelog: [
5657            {
5658                version: "0.1.0",
5659                prs: [
5660                    127
5661                ]
5662            },
5663            {
5664                version: "0.0.0"
5665            }
5666        ]
5667    },
5668    "browser.script.source_char_position": {
5669        brief: "A number representing the script character position of the script.",
5670        type: "integer",
5671        applyScrubbing: {
5672            key: "manual"
5673        },
5674        isInOtel: !1,
5675        visibility: "public",
5676        example: 678,
5677        changelog: [
5678            {
5679                version: "0.4.0",
5680                prs: [
5681                    228
5682                ]
5683            },
5684            {
5685                version: "0.0.0"
5686            }
5687        ]
5688    },
5689    "browser.version": {
5690        brief: "The version of the browser.",
5691        type: "string",
5692        applyScrubbing: {
5693            key: "manual"
5694        },
5695        isInOtel: !1,
5696        visibility: "public",
5697        example: "120.0.6099.130",
5698        aliases: [
5699            "sentry.browser.version"
5700        ],
5701        changelog: [
5702            {
5703                version: "0.1.0",
5704                prs: [
5705                    59,
5706                    127,
5707                    139
5708                ]
5709            }
5710        ]
5711    },
5712    "browser.web_vital.cls.report_event": {
5713        brief: "The event that caused the SDK to report CLS (pagehide or navigation)",
5714        type: "string",
5715        applyScrubbing: {
5716            key: "manual"
5717        },
5718        isInOtel: !1,
5719        visibility: "public",
5720        example: "navigation",
5721        changelog: [
5722            {
5723                version: "0.5.0",
5724                prs: [
5725                    319
5726                ],
5727                description: "Added browser.web_vital.cls.report_event attribute"
5728            }
5729        ]
5730    },
5731    "browser.web_vital.cls.source.<key>": {
5732        brief: "The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N",
5733        type: "string",
5734        applyScrubbing: {
5735            key: "manual"
5736        },
5737        isInOtel: !1,
5738        visibility: "public",
5739        hasDynamicSuffix: !0,
5740        example: "body > div#app",
5741        aliases: [
5742            "cls.source.<key>"
5743        ],
5744        changelog: [
5745            {
5746                version: "0.5.0",
5747                prs: [
5748                    234
5749                ]
5750            }
5751        ]
5752    },
5753    "browser.web_vital.cls.value": {
5754        brief: "The value of the recorded Cumulative Layout Shift (CLS) web vital",
5755        type: "double",
5756        applyScrubbing: {
5757            key: "manual"
5758        },
5759        isInOtel: !1,
5760        visibility: "public",
5761        example: .2361,
5762        aliases: [
5763            "cls"
5764        ],
5765        changelog: [
5766            {
5767                version: "0.5.0",
5768                prs: [
5769                    229
5770                ],
5771                description: "Added browser.web_vital.cls.value attribute"
5772            }
5773        ]
5774    },
5775    "browser.web_vital.fcp.value": {
5776        brief: "The time it takes for the browser to render the first piece of meaningful content on the screen",
5777        type: "double",
5778        applyScrubbing: {
5779            key: "manual"
5780        },
5781        isInOtel: !1,
5782        visibility: "public",
5783        example: 547.6951,
5784        aliases: [
5785            "fcp"
5786        ],
5787        changelog: [
5788            {
5789                version: "0.5.0",
5790                prs: [
5791                    235
5792                ]
5793            }
5794        ]
5795    },
5796    "browser.web_vital.fp.value": {
5797        brief: "The time in milliseconds it takes for the browser to render the first pixel on the screen",
5798        type: "double",
5799        applyScrubbing: {
5800            key: "manual"
5801        },
5802        isInOtel: !1,
5803        visibility: "public",
5804        example: 477.1926,
5805        aliases: [
5806            "fp"
5807        ],
5808        changelog: [
5809            {
5810                version: "0.5.0",
5811                prs: [
5812                    235
5813                ]
5814            }
5815        ]
5816    },
5817    "browser.web_vital.inp.value": {
5818        brief: "The value of the recorded Interaction to Next Paint (INP) web vital",
5819        type: "double",
5820        applyScrubbing: {
5821            key: "manual"
5822        },
5823        isInOtel: !1,
5824        visibility: "public",
5825        example: 200,
5826        aliases: [
5827            "inp"
5828        ],
5829        changelog: [
5830            {
5831                version: "0.5.0",
5832                prs: [
5833                    229
5834                ],
5835                description: "Added browser.web_vital.inp.value attribute"
5836            }
5837        ]
5838    },
5839    "browser.web_vital.lcp.element": {
5840        brief: "The HTML element selector or component name for which LCP was reported",
5841        type: "string",
5842        applyScrubbing: {
5843            key: "manual"
5844        },
5845        isInOtel: !1,
5846        visibility: "public",
5847        example: "body > div#app > div#container > div",
5848        aliases: [
5849            "lcp.element"
5850        ],
5851        changelog: [
5852            {
5853                version: "0.5.0",
5854                prs: [
5855                    233
5856                ]
5857            }
5858        ]
5859    },
5860    "browser.web_vital.lcp.id": {
5861        brief: "The id of the dom element responsible for the largest contentful paint",
5862        type: "string",
5863        applyScrubbing: {
5864            key: "manual"
5865        },
5866        isInOtel: !1,
5867        visibility: "public",
5868        example: "#gero",
5869        aliases: [
5870            "lcp.id"
5871        ],
5872        changelog: [
5873            {
5874                version: "0.5.0",
5875                prs: [
5876                    233
5877                ]
5878            }
5879        ]
5880    },
5881    "browser.web_vital.lcp.load_time": {
5882        brief: "The time it took for the LCP element to be loaded",
5883        type: "integer",
5884        applyScrubbing: {
5885            key: "manual"
5886        },
5887        isInOtel: !1,
5888        visibility: "public",
5889        example: 1402,
5890        aliases: [
5891            "lcp.loadTime"
5892        ],
5893        changelog: [
5894            {
5895                version: "0.5.0",
5896                prs: [
5897                    233
5898                ]
5899            }
5900        ]
5901    },
5902    "browser.web_vital.lcp.render_time": {
5903        brief: "The time it took for the LCP element to be rendered",
5904        type: "integer",
5905        applyScrubbing: {
5906            key: "manual"
5907        },
5908        isInOtel: !1,
5909        visibility: "public",
5910        example: 1685,
5911        aliases: [
5912            "lcp.renderTime"
5913        ],
5914        changelog: [
5915            {
5916                version: "0.5.0",
5917                prs: [
5918                    233
5919                ]
5920            }
5921        ]
5922    },
5923    "browser.web_vital.lcp.report_event": {
5924        brief: "The event that caused the SDK to report LCP (pagehide or navigation)",
5925        type: "string",
5926        applyScrubbing: {
5927            key: "manual"
5928        },
5929        isInOtel: !1,
5930        visibility: "public",
5931        example: "pagehide",
5932        changelog: [
5933            {
5934                version: "0.5.0",
5935                prs: [
5936                    319
5937                ],
5938                description: "Added browser.web_vital.lcp.report_event attribute"
5939            }
5940        ]
5941    },
5942    "browser.web_vital.lcp.size": {
5943        brief: "The size of the largest contentful paint element",
5944        type: "integer",
5945        applyScrubbing: {
5946            key: "manual"
5947        },
5948        isInOtel: !1,
5949        visibility: "public",
5950        example: 1024,
5951        aliases: [
5952            "lcp.size"
5953        ],
5954        changelog: [
5955            {
5956                version: "0.5.0",
5957                prs: [
5958                    233
5959                ]
5960            }
5961        ]
5962    },
5963    "browser.web_vital.lcp.url": {
5964        brief: "The url of the dom element responsible for the largest contentful paint",
5965        type: "string",
5966        applyScrubbing: {
5967            key: "auto"
5968        },
5969        isInOtel: !1,
5970        visibility: "public",
5971        example: "https://example.com/static/img.png",
5972        aliases: [
5973            "lcp.url"
5974        ],
5975        changelog: [
5976            {
5977                version: "0.5.0",
5978                prs: [
5979                    233
5980                ]
5981            }
5982        ]
5983    },
5984    "browser.web_vital.lcp.value": {
5985        brief: "The value of the recorded Largest Contentful Paint (LCP) web vital",
5986        type: "double",
5987        applyScrubbing: {
5988            key: "manual"
5989        },
5990        isInOtel: !1,
5991        visibility: "public",
5992        example: 2500,
5993        aliases: [
5994            "lcp"
5995        ],
5996        changelog: [
5997            {
5998                version: "0.5.0",
5999                prs: [
6000                    229
6001                ],
6002                description: "Added browser.web_vital.lcp.value attribute"
6003            }
6004        ]
6005    },
6006    "browser.web_vital.ttfb.request_time": {
6007        brief: "The time it takes for the server to process the initial request and send the first byte of a response to the user's browser",
6008        type: "double",
6009        applyScrubbing: {
6010            key: "manual"
6011        },
6012        isInOtel: !1,
6013        visibility: "public",
6014        example: 1554.5814,
6015        aliases: [
6016            "ttfb.requestTime"
6017        ],
6018        changelog: [
6019            {
6020                version: "0.5.0",
6021                prs: [
6022                    235
6023                ]
6024            }
6025        ]
6026    },
6027    "browser.web_vital.ttfb.value": {
6028        brief: "The value of the recorded Time To First Byte (TTFB) web vital in Milliseconds",
6029        type: "double",
6030        applyScrubbing: {
6031            key: "manual"
6032        },
6033        isInOtel: !1,
6034        visibility: "public",
6035        example: 194.3322,
6036        aliases: [
6037            "ttfb"
6038        ],
6039        changelog: [
6040            {
6041                version: "0.5.0",
6042                prs: [
6043                    235
6044                ]
6045            }
6046        ]
6047    },
6048    "cache.hit": {
6049        brief: "If the cache was hit during this span.",
6050        type: "boolean",
6051        applyScrubbing: {
6052            key: "manual"
6053        },
6054        isInOtel: !1,
6055        visibility: "public",
6056        example: !0,
6057        changelog: [
6058            {
6059                version: "0.0.0"
6060            }
6061        ]
6062    },
6063    "cache.item_size": {
6064        brief: "The size of the requested item in the cache. In bytes.",
6065        type: "integer",
6066        applyScrubbing: {
6067            key: "manual"
6068        },
6069        isInOtel: !1,
6070        visibility: "public",
6071        example: 58,
6072        changelog: [
6073            {
6074                version: "0.4.0",
6075                prs: [
6076                    228
6077                ]
6078            },
6079            {
6080                version: "0.0.0"
6081            }
6082        ]
6083    },
6084    "cache.key": {
6085        brief: "The key of the cache accessed.",
6086        type: "string[]",
6087        applyScrubbing: {
6088            key: "manual"
6089        },
6090        isInOtel: !1,
6091        visibility: "public",
6092        example: [
6093            "my-cache-key",
6094            "my-other-cache-key"
6095        ],
6096        changelog: [
6097            {
6098                version: "0.0.0"
6099            }
6100        ]
6101    },
6102    "cache.operation": {
6103        brief: "The operation being performed on the cache.",
6104        type: "string",
6105        applyScrubbing: {
6106            key: "manual"
6107        },
6108        isInOtel: !1,
6109        visibility: "public",
6110        example: "get",
6111        changelog: [
6112            {
6113                version: "0.1.0",
6114                prs: [
6115                    127
6116                ]
6117            },
6118            {
6119                version: "0.0.0"
6120            }
6121        ]
6122    },
6123    "cache.ttl": {
6124        brief: "The ttl of the cache in seconds",
6125        type: "integer",
6126        applyScrubbing: {
6127            key: "manual"
6128        },
6129        isInOtel: !1,
6130        visibility: "public",
6131        example: 120,
6132        changelog: [
6133            {
6134                version: "0.4.0",
6135                prs: [
6136                    228
6137                ]
6138            },
6139            {
6140                version: "0.0.0"
6141            }
6142        ]
6143    },
6144    "cache.write": {
6145        brief: "If the cache operation resulted in a write to the cache.",
6146        type: "boolean",
6147        applyScrubbing: {
6148            key: "manual"
6149        },
6150        isInOtel: !1,
6151        visibility: "public",
6152        example: !0,
6153        changelog: [
6154            {
6155                version: "0.5.0"
6156            }
6157        ]
6158    },
6159    channel: {
6160        brief: "The channel name that is being used.",
6161        type: "string",
6162        applyScrubbing: {
6163            key: "manual"
6164        },
6165        isInOtel: !1,
6166        visibility: "public",
6167        example: "mail",
6168        changelog: [
6169            {
6170                version: "0.1.0",
6171                prs: [
6172                    127
6173                ]
6174            },
6175            {
6176                version: "0.0.0"
6177            }
6178        ]
6179    },
6180    "client.address": {
6181        brief: "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.",
6182        type: "string",
6183        applyScrubbing: {
6184            key: "auto"
6185        },
6186        isInOtel: !0,
6187        visibility: "public",
6188        example: "example.com",
6189        aliases: [
6190            "http.client_ip"
6191        ],
6192        changelog: [
6193            {
6194                version: "0.1.0",
6195                prs: [
6196                    106,
6197                    127
6198                ]
6199            },
6200            {
6201                version: "0.0.0"
6202            }
6203        ]
6204    },
6205    "client.port": {
6206        brief: "Client port number.",
6207        type: "integer",
6208        applyScrubbing: {
6209            key: "manual"
6210        },
6211        isInOtel: !0,
6212        visibility: "public",
6213        example: 5432,
6214        changelog: [
6215            {
6216                version: "0.4.0",
6217                prs: [
6218                    228
6219                ]
6220            },
6221            {
6222                version: "0.0.0"
6223            }
6224        ]
6225    },
6226    "cloudflare.d1.duration": {
6227        brief: "The duration of a Cloudflare D1 operation.",
6228        type: "integer",
6229        applyScrubbing: {
6230            key: "manual"
6231        },
6232        isInOtel: !1,
6233        visibility: "public",
6234        example: 543,
6235        changelog: [
6236            {
6237                version: "0.4.0",
6238                prs: [
6239                    228
6240                ]
6241            },
6242            {
6243                version: "0.0.0"
6244            }
6245        ]
6246    },
6247    "cloudflare.d1.query_type": {
6248        brief: "The type of query executed in a Cloudflare D1 operation",
6249        type: "string",
6250        applyScrubbing: {
6251            key: "manual"
6252        },
6253        isInOtel: !1,
6254        visibility: "public",
6255        example: "run",
6256        deprecation: {
6257            replacement: "db.operation.name"
6258        },
6259        aliases: [
6260            "db.operation.name",
6261            "db.operation"
6262        ],
6263        changelog: [
6264            {
6265                version: "0.11.0",
6266                prs: [
6267                    392
6268                ],
6269                description: "Added cloudflare.d1.query_type attribute"
6270            }
6271        ]
6272    },
6273    "cloudflare.d1.rows_read": {
6274        brief: "The number of rows read in a Cloudflare D1 operation.",
6275        type: "integer",
6276        applyScrubbing: {
6277            key: "manual"
6278        },
6279        isInOtel: !1,
6280        visibility: "public",
6281        example: 12,
6282        changelog: [
6283            {
6284                version: "0.4.0",
6285                prs: [
6286                    228
6287                ]
6288            },
6289            {
6290                version: "0.0.0"
6291            }
6292        ]
6293    },
6294    "cloudflare.d1.rows_written": {
6295      
6295  brief: "The number of rows written in a Cloudflare D1 operation.",
6296        type: "integer",
6297        applyScrubbing: {
6298            key: "manual"
6299        },
6300        isInOtel: !1,
6301        visibility: "public",
6302        example: 12,
6303        changelog: [
6304            {
6305                version: "0.4.0",
6306                prs: [
6307                    228
6308                ]
6309            },
6310            {
6311                version: "0.0.0"
6312            }
6313        ]
6314    },
6315    "cloudflare.durable_object.query.bindings": {
6316        brief: "The number of bound parameters passed to the SQL exec call.",
6317        type: "integer",
6318        applyScrubbing: {
6319            key: "manual"
6320        },
6321        isInOtel: !1,
6322        visibility: "public",
6323        example: 2,
6324        changelog: [
6325            {
6326                version: "0.13.0",
6327                prs: [
6328                    435
6329                ],
6330                description: "Added cloudflare.durable_object.query.bindings attribute"
6331            }
6332        ]
6333    },
6334    "cloudflare.durable_object.response.rows_read": {
6335        brief: "The number of rows read by a Cloudflare Durable Object SQL operation.",
6336        type: "integer",
6337        applyScrubbing: {
6338            key: "manual"
6339        },
6340        isInOtel: !1,
6341        visibility: "public",
6342        example: 12,
6343        changelog: [
6344            {
6345                version: "0.13.0",
6346                prs: [
6347                    435
6348                ],
6349                description: "Added cloudflare.durable_object.response.rows_read attribute"
6350            }
6351        ]
6352    },
6353    "cloudflare.durable_object.response.rows_written": {
6354        brief: "The number of rows written by a Cloudflare Durable Object SQL operation.",
6355        type: "integer",
6356        applyScrubbing: {
6357            key: "manual"
6358        },
6359        isInOtel: !1,
6360        visibility: "public",
6361        example: 1,
6362        changelog: [
6363            {
6364                version: "0.13.0",
6365                prs: [
6366                    435
6367                ],
6368                description: "Added cloudflare.durable_object.response.rows_written attribute"
6369            }
6370        ]
6371    },
6372    "cloudflare.r2.bucket": {
6373        brief: "The name of the Cloudflare R2 bucket binding",
6374        type: "string",
6375        applyScrubbing: {
6376            key: "manual"
6377        },
6378        isInOtel: !1,
6379        visibility: "public",
6380        example: "MY_BUCKET",
6381        changelog: [
6382            {
6383                version: "0.11.1",
6384                prs: [
6385                    413
6386                ],
6387                description: "Added cloudflare.r2.bucket attribute"
6388            }
6389        ]
6390    },
6391    "cloudflare.r2.operation": {
6392        brief: "The R2 API operation being performed",
6393        type: "string",
6394        applyScrubbing: {
6395            key: "manual"
6396        },
6397        isInOtel: !1,
6398        visibility: "public",
6399        example: "GetObject",
6400        changelog: [
6401            {
6402                version: "0.11.1",
6403                prs: [
6404                    413
6405                ],
6406                description: "Added cloudflare.r2.operation attribute"
6407            }
6408        ]
6409    },
6410    "cloudflare.r2.request.delimiter": {
6411        brief: "The delimiter used to group objects in an R2 list operation",
6412        type: "string",
6413        applyScrubbing: {
6414            key: "manual"
6415        },
6416        isInOtel: !1,
6417        visibility: "public",
6418        example: "/",
6419        changelog: [
6420            {
6421                version: "0.11.1",
6422                prs: [
6423                    413
6424                ],
6425                description: "Added cloudflare.r2.request.delimiter attribute"
6426            }
6427        ]
6428    },
6429    "cloudflare.r2.request.key": {
6430        brief: "The object key used in the R2 operation",
6431        type: "string",
6432        applyScrubbing: {
6433            key: "manual"
6434        },
6435        isInOtel: !1,
6436        visibility: "public",
6437        example: "my-file.txt",
6438        changelog: [
6439            {
6440                version: "0.11.1",
6441                prs: [
6442                    413
6443                ],
6444                description: "Added cloudflare.r2.request.key attribute"
6445            }
6446        ]
6447    },
6448    "cloudflare.r2.request.part_number": {
6449        brief: "The part number in a multipart upload operation",
6450        type: "integer",
6451        applyScrubbing: {
6452            key: "manual"
6453        },
6454        isInOtel: !1,
6455        visibility: "public",
6456        example: 1,
6457        changelog: [
6458            {
6459                version: "0.11.1",
6460                prs: [
6461                    413
6462                ],
6463                description: "Added cloudflare.r2.request.part_number attribute"
6464            }
6465        ]
6466    },
6467    "cloudflare.r2.request.prefix": {
6468        brief: "The prefix used to filter objects in an R2 list operation",
6469        type: "string",
6470        applyScrubbing: {
6471            key: "manual"
6472        },
6473        isInOtel: !1,
6474        visibility: "public",
6475        example: "images/",
6476        changelog: [
6477            {
6478                version: "0.11.1",
6479                prs: [
6480                    413
6481                ],
6482                description: "Added cloudflare.r2.request.prefix attribute"
6483            }
6484        ]
6485    },
6486    "cloudflare.workflow.attempt": {
6487        brief: "The current attempt number for a Cloudflare Workflow step",
6488        type: "integer",
6489        applyScrubbing: {
6490            key: "manual"
6491        },
6492        isInOtel: !1,
6493        visibility: "public",
6494        example: 1,
6495        changelog: [
6496            {
6497                version: "0.11.0",
6498                prs: [
6499                    392
6500                ],
6501                description: "Added cloudflare.workflow.attempt attribute"
6502            }
6503        ]
6504    },
6505    "cloudflare.workflow.retries.backoff": {
6506        brief: "The backoff strategy for Cloudflare Workflow step retries",
6507        type: "string",
6508        applyScrubbing: {
6509            key: "manual"
6510        },
6511        isInOtel: !1,
6512        visibility: "public",
6513        example: "exponential",
6514        changelog: [
6515            {
6516                version: "0.11.0",
6517                prs: [
6518                    392
6519                ],
6520                description: "Added cloudflare.workflow.retries.backoff attribute"
6521            }
6522        ]
6523    },
6524    "cloudflare.workflow.retries.delay": {
6525        brief: "The delay between Cloudflare Workflow step retries",
6526        type: "string",
6527        applyScrubbing: {
6528            key: "manual"
6529        },
6530        isInOtel: !1,
6531        visibility: "public",
6532        example: "5 seconds",
6533        changelog: [
6534            {
6535                version: "0.11.0",
6536                prs: [
6537                    392
6538                ],
6539                description: "Added cloudflare.workflow.retries.delay attribute"
6540            }
6541        ]
6542    },
6543    "cloudflare.workflow.retries.limit": {
6544        brief: "The maximum number of retries for a Cloudflare Workflow step",
6545        type: "integer",
6546        applyScrubbing: {
6547            key: "manual"
6548        },
6549        isInOtel: !1,
6550        visibility: "public",
6551        example: 3,
6552        changelog: [
6553            {
6554                version: "0.11.0",
6555                prs: [
6556                    392
6557                ],
6558                description: "Added cloudflare.workflow.retries.limit attribute"
6559            }
6560        ]
6561    },
6562    "cloudflare.workflow.timeout": {
6563        brief: "The timeout duration for a Cloudflare Workflow step",
6564        type: "string",
6565        applyScrubbing: {
6566            key: "manual"
6567        },
6568        isInOtel: !1,
6569        visibility: "public",
6570        example: "1 minute",
6571        changelog: [
6572            {
6573                version: "0.11.0",
6574                prs: [
6575                    392
6576                ],
6577                description: "Added cloudflare.workflow.timeout attribute"
6578            }
6579        ]
6580    },
6581    "cloud.account.id": {
6582        brief: "The cloud account ID the resource is assigned to",
6583        type: "string",
6584        applyScrubbing: {
6585            key: "manual"
6586        },
6587        isInOtel: !0,
6588        visibility: "public",
6589        example: "123456789012",
6590        changelog: [
6591            {
6592                version: "0.7.0",
6593                prs: [
6594                    364
6595                ],
6596                description: "Added cloud.account.id attribute"
6597            }
6598        ]
6599    },
6600    "cloud.availability_zone": {
6601        brief: "Cloud regions often have multiple, isolated locations known as zones to increase availability",
6602        type: "string",
6603        applyScrubbing: {
6604            key: "manual"
6605        },
6606        isInOtel: !0,
6607        visibility: "public",
6608        example: "us-east-1c",
6609        changelog: [
6610            {
6611                version: "0.7.0",
6612                prs: [
6613                    364
6614                ],
6615                description: "Added cloud.availability_zone attribute"
6616            }
6617        ]
6618    },
6619    "cloud.platform": {
6620        brief: "The cloud platform in use",
6621        type: "string",
6622        applyScrubbing: {
6623            key: "manual"
6624        },
6625        isInOtel: !0,
6626        visibility: "public",
6627        example: "aws_lambda",
6628        changelog: [
6629            {
6630                version: "0.7.0",
6631                prs: [
6632                    364
6633                ],
6634                description: "Added cloud.platform attribute"
6635            }
6636        ]
6637    },
6638    "cloud.provider": {
6639        brief: "Name of the cloud provider",
6640        type: "string",
6641        applyScrubbing: {
6642            key: "manual"
6643        },
6644        isInOtel: !0,
6645        visibility: "public",
6646        example: "aws",
6647        changelog: [
6648            {
6649                version: "0.7.0",
6650                prs: [
6651                    364
6652                ],
6653                description: "Added cloud.provider attribute"
6654            }
6655        ]
6656    },
6657    "cloud.region": {
6658        brief: "The geographical region the resource is running",
6659        type: "string",
6660        applyScrubbing: {
6661            key: "manual"
6662        },
6663        isInOtel: !0,
6664        visibility: "public",
6665        example: "us-east-1",
6666        changelog: [
6667            {
6668                version: "0.7.0",
6669                prs: [
6670                    364
6671                ],
6672                description: "Added cloud.region attribute"
6673            }
6674        ]
6675    },
6676    "cloud.resource_id": {
6677        brief: "Cloud provider-specific native identifier of the monitored cloud resource",
6678        type: "string",
6679        applyScrubbing: {
6680            key: "manual"
6681        },
6682        isInOtel: !0,
6683        visibility: "public",
6684        example: "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function",
6685        aliases: [
6686            "faas.id"
6687        ],
6688        changelog: [
6689            {
6690                version: "0.16.0",
6691                prs: [
6692                    475
6693                ],
6694                description: "Added faas.id as an alias"
6695            },
6696            {
6697                version: "0.11.1",
6698                prs: [
6699                    414
6700                ]
6701            }
6702        ],
6703        additionalContext: [
6704            "This can be an identifier for a resource in AWS, GCP, or Azure. There may be some overlap in values found here with other attributes. For instance, an AWS lambda ARN may be found here as well as in `aws.lambda.invoked_arn`. OTEL recommends setting them alongside each other."
6705        ]
6706    },
6707    cls: {
6708        brief: "The value of the recorded Cumulative Layout Shift (CLS) web vital",
6709        type: "double",
6710        applyScrubbing: {
6711            key: "manual"
6712        },
6713        isInOtel: !1,
6714        visibility: "public",
6715        example: .2361,
6716        deprecation: {
6717            replacement: "browser.web_vital.cls.value",
6718            reason: "The CLS web vital is now recorded as a browser.web_vital.cls.value attribute."
6719        },
6720        aliases: [
6721            "browser.web_vital.cls.value"
6722        ],
6723        changelog: [
6724            {
6725                version: "0.5.0",
6726                prs: [
6727                    229
6728                ],
6729                description: "Added and deprecated attribute to document JS SDK's current behaviour"
6730            }
6731        ]
6732    },
6733    "cls.source.<key>": {
6734        brief: "The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N",
6735        type: "string",
6736        applyScrubbing: {
6737            key: "manual"
6738        },
6739        isInOtel: !1,
6740        visibility: "public",
6741        hasDynamicSuffix: !0,
6742        example: "body > div#app",
6743        deprecation: {
6744            replacement: "browser.web_vital.cls.source.<key>",
6745            reason: "The CLS source is now recorded as a browser.web_vital.cls.source.<key> attribute."
6746        },
6747        aliases: [
6748            "browser.web_vital.cls.source.<key>"
6749        ],
6750        changelog: [
6751            {
6752                version: "0.5.0",
6753                prs: [
6754                    234
6755                ]
6756            }
6757        ]
6758    },
6759    "code.filepath": {
6760        brief: "The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).",
6761        type: "string",
6762        applyScrubbing: {
6763            key: "manual"
6764        },
6765        isInOtel: !0,
6766        visibility: "public",
6767        example: "/app/myapplication/http/handler/server.py",
6768        deprecation: {
6769            replacement: "code.file.path"
6770        },
6771        aliases: [
6772            "code.file.path"
6773        ],
6774        changelog: [
6775            {
6776                version: "0.1.0",
6777                prs: [
6778                    61
6779                ]
6780            },
6781            {
6782                version: "0.0.0"
6783            }
6784        ]
6785    },
6786    "code.file.path": {
6787        brief: "The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).",
6788        type: "string",
6789        applyScrubbing: {
6790            key: "manual"
6791        },
6792        isInOtel: !0,
6793        visibility: "public",
6794        example: "/app/myapplication/http/handler/server.py",
6795        aliases: [
6796            "code.filepath"
6797        ],
6798        changelog: [
6799            {
6800                version: "0.0.0"
6801            }
6802        ]
6803    },
6804    "code.function": {
6805        brief: "The method or function name, or equivalent (usually rightmost part of the code unit's name).",
6806        type: "string",
6807        applyScrubbing: {
6808            key: "manual"
6809        },
6810        isInOtel: !0,
6811        visibility: "public",
6812        example: "server_request",
6813        aliases: [
6814            "code.function.name"
6815        ],
6816        changelog: [
6817            {
6818                version: "0.1.0",
6819                prs: [
6820                    61,
6821                    74
6822                ]
6823            },
6824            {
6825                version: "0.0.0"
6826            }
6827        ]
6828    },
6829    "code.function.name": {
6830        brief: "The method or function fully-qualified name without arguments.",
6831        type: "string",
6832        applyScrubbing: {
6833            key: "manual"
6834        },
6835        isInOtel: !0,
6836        visibility: "public",
6837        example: "server_request",
6838        aliases: [
6839            "code.function"
6840        ],
6841        changelog: [
6842            {
6843                version: "0.1.0",
6844                prs: [
6845                    127
6846                ]
6847            },
6848            {
6849                version: "0.0.0"
6850            }
6851        ]
6852    },
6853    "code.lineno": {
6854        brief: "The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function",
6855        type: "integer",
6856        applyScrubbing: {
6857            key: "manual"
6858        },
6859        isInOtel: !0,
6860        visibility: "public",
6861        example: 42,
6862        deprecation: {
6863            replacement: "code.line.number"
6864        },
6865        aliases: [
6866            "code.line.number"
6867        ],
6868        changelog: [
6869            {
6870                version: "0.4.0",
6871                prs: [
6872                    228
6873                ]
6874            },
6875            {
6876                version: "0.1.0",
6877                prs: [
6878                    61,
6879                    108
6880                ]
6881            },
6882            {
6883                version: "0.0.0"
6884            }
6885        ]
6886    },
6887    "code.line.number": {
6888        brief: "The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function",
6889        type: "integer",
6890        applyScrubbing: {
6891            key: "manual"
6892        },
6893        isInOtel: !0,
6894        visibility: "public",
6895        example: 42,
6896        aliases: [
6897            "code.lineno"
6898        ],
6899        changelog: [
6900            {
6901                version: "0.4.0",
6902                prs: [
6903                    228
6904                ]
6905            },
6906            {
6907                version: "0.0.0"
6908            }
6909        ]
6910    },
6911    "code.namespace": {
6912        brief: "The 'namespace' within which code.function is defined. Usually the qualified class or module name, such that code.namespace + some separator + code.function form a unique identifier for the code unit.",
6913        type: "string",
6914        applyScrubbing: {
6915            key: "manual"
6916        },
6917        isInOtel: !0,
6918        visibility: "public",
6919        example: "http.handler",
6920        changelog: [
6921            {
6922                version: "0.1.0",
6923                prs: [
6924                    61,
6925                    74
6926                ]
6927            },
6928            {
6929                version: "0.0.0"
6930            }
6931        ]
6932    },
6933    connectionType: {
6934        brief: "Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).",
6935        type: "string",
6936        applyScrubbing: {
6937            key: "manual"
6938        },
6939        isInOtel: !1,
6940        visibility: "public",
6941        example: "wifi",
6942        deprecation: {
6943            replacement: "network.connection.type",
6944            reason: "Old namespace-less attribute, to be replaced with network.connection.type for span-first future"
6945        },
6946        aliases: [
6947            "network.connection.type",
6948            "device.connection_type"
6949        ],
6950        changelog: [
6951            {
6952                version: "0.5.0",
6953                prs: [
6954                    279
6955                ],
6956                description: "Added and deprecated attribute to document JS SDK's current behaviour"
6957            }
6958        ]
6959    },
6960    "connection.rtt": {
6961        brief: "Specifies the estimated effective round-trip time of the current connection, in milliseconds.",
6962        type: "integer",
6963        applyScrubbing: {
6964            key: "manual"
6965        },
6966        isInOtel: !1,
6967        visibility: "public",
6968        example: 100,
6969        deprecation: {
6970            replacement: "network.connection.rtt",
6971            reason: "Old attribute name (no official namespace), to be replaced with network.connection.rtt for span-first future"
6972        },
6973        aliases: [
6974            "network.connection.rtt"
6975        ],
6976        changelog: [
6977            {
6978                version: "0.5.0",
6979                prs: [
6980                    279
6981                ],
6982                description: "Added and deprecated attribute to document JS SDK's current behaviour"
6983            }
6984        ]
6985    },
6986    "culture.calendar": {
6987        brief: "The calendar system used by the culture.",
6988        type: "string",
6989        applyScrubbing: {
6990            key: "manual"
6991        },
6992        isInOtel: !1,
6993        visibility: "public",
6994        example: "GregorianCalendar",
6995        changelog: [
6996            {
6997                version: "0.4.0",
6998                prs: [
6999                    243
7000                ]
7001            }
7002        ]
7003    },
7004    "culture.display_name": {
7005        brief: "Human readable name of the culture.",
7006        type: "string",
7007        applyScrubbing: {
7008            key: "manual"
7009        },
7010        isInOtel: !1,
7011        visibility: "public",
7012        example: "English (United States)",
7013        changelog: [
7014            {
7015                version: "0.4.0",
7016                prs: [
7017                    243
7018                ]
7019            }
7020        ]
7021    },
7022    "culture.is_24_hour_format": {
7023        brief: "Whether the culture uses 24-hour time format.",
7024        type: "boolean",
7025        applyScrubbing: {
7026            key: "manual"
7027        },
7028        isInOtel: !1,
7029        visibility: "public",
7030        example: !0,
7031        changelog: [
7032            {
7033                version: "0.4.0",
7034                prs: [
7035                    243
7036                ]
7037            }
7038        ]
7039    },
7040    "culture.locale": {
7041        brief: "The locale identifier following RFC 4646.",
7042        type: "string",
7043        applyScrubbing: {
7044            key: "manual"
7045        },
7046        isInOtel: !1,
7047        visibility: "public",
7048        example: "en-US",
7049        changelog: [
7050            {
7051                version: "0.4.0",
7052                prs: [
7053                    243
7054                ]
7055            }
7056        ]
7057    },
7058    "culture.timezone": {
7059        brief: "The timezone of the culture, as a geographic timezone identifier.",
7060        type: "string",
7061        applyScrubbing: {
7062            key: "manual"
7063        },
7064        isInOtel: !1,
7065        visibility: "public",
7066        example: "Europe/Vienna",
7067        changelog: [
7068            {
7069                version: "0.4.0",
7070                prs: [
7071                    243
7072                ]
7073            }
7074        ]
7075    },
7076    "db.collection.name": {
7077        brief: "The name of a collection (table, container) within the database.",
7078        type: "string",
7079        applyScrubbing: {
7080            key: "manual"
7081        },
7082        isInOtel: !0,
7083        visibility: "public",
7084        example: "users",
7085        changelog: [
7086            {
7087                version: "0.1.0",
7088                prs: [
7089                    106,
7090                    127
7091                ]
7092            },
7093            {
7094                version: "0.0.0"
7095            }
7096        ]
7097    },
7098    "db.driver.name": {
7099        brief: "The name of the driver used for the database connection.",
7100        type: "string",
7101        applyScrubbing: {
7102            key: "manual"
7103        },
7104        isInOtel: !1,
7105        visibility: "public",
7106        example: "psycopg2",
7107        changelog: [
7108            {
7109                version: "0.5.0",
7110                prs: [
7111                    297
7112                ],
7113                description: "Added db.driver.name attribute"
7114            }
7115        ]
7116    },
7117    "db.name": {
7118        brief: "The name of the database being accessed.",
7119        type: "string",
7120        applyScrubbing: {
7121            key: "manual"
7122        },
7123        isInOtel: !0,
7124        visibility: "public",
7125        example: "customers",
7126        deprecation: {
7127            replacement: "db.namespace"
7128        },
7129        aliases: [
7130            "db.namespace"
7131        ],
7132        changelog: [
7133            {
7134                version: "0.1.0",
7135                prs: [
7136                    61,
7137                    127
7138                ]
7139            },
7140            {
7141                version: "0.0.0"
7142            }
7143        ]
7144    },
7145    "db.namespace": {
7146        brief: "The name of the database being accessed.",
7147        type: "string",
7148        applyScrubbing: {
7149            key: "manual"
7150        },
7151        isInOtel: !0,
7152        visibility: "public",
7153        example: "customers",
7154        aliases: [
7155            "db.name"
7156        ],
7157        changelog: [
7158            {
7159                version: "0.1.0",
7160                prs: [
7161                    127
7162                ]
7163            },
7164            {
7165                version: "0.0.0"
7166            }
7167        ]
7168    },
7169    "db.operation": {
7170        brief: "The name of the operation being executed.",
7171        type: "string",
7172        applyScrubbing: {
7173            key: "manual"
7174        },
7175        isInOtel: !0,
7176        visibility: "public",
7177        example: "SELECT",
7178        deprecation: {
7179            replacement: "db.operation.name"
7180        },
7181        aliases: [
7182            "db.operation.name",
7183            "cloudflare.d1.query_type"
7184        ],
7185        changelog: [
7186            {
7187                version: "0.4.0",
7188                prs: [
7189                    199
7190                ]
7191            },
7192            {
7193                version: "0.1.0",
7194                prs: [
7195                    61,
7196                    127
7197                ]
7198            },
7199            {
7200                version: "0.0.0"
7201            }
7202        ]
7203    },
7204    "db.operation.batch.size": {
7205        brief: "The number of queries included in a batch operation. Operations are only considered batches when they contain two or more operations, and so db.operation.batch.size SHOULD never be 1.",
7206        type: "integer",
7207        applyScrubbing: {
7208            key: "manual"
7209        },
7210        isInOtel: !0,
7211        visibility: "public",
7212        example: 3,
7213        changelog: [
7214            {
7215                version: "0.11.0",
7216                prs: [
7217                    407
7218                ],
7219                description: "Added db.operation.batch.size attribute"
7220            }
7221        ]
7222    },
7223    "db.operation.name": {
7224        brief: "The name of the operation being executed.",
7225        type: "string",
7226        applyScrubbing: {
7227            key: "manual"
7228        },
7229        isInOtel: !0,
7230        visibility: "public",
7231        example: "SELECT",
7232        aliases: [
7233            "db.operation",
7234            "cloudflare.d1.query_type"
7235        ],
7236        changelog: [
7237            {
7238                version: "0.1.0",
7239                prs: [
7240                    127
7241                ]
7242            },
7243            {
7244                version: "0.0.0"
7245            }
7246        ]
7247    },
7248    "db.query.parameter.<key>": {
7249        brief: "A query parameter used in db.query.text, with <key> being the parameter name, and the attribute value being a string representation of the parameter value.",
7250        type: "string",
7251        applyScrubbing: {
7252            key: "auto"
7253        },
7254        isInOtel: !0,
7255        visibility: "public",
7256        hasDynamicSuffix: !0,
7257        example: "db.query.parameter.foo='123'",
7258        changelog: [
7259            {
7260                version: "0.1.0",
7261                prs: [
7262                    103,
7263                    127
7264                ]
7265            }
7266        ]
7267    },
7268    "db.query.summary": {
7269        brief: "A shortened representation of operation(s) in the full query. This attribute must be low-cardinality and should only contain the operation table names.",
7270        type: "string",
7271        applyScrubbing: {
7272            key: "manual"
7273        },
7274        isInOtel: !0,
7275        visibility: "public",
7276        example: "SELECT users",
7277        changelog: [
7278            {
7279                version: "0.4.0",
7280                prs: [
7281                    208
7282                ]
7283            },
7284            {
7285                version: "0.1.0",
7286                prs: [
7287                    127
7288                ]
7289            },
7290            {
7291                version: "0.0.0"
7292            }
7293        ]
7294    },
7295    "db.query.text": {
7296        brief: "The database parameterized query being executed. Any parameter values (filters, insertion values, etc) should be replaced with parameter placeholders. If applicable, use `db.query.parameter.<key>` to add the parameter value.",
7297        type: "string",
7298        applyScrubbing: {
7299            key: "manual"
7300        },
7301        isInOtel: !0,
7302        visibility: "public",
7303        example: "SELECT * FROM users WHERE id = $1",
7304        aliases: [
7305            "db.statement"
7306        ],
7307        changelog: [
7308            {
7309                version: "0.4.0",
7310                prs: [
7311                    208
7312                ]
7313            },
7314            {
7315                version: "0.1.0",
7316                prs: [
7317                    127
7318                ]
7319            },
7320            {
7321                version: "0.0.0"
7322            }
7323        ]
7324    },
7325    "db.redis.connection": {
7326        brief: "The redis connection name.",
7327        type: "string",
7328        applyScrubbing: {
7329            key: "manual"
7330        },
7331        isInOtel: !1,
7332        visibility: "public",
7333        example: "my-redis-instance",
7334        changelog: [
7335            {
7336                version: "0.1.0",
7337                prs: [
7338                    127
7339                ]
7340            },
7341            {
7342                version: "0.0.0"
7343            }
7344        ]
7345    },
7346    "db.redis.key": {
7347        brief: "The key the Redis command is operating on.",
7348        type: "string",
7349        applyScrubbing: {
7350            key: "manual"
7351        },
7352        isInOtel: !1,
7353        visibility: "public",
7354        example: "user:2047:city",
7355        changelog: [
7356            {
7357                version: "0.6.0",
7358                prs: [
7359                    326
7360                ],
7361                description: "Added db.redis.key attribute"
7362            }
7363        ]
7364    },
7365    "db.redis.parameters": {
7366        brief: "The array of command parameters given to a redis command.",
7367        type: "string[]",
7368        applyScrubbing: {
7369            key: "auto"
7370        },
7371        isInOtel: !1,
7372        visibility: "public",
7373        example: [
7374            "test",
7375            "*"
7376        ],
7377        changelog: [
7378            {
7379                version: "0.0.0"
7380            }
7381        ]
7382    },
7383    "db.response.status_code": {
7384        brief: "Database response status code. The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.",
7385        type: "string",
7386        applyScrubbing: {
7387            key: "manual"
7388        },
7389        isInOtel: !0,
7390        visibility: "public",
7391        example: "ORA-17002",
7392        changelog: [
7393            {
7394                version: "0.16.0",
7395                prs: [
7396                    462
7397                ],
7398                description: "Added db.response.status_code attribute"
7399            }
7400        ]
7401    },
7402    "db.sql.bindings": {
7403        brief: "The array of query bindings.",
7404        type: "string[]",
7405        applyScrubbing: {
7406            key: "auto"
7407        },
7408        isInOtel: !1,
7409        visibility: "public",
7410        example: [
7411            "1",
7412            "foo"
7413        ],
7414        deprecation: {
7415            replacement: "db.query.parameter.<key>",
7416            reason: "Instead of adding every binding in the db.sql.bindings attribute, add them as individual entires with db.query.parameter.<key>."
7417        },
7418        changelog: [
7419            {
7420                version: "0.1.0",
7421                prs: [
7422                    61
7423                ]
7424            },
7425            {
7426                version: "0.0.0"
7427            }
7428        ]
7429    },
7430    "db.statement": {
7431        brief: "The database statement being executed.",
7432        type: "string",
7433        applyScrubbing: {
7434            key: "auto"
7435        },
7436        isInOtel: !0,
7437        visibility: "public",
7438        example: "SELECT * FROM users",
7439        deprecation: {
7440            replacement: "db.query.text"
7441        },
7442        aliases: [
7443            "db.query.text"
7444        ],
7445        changelog: [
7446            {
7447                version: "0.4.0",
7448                prs: [
7449                    199
7450                ]
7451            },
7452            {
7453                version: "0.1.0",
7454                prs: [
7455                    61,
7456                    127
7457                ]
7458            },
7459            {
7460                version: "0.0.0"
7461            }
7462        ]
7463    },
7464    "db.stored_procedure.name": {
7465        brief: "The name of a stored procedure being called.",
7466        type: "string",
7467        applyScrubbing: {
7468            key: "manual"
7469        },
7470        isInOtel: !0,
7471        visibility: "public",
7472        example: "GetUserById",
7473        changelog: [
7474            {
7475                version: "0.11.0",
7476                prs: [
7477                    398
7478                ]
7479            }
7480        ]
7481    },
7482    "db.system": {
7483        brief: "An identifier for the database management system (DBMS) product being used. See [OpenTelemetry docs](
7483https://github.com/open-telemetry/semantic-conventions/blob/main/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystem) for a list of well-known identifiers.",
7484        type: "string",
7485        applyScrubbing: {
7486            key: "manual"
7487        },
7488        isInOtel: !0,
7489        visibility: "public",
7490        example: "postgresql",
7491        deprecation: {
7492            replacement: "db.system.name"
7493        },
7494        aliases: [
7495            "db.system.name"
7496        ],
7497        changelog: [
7498            {
7499                version: "0.4.0",
7500                prs: [
7501                    199,
7502                    224
7503                ]
7504            },
7505            {
7506                version: "0.1.0",
7507                prs: [
7508                    61,
7509                    127
7510                ]
7511            },
7512            {
7513                version: "0.0.0"
7514            }
7515        ]
7516    },
7517    "db.system.name": {
7518        brief: "An identifier for the database management system (DBMS) product being used. See [OpenTelemetry docs](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystem) for a list of well-known identifiers.",
7519        type: "string",
7520        applyScrubbing: {
7521            key: "manual"
7522        },
7523        isInOtel: !0,
7524        visibility: "public",
7525        example: "postgresql",
7526        aliases: [
7527            "db.system"
7528        ],
7529        changelog: [
7530            {
7531                version: "0.1.0",
7532                prs: [
7533                    127
7534                ]
7535            },
7536            {
7537                version: "0.0.0"
7538            }
7539        ]
7540    },
7541    "db.user": {
7542        brief: "The database user.",
7543        type: "string",
7544        applyScrubbing: {
7545            key: "manual"
7546        },
7547        isInOtel: !0,
7548        visibility: "public",
7549        example: "fancy_user",
7550        changelog: [
7551            {
7552                version: "0.0.0"
7553            }
7554        ]
7555    },
7556    deviceMemory: {
7557        brief: "The estimated total memory capacity of the device, only a rough estimation in gigabytes.",
7558        type: "string",
7559        applyScrubbing: {
7560            key: "manual"
7561        },
7562        isInOtel: !1,
7563        visibility: "public",
7564        example: "8 GB",
7565        deprecation: {
7566            replacement: "device.memory.estimated_capacity",
7567            reason: "Old namespace-less attribute, to be replaced with device.memory.estimated_capacity for span-first future"
7568        },
7569        aliases: [
7570            "device.memory.estimated_capacity"
7571        ],
7572        changelog: [
7573            {
7574                version: "0.5.0",
7575                prs: [
7576                    281
7577                ],
7578                description: "Added and deprecated attribute to document JS SDK's current behaviour"
7579            }
7580        ]
7581    },
7582    "device.archs": {
7583        brief: "The CPU architectures of the device.",
7584        type: "string[]",
7585        applyScrubbing: {
7586            key: "manual"
7587        },
7588        isInOtel: !1,
7589        visibility: "public",
7590        example: [
7591            "arm64-v8a",
7592            "armeabi-v7a",
7593            "armeabi"
7594        ],
7595        changelog: [
7596            {
7597                version: "0.5.0",
7598                prs: [
7599                    303
7600                ],
7601                description: "Added device.archs attribute"
7602            }
7603        ]
7604    },
7605    "device.battery_level": {
7606        brief: "The battery level of the device as a percentage (0-100).",
7607        type: "double",
7608        applyScrubbing: {
7609            key: "manual"
7610        },
7611        isInOtel: !1,
7612        visibility: "public",
7613        example: 100,
7614        changelog: [
7615            {
7616                version: "0.5.0",
7617                prs: [
7618                    303
7619                ],
7620                description: "Added device.battery_level attribute"
7621            }
7622        ]
7623    },
7624    "device.battery_temperature": {
7625        brief: "The battery temperature of the device in Celsius.",
7626        type: "double",
7627        applyScrubbing: {
7628            key: "manual"
7629        },
7630        isInOtel: !1,
7631        visibility: "public",
7632        example: 25,
7633        changelog: [
7634            {
7635                version: "0.5.0",
7636                prs: [
7637                    303
7638                ],
7639                description: "Added device.battery_temperature attribute"
7640            }
7641        ]
7642    },
7643    "device.boot_time": {
7644        brief: "A formatted UTC timestamp when the system was booted.",
7645        type: "string",
7646        applyScrubbing: {
7647            key: "manual"
7648        },
7649        isInOtel: !1,
7650        visibility: "public",
7651        example: "2018-02-08T12:52:12Z",
7652        changelog: [
7653            {
7654                version: "0.5.0",
7655                prs: [
7656                    303
7657                ],
7658                description: "Added device.boot_time attribute"
7659            }
7660        ]
7661    },
7662    "device.brand": {
7663        brief: "The brand of the device.",
7664        type: "string",
7665        applyScrubbing: {
7666            key: "manual"
7667        },
7668        isInOtel: !1,
7669        visibility: "public",
7670        example: "Apple",
7671        changelog: [
7672            {
7673                version: "0.1.0",
7674                prs: [
7675                    116,
7676                    127
7677                ]
7678            }
7679        ]
7680    },
7681    "device.charging": {
7682        brief: "Whether the device was charging or not.",
7683        type: "boolean",
7684        applyScrubbing: {
7685            key: "manual"
7686        },
7687        isInOtel: !1,
7688        visibility: "public",
7689        example: !1,
7690        changelog: [
7691            {
7692                version: "0.5.0",
7693                prs: [
7694                    303
7695                ],
7696                description: "Added device.charging attribute"
7697            }
7698        ]
7699    },
7700    "device.chipset": {
7701        brief: "The chipset of the device.",
7702        type: "string",
7703        applyScrubbing: {
7704            key: "manual"
7705        },
7706        isInOtel: !1,
7707        visibility: "public",
7708        example: "Qualcomm SM8550",
7709        changelog: [
7710            {
7711                version: "0.5.0",
7712                prs: [
7713                    303
7714                ],
7715                description: "Added device.chipset attribute"
7716            }
7717        ]
7718    },
7719    "device.class": {
7720        brief: "The classification of the device. For example, `low`, `medium`, or `high`. Typically inferred by Relay - SDKs generally do not need to set this directly.",
7721        type: "string",
7722        applyScrubbing: {
7723            key: "manual"
7724        },
7725        isInOtel: !1,
7726        visibility: "public",
7727        example: "medium",
7728        changelog: [
7729            {
7730                version: "0.5.0",
7731                prs: [
7732                    300
7733                ],
7734                description: "Added device.class attribute"
7735            }
7736        ]
7737    },
7738    "device.connection_type": {
7739        brief: "The internet connection type currently being used by the device.",
7740        type: "string",
7741        applyScrubbing: {
7742            key: "manual"
7743        },
7744        isInOtel: !1,
7745        visibility: "public",
7746        example: "wifi",
7747        deprecation: {
7748            replacement: "network.connection.type",
7749            reason: "This attribute is being deprecated in favor of network.connection.type"
7750        },
7751        aliases: [
7752            "network.connection.type",
7753            "connectionType"
7754        ],
7755        changelog: [
7756            {
7757                version: "0.5.0",
7758                prs: [
7759                    303
7760                ],
7761                description: "Added and deprecated device.connection_type in favor of network.connection.type"
7762            }
7763        ]
7764    },
7765    "device.cpu_description": {
7766        brief: "A description of the CPU of the device.",
7767        type: "string",
7768        applyScrubbing: {
7769            key: "manual"
7770        },
7771        isInOtel: !1,
7772        visibility: "public",
7773        example: "Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz",
7774        changelog: [
7775            {
7776                version: "0.5.0",
7777                prs: [
7778                    303
7779                ],
7780                description: "Added device.cpu_description attribute"
7781            }
7782        ]
7783    },
7784    "device.external_free_storage": {
7785        brief: "External storage free size in bytes.",
7786        type: "integer",
7787        applyScrubbing: {
7788            key: "manual"
7789        },
7790        isInOtel: !1,
7791        visibility: "public",
7792        example: 67108864e3,
7793        changelog: [
7794            {
7795                version: "0.5.0",
7796                prs: [
7797                    303
7798                ],
7799                description: "Added device.external_free_storage attribute"
7800            }
7801        ]
7802    },
7803    "device.external_storage_size": {
7804        brief: "External storage total size in bytes.",
7805        type: "integer",
7806        applyScrubbing: {
7807            key: "manual"
7808        },
7809        isInOtel: !1,
7810        visibility: "public",
7811        example: 134217728e3,
7812        changelog: [
7813            {
7814                version: "0.5.0",
7815                prs: [
7816                    303
7817                ],
7818                description: "Added device.external_storage_size attribute"
7819            }
7820        ]
7821    },
7822    "device.family": {
7823        brief: "The family of the device.",
7824        type: "string",
7825        applyScrubbing: {
7826            key: "manual"
7827        },
7828        isInOtel: !1,
7829        visibility: "public",
7830        example: "iPhone",
7831        changelog: [
7832            {
7833                version: "0.1.0",
7834                prs: [
7835                    116,
7836                    127
7837                ]
7838            }
7839        ]
7840    },
7841    "device.free_memory": {
7842        brief: "Free system memory in bytes.",
7843        type: "integer",
7844        applyScrubbing: {
7845            key: "manual"
7846        },
7847        isInOtel: !1,
7848        visibility: "public",
7849        example: 2147483648,
7850        changelog: [
7851            {
7852                version: "0.5.0",
7853                prs: [
7854                    300
7855                ],
7856                description: "Added device.free_memory attribute"
7857            }
7858        ]
7859    },
7860    "device.free_storage": {
7861        brief: "Free device storage in bytes.",
7862        type: "integer",
7863        applyScrubbing: {
7864            key: "manual"
7865        },
7866        isInOtel: !1,
7867        visibility: "public",
7868        example: 107374182400,
7869        changelog: [
7870            {
7871                version: "0.5.0",
7872                prs: [
7873                    303
7874                ],
7875                description: "Added device.free_storage attribute"
7876            }
7877        ]
7878    },
7879    "device.id": {
7880        brief: "Unique device identifier.",
7881        type: "string",
7882        applyScrubbing: {
7883            key: "manual"
7884        },
7885        isInOtel: !0,
7886        visibility: "public",
7887        example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
7888        changelog: [
7889            {
7890                version: "0.5.0",
7891                prs: [
7892                    303
7893                ],
7894                description: "Added device.id attribute"
7895            }
7896        ]
7897    },
7898    "device.locale": {
7899        brief: "The locale of the device.",
7900        type: "string",
7901        applyScrubbing: {
7902            key: "manual"
7903        },
7904        isInOtel: !1,
7905        visibility: "public",
7906        example: "en-US",
7907        changelog: [
7908            {
7909                version: "0.5.0",
7910                prs: [
7911                    303
7912                ],
7913                description: "Added device.locale attribute"
7914            }
7915        ]
7916    },
7917    "device.low_memory": {
7918        brief: "Whether the device was low on memory.",
7919        type: "boolean",
7920        applyScrubbing: {
7921            key: "manual"
7922        },
7923        isInOtel: !1,
7924        visibility: "public",
7925        example: !1,
7926        changelog: [
7927            {
7928                version: "0.5.0",
7929                prs: [
7930                    303
7931                ],
7932                description: "Added device.low_memory attribute"
7933            }
7934        ]
7935    },
7936    "device.low_power_mode": {
7937        brief: "Whether the device is in Low Power Mode.",
7938        type: "boolean",
7939        applyScrubbing: {
7940            key: "manual"
7941        },
7942        isInOtel: !1,
7943        visibility: "public",
7944        example: !0,
7945        changelog: [
7946            {
7947                version: "0.6.0",
7948                prs: [
7949                    314
7950                ],
7951                description: "Added device.low_power_mode attribute"
7952            }
7953        ]
7954    },
7955    "device.manufacturer": {
7956        brief: "The manufacturer of the device.",
7957        type: "string",
7958        applyScrubbing: {
7959            key: "manual"
7960        },
7961        isInOtel: !0,
7962        visibility: "public",
7963        example: "Google",
7964        changelog: [
7965            {
7966                version: "0.5.0",
7967                prs: [
7968                    303
7969                ],
7970                description: "Added device.manufacturer attribute"
7971            }
7972        ]
7973    },
7974    "device.memory.estimated_capacity": {
7975        brief: "The estimated total memory capacity of the device, only a rough estimation in gigabytes. Browsers report estimations in buckets of powers of 2, mostly capped at 8 GB",
7976        type: "integer",
7977        applyScrubbing: {
7978            key: "manual"
7979        },
7980        isInOtel: !1,
7981        visibility: "public",
7982        example: 8,
7983        aliases: [
7984            "deviceMemory"
7985        ],
7986        changelog: [
7987            {
7988                version: "0.5.0",
7989                prs: [
7990                    281
7991                ],
7992                description: "Added attribute device.memory.estimated_capacity to be used instead of deviceMemory"
7993            }
7994        ]
7995    },
7996    "device.memory_size": {
7997        brief: "Total system memory available in bytes.",
7998        type: "integer",
7999        applyScrubbing: {
8000            key: "manual"
8001        },
8002        isInOtel: !1,
8003        visibility: "public",
8004        example: 17179869184,
8005        changelog: [
8006            {
8007                version: "0.5.0",
8008                prs: [
8009                    300
8010                ],
8011                description: "Added device.memory_size attribute"
8012            }
8013        ]
8014    },
8015    "device.model": {
8016        brief: "The model of the device.",
8017        type: "string",
8018        applyScrubbing: {
8019            key: "manual"
8020        },
8021        isInOtel: !1,
8022        visibility: "public",
8023        example: "iPhone 15 Pro Max",
8024        changelog: [
8025            {
8026                version: "0.1.0",
8027                prs: [
8028                    116,
8029                    127
8030                ]
8031            }
8032        ]
8033    },
8034    "device.model_id": {
8035        brief: "An internal hardware revision to identify the device exactly.",
8036        type: "string",
8037        applyScrubbing: {
8038            key: "manual"
8039        },
8040        isInOtel: !1,
8041        visibility: "public",
8042        example: "N861AP",
8043        changelog: [
8044            {
8045                version: "0.5.0",
8046                prs: [
8047                    300
8048                ],
8049                description: "Added device.model_id attribute"
8050            }
8051        ]
8052    },
8053    "device.name": {
8054        brief: "The name of the device. On mobile, this is the user-assigned device name. On servers and desktops, this is typically the hostname.",
8055        type: "string",
8056        applyScrubbing: {
8057            key: "auto"
8058        },
8059        isInOtel: !1,
8060        visibility: "public",
8061        example: "localhost",
8062        changelog: [
8063            {
8064                version: "0.5.0",
8065                prs: [
8066                    303
8067                ],
8068                description: "Added device.name attribute"
8069            }
8070        ]
8071    },
8072    "device.online": {
8073        brief: "Whether the device was online or not.",
8074        type: "boolean",
8075        applyScrubbing: {
8076            key: "manual"
8077        },
8078        isInOtel: !1,
8079        visibility: "public",
8080        example: !0,
8081        changelog: [
8082            {
8083                version: "0.5.0",
8084                prs: [
8085                    303
8086                ],
8087                description: "Added device.online attribute"
8088            }
8089        ]
8090    },
8091    "device.orientation": {
8092        brief: 'The orientation of the device, either "portrait" or "landscape".',
8093        type: "string",
8094        applyScrubbing: {
8095            key: "manual"
8096        },
8097        isInOtel: !1,
8098        visibility: "public",
8099        example: "portrait",
8100        changelog: [
8101            {
8102                version: "0.5.0",
8103                prs: [
8104                    303
8105                ],
8106                description: "Added device.orientation attribute"
8107            }
8108        ]
8109    },
8110    "device.processor_count": {
8111        brief: 'Number of "logical processors".',
8112        type: "integer",
8113        applyScrubbing: {
8114            key: "manual"
8115        },
8116        isInOtel: !1,
8117        visibility: "public",
8118        example: 8,
8119        aliases: [
8120            "hardwareConcurrency"
8121        ],
8122        changelog: [
8123            {
8124                version: "0.5.0",
8125                prs: [
8126                    300
8127                ],
8128                description: "Added and deprecated attribute device.processor_count in favor of device.cpu.logical_core_count"
8129            }
8130        ]
8131    },
8132    "device.processor_frequency": {
8133        brief: "Processor frequency in MHz.",
8134        type: "double",
8135        applyScrubbing: {
8136            key: "manual"
8137        },
8138        isInOtel: !1,
8139        visibility: "public",
8140        example: 2400,
8141        changelog: [
8142            {
8143                version: "0.5.0",
8144                prs: [
8145                    303
8146                ],
8147                description: "Added device.processor_frequency attribute"
8148            }
8149        ]
8150    },
8151    "device.screen_density": {
8152        brief: "The screen density of the device.",
8153        type: "double",
8154        applyScrubbing: {
8155            key: "manual"
8156        },
8157        isInOtel: !1,
8158        visibility: "public",
8159        example: 2.625,
8160        changelog: [
8161            {
8162                version: "0.5.0",
8163                prs: [
8164                    303
8165                ],
8166                description: "Added device.screen_density attribute"
8167            }
8168        ]
8169    },
8170    "device.screen_dpi": {
8171        brief: "The screen density in dots-per-inch (DPI) of the device.",
8172        type: "integer",
8173        applyScrubbing: {
8174            key: "manual"
8175        },
8176        isInOtel: !1,
8177        visibility: "public",
8178        example: 420,
8179        changelog: [
8180            {
8181                version: "0.5.0",
8182                prs: [
8183                    303
8184                ],
8185                description: "Added device.screen_dpi attribute"
8186            }
8187        ]
8188    },
8189    "device.screen_height_pixels": {
8190        brief: "The height of the device screen in pixels.",
8191        type: "integer",
8192        applyScrubbing: {
8193            key: "manual"
8194        },
8195        isInOtel: !1,
8196        visibility: "public",
8197        example: 2400,
8198        changelog: [
8199            {
8200                version: "0.5.0",
8201                prs: [
8202                    303
8203                ],
8204                description: "Added device.screen_height_pixels attribute"
8205            }
8206        ]
8207    },
8208    "device.screen_width_pixels": {
8209        brief: "The width of the device screen in pixels.",
8210        type: "integer",
8211        applyScrubbing: {
8212            key: "manual"
8213        },
8214        isInOtel: !1,
8215        visibility: "public",
8216        example: 1080,
8217        changelog: [
8218            {
8219                version: "0.5.0",
8220                prs: [
8221                    303
8222                ],
8223                description: "Added device.screen_width_pixels attribute"
8224            }
8225        ]
8226    },
8227    "device.simulator": {
8228        brief: "Whether the device is a simulator or an actual device.",
8229        type: "boolean",
8230        applyScrubbing: {
8231            key: "manual"
8232        },
8233        isInOtel: !1,
8234        visibility: "public",
8235        example: !1,
8236        changelog: [
8237            {
8238                version: "0.5.0",
8239                prs: [
8240                    300
8241                ],
8242                description: "Added device.simulator attribute"
8243            }
8244        ]
8245    },
8246    "device.storage_size": {
8247        brief: "Total device storage in bytes.",
8248        type: "integer",
8249        applyScrubbing: {
8250            key: "manual"
8251        },
8252        isInOtel: !1,
8253        visibility: "public",
8254        example: 274877906944,
8255        changelog: [
8256            {
8257                version: "0.5.0",
8258                prs: [
8259                    303
8260                ],
8261                description: "Added device.storage_size attribute"
8262            }
8263        ]
8264    },
8265    "device.thermal_state": {
8266        brief: "The thermal state of the device. Based on Apple's `ProcessInfo.ThermalState` enum: `nominal`, `fair`, `serious`, or `critical`.",
8267        type: "string",
8268        applyScrubbing: {
8269            key: "manual"
8270        },
8271        isInOtel: !1,
8272        visibility: "public",
8273        example: "nominal",
8274        changelog: [
8275            {
8276                version: "0.5.0",
8277                prs: [
8278                    303
8279                ],
8280                description: "Added device.thermal_state attribute"
8281            }
8282        ]
8283    },
8284    "device.timezone": {
8285        brief: "The timezone of the device.",
8286        type: "string",
8287        applyScrubbing: {
8288            key: "manual"
8289        },
8290        isInOtel: !1,
8291        visibility: "public",
8292        example: "Europe/Vienna",
8293        changelog: [
8294            {
8295                version: "0.5.0",
8296                prs: [
8297                    303
8298                ],
8299                description: "Added device.timezone attribute"
8300            }
8301        ]
8302    },
8303    "device.usable_memory": {
8304        brief: "Memory usable for the app in bytes.",
8305        type: "integer",
8306        applyScrubbing: {
8307            key: "manual"
8308        },
8309        isInOtel: !1,
8310        visibility: "public",
8311        example: 2147483648,
8312        changelog: [
8313            {
8314                version: "0.5.0",
8315                prs: [
8316                    303
8317                ],
8318                description: "Added device.usable_memory attribute"
8319            }
8320        ]
8321    },
8322    dist: {
8323        brief: "The sentry dist.",
8324        type: "string",
8325        applyScrubbing: {
8326            key: "never"
8327        },
8328        isInOtel: !1,
8329        visibility: "public",
8330        example: "1.0",
8331        deprecation: {
8332            replacement: "sentry.dist",
8333            reason: "This attribute is being deprecated in favor of sentry.dist."
8334        },
8335        aliases: [
8336            "sentry.dist"
8337        ],
8338        changelog: [
8339            {
8340                version: "0.16.0",
8341                prs: [
8342                    489
8343                ],
8344                description: "Added dist attribute"
8345            }
8346        ]
8347    },
8348    effectiveConnectionType: {
8349        brief: "Specifies the estimated effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).",
8350        type: "string",
8351        applyScrubbing: {
8352            key: "manual"
8353        },
8354        isInOtel: !1,
8355        visibility: "public",
8356        example: "4g",
8357        deprecation: {
8358            replacement: "network.connection.effective_type",
8359            reason: "Old namespace-less attribute, to be replaced with network.connection.effective_type for span-first future"
8360        },
8361        aliases: [
8362            "network.connection.effective_type"
8363        ],
8364        changelog: [
8365            {
8366                version: "0.5.0",
8367                prs: [
8368                    279
8369                ],
8370                description: "Added and deprecated attribute to document JS SDK's current behaviour"
8371            }
8372        ]
8373    },
8374    environment: {
8375        brief: "The sentry environment.",
8376        type: "string",
8377        applyScrubbing: {
8378            key: "manual"
8379        },
8380        isInOtel: !1,
8381        visibility: "public",
8382        example: "production",
8383        deprecation: {
8384            replacement: "sentry.environment"
8385        },
8386        aliases: [
8387            "sentry.environment"
8388        ],
8389        changelog: [
8390            {
8391                version: "0.1.0",
8392                prs: [
8393                    61,
8394                    127
8395                ]
8396            },
8397            {
8398                version: "0.0.0"
8399            }
8400        ]
8401    },
8402    "error.type": {
8403        brief: "Describes a class of error the operation ended with.",
8404        type: "string",
8405        applyScrubbing: {
8406            key: "manual"
8407        },
8408        isInOtel: !0,
8409        visibility: "public",
8410        example: "timeout",
8411        changelog: [
8412            {
8413                version: "0.1.0",
8414                prs: [
8415                    127
8416                ]
8417            },
8418            {
8419                version: "0.0.0"
8420            }
8421        ]
8422    },
8423    "event.id": {
8424        brief: "The unique identifier for this event (log record)",
8425        type: "integer",
8426        applyScrubbing: {
8427            key: "manual"
8428        },
8429        isInOtel: !1,
8430        visibility: "public",
8431        example: 1234567890,
8432        changelog: [
8433            {
8434                version: "0.1.0",
8435                prs: [
8436                    101
8437                ]
8438            }
8439        ]
8440    },
8441    "event.name": {
8442        brief: "The name that uniquely identifies this event (log record)",
8443        type: "string",
8444        applyScrubbing: {
8445            key: "manual"
8446        },
8447        isInOtel: !1,
8448        visibility: "public",
8449        example: "Process Payload",
8450        changelog: [
8451            {
8452                version: "0.1.0",
8453                prs: [
8454                    101,
8455                    127
8456                ]
8457            }
8458        ]
8459    },
8460    "exception.escaped": {
8461        brief: "SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.",
8462        type: "boolean",
8463        applyScrubbing: {
8464            key: "manual"
8465        },
8466        isInOtel: !0,
8467        visibility: "public",
8468        example: !0,
8469        changelog: [
8470            {
8471                version: "0.0.0"
8472            }
8473        ]
8474    },
8475    "exception.message": {
8476        brief: "The error message.",
8477        type: "string",
8478        applyScrubbing: {
8479            key: "auto"
8480        },
8481        isInOtel: !0,
8482        visibility: "public",
8483        example: "ENOENT: no such file or directory",
8484        changelog: [
8485            {
8486                version: "0.1.0",
8487                prs: [
8488                    127
8489                ]
8490            },
8491            {
8492                version: "0.0.0"
8493            }
8494        ]
8495    },
8496    "exception.stacktrace": {
8497        brief: "A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.",
8498        type: "string",
8499        applyScrubbing: {
8500            key: "auto"
8501        },
8502        isInOtel: !0,
8503        visibility: "public",
8504        example: 'Exception in thread "main" java.lang.RuntimeException: Test exception\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at com.example.GenerateTrace.main(GenerateTrace.java:5)',
8505        changelog: [
8506            {
8507                version: "0.1.0",
8508                prs: [
8509                    127
8510                ]
8511            },
8512            {
8513                version: "0.0.0"
8514            }
8515        ]
8516    },
8517    "exception.type": {
8518        brief: "The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.",
8519        type: "string",
8520        applyScrubbing: {
8521            key: "manual"
8522        },
8523        isInOtel: !0,
8524        visibility: "public",
8525        example: "OSError",
8526        changelog: [
8527            {
8528                version: "0.1.0",
8529                prs: [
8530                    127
8531                ]
8532            },
8533            {
8534                version: "0.0.0"
8535            }
8536        ]
8537    },
8538    "faas.coldstart": {
8539        brief: "A boolean that is true if the serverless function is executed for the first time (aka cold-start).",
8540        type: "boolean",
8541        applyScrubbing: {
8542            key: "manual"
8543        },
8544        isInOtel: !0,
8545        visibility: "public",
8546        example: !0,
8547        changelog: [
8548            {
8549                version: "0.0.0"
8550            }
8551        ]
8552    },
8553    "faas.cron": {
8554        brief: "A string containing the schedule period as Cron Expression.",
8555        type: "string",
8556        applyScrubbing: {
8557            key: "manual"
8558        },
8559        isInOtel: !0,
8560        visibility: "public",
8561        example: "0/5 * * * ? *",
8562        changelog: [
8563            {
8564                version: "0.1.0",
8565                prs: [
8566                    127
8567                ]
8568            },
8569            {
8570                version: "0.0.0"
8571            }
8572        ]
8573    },
8574    "faas.duration_in_ms": {
8575        brief: "The duration a function took to run, in milliseconds.",
8576        type: "integer",
8577        applyScrubbing: {
8578            key: "manual"
8579        },
8580        isInOtel: !1,
8581        visibility: "public",
8582        example: 120,
8583        changelog: [
8584            {
8585                version: "0.11.0",
8586                prs: [
8587                    403
8588                ]
8589            }
8590        ]
8591    },
8592    "faas.entry_point": {
8593        brief: "The code that's run when the cloud provider invokes your function.",
8594        type: "string",
8595        applyScrubbing: {
8596            key: "manual"
8597        },
8598        isInOtel: !1,
8599        visibility: "public",
8600        example: "my_main_function",
8601        changelog: [
8602            {
8603                version: "0.11.0",
8604                prs: [
8605                    403,
8606                    415
8607                ]
8608            }
8609        ]
8610    },
8611    "faas.execution": {
8612        brief: "The execution ID of the current function execution.",
8613        type: "string",
8614        applyScrubbing: {
8615            key: "manual"
8616        },
8617        isInOtel: !1,
8618        visibility: "public",
8619        example: "af9d5aa4-a685-4c5f-a22b-444f80b3cc28",
8620        deprecation: {
8621            replacement: "faas.invocation_id",
8622            reason: "This attribute is being deprecated in favor of faas.invocation_id, which is the OTel-aligned replacement."
8623        },
8624        aliases: [
8625            "faas.invocation_id",
8626            "aws.lambda.aws_request_id"
8627        ],
8628        changelog: [
8629            {
8630                version: "0.16.0",
8631                prs: [
8632                    473
8633                ],
8634                description: "Added faas.execution attribute, deprecated in favor of faas.invocation_id"
8635            }
8636        ]
8637    },
8638    "faas.id": {
8639        brief: "The unique ID of the single function that this runtime instance executes.",
8640        type: "string",
8641        applyScrubbing: {
8642            key: "manual"
8643        },
8644        isInOtel: !1,
8645        visibility: "public",
8646        example: "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function",
8647        deprecation: {
8648            replacement: "cloud.resource_id",
8649            reason: "This attribute is being deprecated in favor of cloud.resource_id, which is the OTel-aligned replacement (renamed in OTel semantic conventions v1.19.0)."
8650        },
8651        aliases: [
8652            "cloud.resource_id"
8653        ],
8654        changelog: [
8655            {
8656                version: "0.16.0",
8657                prs: [
8658                    475
8659                ],
8660                description: "Added faas.id attribute, deprecated 
8660in favor of cloud.resource_id"
8661            }
8662        ]
8663    },
8664    "faas.identity": {
8665        brief: "The Service Account (GCP), IAM Execution Role (AWS), or Managed Identity (Azure) used by the serverless function when interacting with other cloud services",
8666        type: "string",
8667        applyScrubbing: {
8668            key: "manual"
8669        },
8670        isInOtel: !1,
8671        visibility: "public",
8672        example: "[email protected] (GCP), arn:aws:iam::123456789012:role/role-name (AWS), 00000000-0000-0000-0000-000000000000 (Azure)",
8673        changelog: [
8674            {
8675                version: "0.11.0",
8676                prs: [
8677                    403
8678                ]
8679            }
8680        ]
8681    },
8682    "faas.invocation_id": {
8683        brief: "The invocation ID of the current function invocation.",
8684        type: "string",
8685        applyScrubbing: {
8686            key: "manual"
8687        },
8688        isInOtel: !0,
8689        visibility: "public",
8690        example: "af9d5aa4-a685-4c5f-a22b-444f80b3cc28",
8691        aliases: [
8692            "aws.lambda.aws_request_id",
8693            "faas.execution"
8694        ],
8695        changelog: [
8696            {
8697                version: "0.16.0",
8698                prs: [
8699                    473
8700                ],
8701                description: "Added faas.execution as an alias"
8702            },
8703            {
8704                version: "0.11.1",
8705                prs: [
8706                    414,
8707                    424
8708                ]
8709            }
8710        ]
8711    },
8712    "faas.invoked_name": {
8713        brief: "The name of the invoked function.",
8714        type: "string",
8715        applyScrubbing: {
8716            key: "manual"
8717        },
8718        isInOtel: !0,
8719        visibility: "public",
8720        example: "my-function",
8721        changelog: [
8722            {
8723                version: "0.16.0",
8724                prs: [
8725                    481
8726                ],
8727                description: "Added faas.invoked_name attribute"
8728            }
8729        ]
8730    },
8731    "faas.invoked_provider": {
8732        brief: "The cloud provider of the invoked function.",
8733        type: "string",
8734        applyScrubbing: {
8735            key: "manual"
8736        },
8737        isInOtel: !0,
8738        visibility: "public",
8739        example: "aws",
8740        changelog: [
8741            {
8742                version: "0.16.0",
8743                prs: [
8744                    481
8745                ],
8746                description: "Added faas.invoked_provider attribute"
8747            }
8748        ]
8749    },
8750    "faas.invoked_region": {
8751        brief: "The cloud region of the invoked function.",
8752        type: "string",
8753        applyScrubbing: {
8754            key: "manual"
8755        },
8756        isInOtel: !0,
8757        visibility: "public",
8758        example: "eu-central-1",
8759        changelog: [
8760            {
8761                version: "0.16.0",
8762                prs: [
8763                    481
8764                ],
8765                description: "Added faas.invoked_region attribute"
8766            }
8767        ]
8768    },
8769    "faas.name": {
8770        brief: "The name of the serverless function",
8771        type: "string",
8772        applyScrubbing: {
8773            key: "manual"
8774        },
8775        isInOtel: !0,
8776        visibility: "public",
8777        example: "my_function",
8778        aliases: [
8779            "aws.lambda.function_name"
8780        ],
8781        changelog: [
8782            {
8783                version: "0.11.0",
8784                prs: [
8785                    403,
8786                    415
8787                ]
8788            }
8789        ]
8790    },
8791    "faas.time": {
8792        brief: "A string containing the function invocation time in the ISO 8601 format expressed in UTC.",
8793        type: "string",
8794        applyScrubbing: {
8795            key: "manual"
8796        },
8797        isInOtel: !0,
8798        visibility: "public",
8799        example: "2020-01-23T13:47:06Z",
8800        changelog: [
8801            {
8802                version: "0.1.0",
8803                prs: [
8804                    127
8805                ]
8806            },
8807            {
8808                version: "0.0.0"
8809            }
8810        ]
8811    },
8812    "faas.trigger": {
8813        brief: "Type of the trigger which caused this function invocation.",
8814        type: "string",
8815        applyScrubbing: {
8816            key: "manual"
8817        },
8818        isInOtel: !0,
8819        visibility: "public",
8820        example: "timer",
8821        changelog: [
8822            {
8823                version: "0.1.0",
8824                prs: [
8825                    127
8826                ]
8827            },
8828            {
8829                version: "0.0.0"
8830            }
8831        ]
8832    },
8833    "faas.version": {
8834        brief: "The version of the function that was invoked",
8835        type: "string",
8836        applyScrubbing: {
8837            key: "manual"
8838        },
8839        isInOtel: !0,
8840        visibility: "public",
8841        example: "$LATEST",
8842        aliases: [
8843            "aws.lambda.function_version"
8844        ],
8845        changelog: [
8846            {
8847                version: "0.11.1",
8848                prs: [
8849                    414,
8850                    424
8851                ]
8852            }
8853        ]
8854    },
8855    fcp: {
8856        brief: "The time it takes for the browser to render the first piece of meaningful content on the screen",
8857        type: "double",
8858        applyScrubbing: {
8859            key: "manual"
8860        },
8861        isInOtel: !1,
8862        visibility: "public",
8863        example: 547.6951,
8864        deprecation: {
8865            replacement: "browser.web_vital.fcp.value",
8866            reason: "This attribute is being deprecated in favor of browser.web_vital.fcp.value"
8867        },
8868        aliases: [
8869            "browser.web_vital.fcp.value"
8870        ],
8871        changelog: [
8872            {
8873                version: "0.5.0",
8874                prs: [
8875                    235
8876                ]
8877            }
8878        ]
8879    },
8880    "flag.evaluation.<key>": {
8881        brief: "An instance of a feature flag evaluation. The value of this attribute is the boolean representing the evaluation result. The <key> suffix is the name of the feature flag.",
8882        type: "boolean",
8883        applyScrubbing: {
8884            key: "manual"
8885        },
8886        isInOtel: !1,
8887        visibility: "public",
8888        hasDynamicSuffix: !0,
8889        example: "flag.evaluation.is_new_ui=true",
8890        changelog: [
8891            {
8892                version: "0.1.0",
8893                prs: [
8894                    103
8895                ]
8896            }
8897        ]
8898    },
8899    fp: {
8900        brief: "The time it takes for the browser to render the first pixel on the screen",
8901        type: "double",
8902        applyScrubbing: {
8903            key: "manual"
8904        },
8905        isInOtel: !1,
8906        visibility: "public",
8907        example: 477.1926,
8908        deprecation: {
8909            replacement: "browser.web_vital.fp.value",
8910            reason: "This attribute is being deprecated in favor of browser.web_vital.fp.value"
8911        },
8912        aliases: [
8913            "browser.web_vital.fp.value"
8914        ],
8915        changelog: [
8916            {
8917                version: "0.5.0",
8918                prs: [
8919                    235
8920                ]
8921            }
8922        ]
8923    },
8924    "frames.delay": {
8925        brief: "The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).",
8926        type: "integer",
8927        applyScrubbing: {
8928            key: "manual"
8929        },
8930        isInOtel: !1,
8931        visibility: "public",
8932        example: 5,
8933        deprecation: {
8934            replacement: "app.vitals.frames.delay.value",
8935            reason: "Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes"
8936        },
8937        aliases: [
8938            "app.vitals.frames.delay.value"
8939        ],
8940        changelog: [
8941            {
8942                version: "0.5.0",
8943                prs: [
8944                    313
8945                ],
8946                description: "Deprecated in favor of app.vitals.frames.delay.value"
8947            },
8948            {
8949                version: "0.4.0",
8950                prs: [
8951                    228
8952                ]
8953            },
8954            {
8955                version: "0.0.0"
8956            }
8957        ]
8958    },
8959    "frames.frozen": {
8960        brief: "The number of frozen frames rendered during the lifetime of the span.",
8961        type: "integer",
8962        applyScrubbing: {
8963            key: "manual"
8964        },
8965        isInOtel: !1,
8966        visibility: "public",
8967        example: 3,
8968        deprecation: {
8969            replacement: "app.vitals.frames.frozen.count",
8970            reason: "Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes"
8971        },
8972        aliases: [
8973            "app.vitals.frames.frozen.count"
8974        ],
8975        changelog: [
8976            {
8977                version: "0.5.0",
8978                prs: [
8979                    313
8980                ],
8981                description: "Deprecated in favor of app.vitals.frames.frozen.count"
8982            },
8983            {
8984                version: "0.4.0",
8985                prs: [
8986                    228
8987                ]
8988            },
8989            {
8990                version: "0.0.0"
8991            }
8992        ]
8993    },
8994    frames_frozen_rate: {
8995        brief: "The rate of frozen frames, or `app_vitals.frames.frozen.count` divided by `app_vitals.frames.total.count`. This is computed by Relay.",
8996        type: "double",
8997        applyScrubbing: {
8998            key: "manual"
8999        },
9000        isInOtel: !1,
9001        visibility: "public",
9002        changelog: [
9003            {
9004                version: "0.7.0",
9005                prs: [
9006                    362
9007                ],
9008                description: "Added frames_frozen_rate attribute"
9009            }
9010        ]
9011    },
9012    "frames.slow": {
9013        brief: "The number of slow frames rendered during the lifetime of the span.",
9014        type: "integer",
9015        applyScrubbing: {
9016            key: "manual"
9017        },
9018        isInOtel: !1,
9019        visibility: "public",
9020        example: 1,
9021        deprecation: {
9022            replacement: "app.vitals.frames.slow.count",
9023            reason: "Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes"
9024        },
9025        aliases: [
9026            "app.vitals.frames.slow.count"
9027        ],
9028        changelog: [
9029            {
9030                version: "0.5.0",
9031                prs: [
9032                    313
9033                ],
9034                description: "Deprecated in favor of app.vitals.frames.slow.count"
9035            },
9036            {
9037                version: "0.4.0",
9038                prs: [
9039                    228
9040                ]
9041            },
9042            {
9043                version: "0.0.0"
9044            }
9045        ]
9046    },
9047    frames_slow_rate: {
9048        brief: "The rate of slow frames, or `app_vitals.frames.slow.count` divided by `app_vitals.frames.total.count`. This is computed by Relay.",
9049        type: "double",
9050        applyScrubbing: {
9051            key: "manual"
9052        },
9053        isInOtel: !1,
9054        visibility: "public",
9055        changelog: [
9056            {
9057                version: "0.7.0",
9058                prs: [
9059                    362
9060                ],
9061                description: "Added frames_slow_rate attribute"
9062            }
9063        ]
9064    },
9065    "frames.total": {
9066        brief: "The number of total frames rendered during the lifetime of the span.",
9067        type: "integer",
9068        applyScrubbing: {
9069            key: "manual"
9070        },
9071        isInOtel: !1,
9072        visibility: "public",
9073        example: 60,
9074        deprecation: {
9075            replacement: "app.vitals.frames.total.count",
9076            reason: "Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes"
9077        },
9078        aliases: [
9079            "app.vitals.frames.total.count"
9080        ],
9081        changelog: [
9082            {
9083                version: "0.5.0",
9084                prs: [
9085                    313
9086                ],
9087                description: "Deprecated in favor of app.vitals.frames.total.count"
9088            },
9089            {
9090                version: "0.4.0",
9091                prs: [
9092                    228
9093                ]
9094            },
9095            {
9096                version: "0.0.0"
9097            }
9098        ]
9099    },
9100    fs_error: {
9101        brief: "The error message of a file system error.",
9102        type: "string",
9103        applyScrubbing: {
9104            key: "manual"
9105        },
9106        isInOtel: !1,
9107        visibility: "public",
9108        example: "ENOENT: no such file or directory",
9109        deprecation: {
9110            replacement: "error.type",
9111            reason: "This attribute is not part of the OpenTelemetry specification and error.type fits much better."
9112        },
9113        changelog: [
9114            {
9115                version: "0.1.0",
9116                prs: [
9117                    61,
9118                    127
9119                ]
9120            },
9121            {
9122                version: "0.0.0"
9123            }
9124        ]
9125    },
9126    "gcp.function.context.event_id": {
9127        brief: "The event ID from the legacy GCP Cloud Function context (1st gen)",
9128        type: "string",
9129        applyScrubbing: {
9130            key: "manual"
9131        },
9132        isInOtel: !1,
9133        visibility: "public",
9134        example: "1234567890",
9135        changelog: [
9136            {
9137                version: "0.7.0",
9138                prs: [
9139                    371
9140                ],
9141                description: "Added gcp.function.context.event_id attribute"
9142            }
9143        ]
9144    },
9145    "gcp.function.context.event_type": {
9146        brief: "The type of the GCP Cloud Function event",
9147        type: "string",
9148        applyScrubbing: {
9149            key: "manual"
9150        },
9151        isInOtel: !1,
9152        visibility: "public",
9153        example: "google.pubsub.topic.publish",
9154        changelog: [
9155            {
9156                version: "0.7.0",
9157                prs: [
9158                    371
9159                ],
9160                description: "Added gcp.function.context.event_type attribute"
9161            }
9162        ]
9163    },
9164    "gcp.function.context.id": {
9165        brief: "The unique event ID from the GCP CloudEvents context (2nd gen Cloud Functions)",
9166        type: "string",
9167        applyScrubbing: {
9168            key: "manual"
9169        },
9170        isInOtel: !1,
9171        visibility: "public",
9172        example: "1234567890",
9173        changelog: [
9174            {
9175                version: "0.7.0",
9176                prs: [
9177                    371
9178                ],
9179                description: "Added gcp.function.context.id attribute"
9180            }
9181        ]
9182    },
9183    "gcp.function.context.resource": {
9184        brief: "The resource that triggered the GCP Cloud Function event",
9185        type: "string",
9186        applyScrubbing: {
9187            key: "manual"
9188        },
9189        isInOtel: !1,
9190        visibility: "public",
9191        example: "projects/my-project/topics/my-topic",
9192        changelog: [
9193            {
9194                version: "0.7.0",
9195                prs: [
9196                    371
9197                ],
9198                description: "Added gcp.function.context.resource attribute"
9199            }
9200        ]
9201    },
9202    "gcp.function.context.source": {
9203        brief: "The source of the GCP Cloud Function event",
9204        type: "string",
9205        applyScrubbing: {
9206            key: "manual"
9207        },
9208        isInOtel: !1,
9209        visibility: "public",
9210        example: "//pubsub.googleapis.com/projects/my-project/topics/my-topic",
9211        changelog: [
9212            {
9213                version: "0.7.0",
9214                prs: [
9215                    371
9216                ],
9217                description: "Added gcp.function.context.source attribute"
9218            }
9219        ]
9220    },
9221    "gcp.function.context.specversion": {
9222        brief: "The CloudEvents specification version of the GCP Cloud Function event",
9223        type: "string",
9224        applyScrubbing: {
9225            key: "manual"
9226        },
9227        isInOtel: !1,
9228        visibility: "public",
9229        example: "1.0",
9230        changelog: [
9231            {
9232                version: "0.7.0",
9233                prs: [
9234                    371
9235                ],
9236                description: "Added gcp.function.context.specversion attribute"
9237            }
9238        ]
9239    },
9240    "gcp.function.context.time": {
9241        brief: "The timestamp of the GCP Cloud Function event",
9242        type: "string",
9243        applyScrubbing: {
9244            key: "manual"
9245        },
9246        isInOtel: !1,
9247        visibility: "public",
9248        example: "2024-01-01T00:00:00.000Z",
9249        changelog: [
9250            {
9251                version: "0.7.0",
9252                prs: [
9253                    371
9254                ],
9255                description: "Added gcp.function.context.time attribute"
9256            }
9257        ]
9258    },
9259    "gcp.function.context.timestamp": {
9260        brief: "The legacy timestamp of the GCP Cloud Function event",
9261        type: "string",
9262        applyScrubbing: {
9263            key: "manual"
9264        },
9265        isInOtel: !1,
9266        visibility: "public",
9267        example: "2024-01-01T00:00:00.000Z",
9268        changelog: [
9269            {
9270                version: "0.7.0",
9271                prs: [
9272                    371
9273                ],
9274                description: "Added gcp.function.context.timestamp attribute"
9275            }
9276        ]
9277    },
9278    "gcp.function.context.type": {
9279        brief: "The type of the GCP Cloud Function event context",
9280        type: "string",
9281        applyScrubbing: {
9282            key: "manual"
9283        },
9284        isInOtel: !1,
9285        visibility: "public",
9286        example: "cloud_functions.context",
9287        changelog: [
9288            {
9289                version: "0.7.0",
9290                prs: [
9291                    371
9292                ],
9293                description: "Added gcp.function.context.type attribute"
9294            }
9295        ]
9296    },
9297    "gcp.project.id": {
9298        brief: "The ID of the project in GCP that this resource is associated with",
9299        type: "string",
9300        applyScrubbing: {
9301            key: "manual"
9302        },
9303        isInOtel: !1,
9304        visibility: "public",
9305        example: "my-project-123",
9306        changelog: [
9307            {
9308                version: "0.11.0",
9309                prs: [
9310                    403
9311                ]
9312            }
9313        ]
9314    },
9315    "gen_ai.agent.name": {
9316        brief: "The name of the agent being used.",
9317        type: "string",
9318        applyScrubbing: {
9319            key: "manual"
9320        },
9321        isInOtel: !0,
9322        visibility: "public",
9323        example: "ResearchAssistant",
9324        changelog: [
9325            {
9326                version: "0.1.0",
9327                prs: [
9328                    62,
9329                    127
9330                ]
9331            }
9332        ]
9333    },
9334    "gen_ai.context.utilization": {
9335        brief: "The fraction of the model context window utilized by this generation.",
9336        type: "double",
9337        applyScrubbing: {
9338            key: "manual"
9339        },
9340        isInOtel: !1,
9341        visibility: "public",
9342        example: .75,
9343        changelog: [
9344            {
9345                version: "0.5.0",
9346                prs: [
9347                    315
9348                ],
9349                description: "Added gen_ai.context.utilization attribute"
9350            }
9351        ]
9352    },
9353    "gen_ai.context.window_size": {
9354        brief: "The maximum context window size supported by the model for this generation.",
9355        type: "integer",
9356        applyScrubbing: {
9357            key: "manual"
9358        },
9359        isInOtel: !1,
9360        visibility: "public",
9361        example: 128e3,
9362        changelog: [
9363            {
9364                version: "0.5.0",
9365                prs: [
9366                    315
9367                ],
9368                description: "Added gen_ai.context.window_size attribute"
9369            }
9370        ]
9371    },
9372    "gen_ai.conversation.id": {
9373        brief: "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.",
9374        type: "string",
9375        applyScrubbing: {
9376            key: "manual"
9377        },
9378        isInOtel: !0,
9379        visibility: "public",
9380        example: "conv_5j66UpCpwteGg4YSxUnt7lPY",
9381        changelog: [
9382            {
9383                version: "0.4.0",
9384                prs: [
9385                    250
9386                ]
9387            }
9388        ]
9389    },
9390    "gen_ai.cost.cache_creation.input_tokens": {
9391        brief: "The cost of input tokens written to cache in USD.",
9392        type: "double",
9393        applyScrubbing: {
9394            key: "manual"
9395        },
9396        isInOtel: !1,
9397        visibility: "public",
9398        example: 12.34,
9399        changelog: [
9400            {
9401                version: "0.16.0",
9402                description: "Added gen_ai.cost.cache_creation.input_tokens attribute"
9403            }
9404        ],
9405        additionalContext: [
9406            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
9407            "Despite the name 'cost.cache_creation.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.cache_creation.input_tokens.",
9408            "This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens \u2014 it is already included."
9409        ]
9410    },
9411    "gen_ai.cost.cache_read.input_tokens": {
9412        brief: "The cost of cached input tokens in USD.",
9413        type: "double",
9414        applyScrubbing: {
9415            key: "manual"
9416        },
9417        isInOtel: !1,
9418        visibility: "public",
9419        example: 12.34,
9420        changelog: [
9421            {
9422                version: "0.16.0",
9423                description: "Added gen_ai.cost.cache_read.input_tokens attribute"
9424            }
9425        ],
9426        additionalContext: [
9427            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
9428            "Despite the name 'cost.cache_read.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.cache_read.input_tokens.",
9429            "This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens \u2014 it is already included."
9430        ]
9431    },
9432    "gen_ai.cost.input_tokens": {
9433        brief: "The total cost of all input tokens in USD (includes cached and cache 
9433creation tokens).",
9434        type: "double",
9435        applyScrubbing: {
9436            key: "manual"
9437        },
9438        isInOtel: !1,
9439        visibility: "public",
9440        example: 123.45,
9441        changelog: [
9442            {
9443                version: "0.9.0",
9444                prs: [
9445                    397
9446                ],
9447                description: "Add additional_context"
9448            },
9449            {
9450                version: "0.4.0",
9451                prs: [
9452                    228
9453                ]
9454            },
9455            {
9456                version: "0.1.0",
9457                prs: [
9458                    112
9459                ]
9460            }
9461        ],
9462        additionalContext: [
9463            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
9464            "Despite the name 'cost.input_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.input_tokens.",
9465            "This is the total cost of all input tokens, including cached and cache creation tokens at their respective rates. For the cached portion, see gen_ai.cost.cache_read.input_tokens. For the cache creation portion, see gen_ai.cost.cache_creation.input_tokens."
9466        ]
9467    },
9468    "gen_ai.cost.output_tokens": {
9469        brief: "The total cost of all output tokens in USD (includes reasoning tokens).",
9470        type: "double",
9471        applyScrubbing: {
9472            key: "manual"
9473        },
9474        isInOtel: !1,
9475        visibility: "public",
9476        example: 123.45,
9477        changelog: [
9478            {
9479                version: "0.9.0",
9480                prs: [
9481                    397
9482                ],
9483                description: "Add additional_context"
9484            },
9485            {
9486                version: "0.4.0",
9487                prs: [
9488                    228
9489                ]
9490            },
9491            {
9492                version: "0.1.0",
9493                prs: [
9494                    112
9495                ]
9496            }
9497        ],
9498        additionalContext: [
9499            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
9500            "Despite the name 'cost.output_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.output_tokens.",
9501            "This is the total cost of all output tokens, including reasoning tokens at their respective rate. For the reasoning portion, see gen_ai.cost.reasoning.output_tokens."
9502        ]
9503    },
9504    "gen_ai.cost.reasoning.output_tokens": {
9505        brief: "The cost of reasoning output tokens in USD.",
9506        type: "double",
9507        applyScrubbing: {
9508            key: "manual"
9509        },
9510        isInOtel: !1,
9511        visibility: "public",
9512        example: 12.34,
9513        changelog: [
9514            {
9515                version: "0.16.0",
9516                description: "Added gen_ai.cost.reasoning.output_tokens attribute"
9517            }
9518        ],
9519        additionalContext: [
9520            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
9521            "Despite the name 'cost.reasoning.output_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.reasoning.output_tokens.",
9522            "This is a subset of gen_ai.cost.output_tokens, not an independent cost. Do not sum this with gen_ai.cost.output_tokens \u2014 it is already included."
9523        ]
9524    },
9525    "gen_ai.cost.total_tokens": {
9526        brief: "The total cost for the tokens used.",
9527        type: "double",
9528        applyScrubbing: {
9529            key: "manual"
9530        },
9531        isInOtel: !1,
9532        visibility: "public",
9533        example: 12.34,
9534        aliases: [
9535            "ai.total_cost"
9536        ],
9537        changelog: [
9538            {
9539                version: "0.9.0",
9540                prs: [
9541                    397
9542                ],
9543                description: "Add additional_context"
9544            },
9545            {
9546                version: "0.5.0",
9547                prs: [
9548                    264
9549                ]
9550            },
9551            {
9552                version: "0.4.0",
9553                prs: [
9554                    228
9555                ]
9556            },
9557            {
9558                version: "0.1.0",
9559                prs: [
9560                    126
9561                ]
9562            }
9563        ],
9564        additionalContext: [
9565            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to calculate total cost, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
9566            "Despite the name 'cost.total_tokens', this value is cost in USD, not a token count. For token counts, use gen_ai.usage.total_tokens."
9567        ]
9568    },
9569    "gen_ai.embeddings.input": {
9570        brief: "The input to the embeddings model.",
9571        type: "string",
9572        applyScrubbing: {
9573            key: "manual"
9574        },
9575        isInOtel: !1,
9576        visibility: "public",
9577        example: "What's the weather in Paris?",
9578        changelog: [
9579            {
9580                version: "0.3.1",
9581                prs: [
9582                    195
9583                ]
9584            }
9585        ]
9586    },
9587    "gen_ai.function_id": {
9588        brief: "Framework-specific tracing label for the execution of a function or other unit of execution in a generative AI system.",
9589        type: "string",
9590        applyScrubbing: {
9591            key: "manual"
9592        },
9593        isInOtel: !1,
9594        visibility: "public",
9595        example: "my-awesome-function",
9596        changelog: [
9597            {
9598                version: "0.5.0",
9599                prs: [
9600                    308
9601                ],
9602                description: "Added gen_ai.function_id attribute"
9603            }
9604        ]
9605    },
9606    "gen_ai.input.messages": {
9607        brief: 'The messages passed to the model. It has to be a stringified version of an array of objects. The `role` attribute of each object must be `"user"`, `"assistant"`, `"tool"`, or `"system"`. For messages of the role `"tool"`, the `content` can be a string or an arbitrary object with information about the tool call. For other messages the `content` can be either a string or a list of objects in the format `{type: "text", text:"..."}`.',
9608        type: "string",
9609        applyScrubbing: {
9610            key: "manual"
9611        },
9612        isInOtel: !0,
9613        visibility: "public",
9614        example: '[{"role": "user", "parts": [{"type": "text", "content": "Weather in Paris?"}]}, {"role": "assistant", "parts": [{"type": "tool_call", "id": "call_VSPygqKTWdrhaFErNvMV18Yl", "n
9614ame": "get_weather", "arguments": {"location": "Paris"}}]}, {"role": "tool", "parts": [{"type": "tool_call_response", "id": "call_VSPygqKTWdrhaFErNvMV18Yl", "result": "rainy, 57\xB0F"}]}]',
9615        aliases: [
9616            "ai.texts"
9617        ],
9618        changelog: [
9619            {
9620                version: "0.5.0",
9621                prs: [
9622                    264
9623                ]
9624            },
9625            {
9626                version: "0.4.0",
9627                prs: [
9628                    221
9629                ]
9630            }
9631        ]
9632    },
9633    "gen_ai.operation.name": {
9634        brief: "The name of the operation being performed. It has the following list of well-known values: 'chat', 'create_agent', 'embeddings', 'execute_tool', 'generate_content', 'invoke_agent', 'text_completion'. If one of them applies, then that value MUST be used. Otherwise a custom value MAY be used.",
9635        type: "string",
9636        applyScrubbing: {
9637            key: "manual"
9638        },
9639        isInOtel: !0,
9640        visibility: "public",
9641        example: "chat",
9642        changelog: [
9643            {
9644                version: "0.4.0",
9645                prs: [
9646                    225
9647                ]
9648            },
9649            {
9650                version: "0.1.0",
9651                prs: [
9652                    62,
9653                    127
9654                ]
9655            }
9656        ]
9657    },
9658    "gen_ai.operation.type": {
9659        brief: "The type of AI operation. Must be one of 'agent' (invoke_agent and create_agent spans), 'ai_client' (any LLM call), 'tool' 
9659(execute_tool spans), 'handoff' (handoff spans), 'other' (input and output processors, skill loading, guardrails etc.) . Added during ingestion based on span.op and gen_ai.operation.type. Used to filter and aggregate data in the UI",
9660        type: "string",
9661        applyScrubbing: {
9662            key: "manual"
9663        },
9664        isInOtel: !1,
9665        visibility: "public",
9666        example: "tool",
9667        changelog: [
9668            {
9669                version: "0.4.0",
9670                prs: [
9671                    257
9672                ]
9673            },
9674            {
9675                version: "0.1.0",
9676                prs: [
9677                    113,
9678                    127
9679                ]
9680            }
9681        ]
9682    },
9683    "gen_ai.output.messages": {
9684        brief: "The model's response messages. It has to be a stringified version of an array of message objects, which can include text responses and tool calls.",
9685        type: "string",
9686        applyScrubbing: {
9687            key: "manual"
9688        },
9689        isInOtel: !0,
9690        visibility: "public",
9691        example: '[{"role": "assistant", "parts": [{"type": "text", "content": "The weather in Paris is currently rainy with a temperature of 57\xB0F."}], "finish_reason": "stop"}]',
9692        changelog: [
9693            {
9694                version: "0.4.0",
9695                prs: [
9696                    221
9697                ]
9698            }
9699        ]
9700    },
9701    "gen_ai.pipeline.name": {
9702        brief: "Name of the AI pipeline or chain being executed.",
9703        type: "string",
9704        applyScrubbing: {
9705            key: "manual"
9706        },
9707        isInOtel: !1,
9708        visibility: "public",
9709        example: "Autofix Pipeline",
9710        aliases: [
9711            "ai.pipeline.name"
9712        ],
9713        changelog: [
9714            {
9715                version: "0.1.0",
9716                prs: [
9717                    76,
9718                    127
9719                ]
9720            }
9721        ]
9722    },
9723    "gen_ai.prompt": {
9724        brief: "The input messages sent to the model",
9725        type: "string",
9726        applyScrubbing: {
9727            key: "manual"
9728        },
9729        isInOtel: !0,
9730        visibility: "public",
9731        example: '[{"role": "user", "message": "hello"}]',
9732        deprecation: {
9733            reason: "Deprecated from OTEL, use gen_ai.input.messages with the new format instead."
9734        },
9735        changelog: [
9736            {
9737                version: "0.1.0",
9738                prs: [
9739                    74,
9740                    108,
9741                    119
9742                ]
9743            },
9744            {
9745                version: "0.0.0"
9746            }
9747        ]
9748    },
9749    "gen_ai.prompt.name": {
9750        brief: "The name of the prompt that uniquely identifies it.",
9751        type: "string",
9752        applyScrubbing: {
9753            key: "manual",
9754            reason: "Prompt names may reveal user behavior patterns or sensitive operations"
9755        },
9756        isInOtel: !0,
9757        visibility: "public",
9758        example: "summarize_text",
9759        aliases: [
9760            "mcp.prompt.name"
9761        ],
9762        changelog: [
9763            {
9764                version: "0.12.0",
9765                prs: [
9766                    420
9767                ],
9768                description: "Added gen_ai.prompt.name attribute"
9769            }
9770        ]
9771    },
9772    "gen_ai.provider.name": {
9773        brief: "The Generative AI provider as identified by the client or server instrumentation.",
9774        type: "string",
9775        applyScrubbing: {
9776            key: "manual"
9777        },
9778        isInOtel: !0,
9779        visibility: "public",
9780        example: "openai",
9781        aliases: [
9782            "ai.model.provider",
9783            "gen_ai.system"
9784        ],
9785        changelog: [
9786            {
9787                version: "0.4.0",
9788                prs: [
9789                    253
9790                ]
9791            }
9792        ]
9793    },
9794    "gen_ai.request.available_tools": {
9795        brief: "The available tools for the model. It has to be a stringified version of an array of objects.",
9796        type: "string",
9797        applyScrubbing: {
9798            key: "manual"
9799        },
9800        isInOtel: !1,
9801        visibility: "public",
9802        example: '[{"name": "get_weather", "description": "Get the weather for a given location"}, {"name": "get_news", "description": "Get the news for a given topic"}]',
9803        deprecation: {
9804            replacement: "gen_ai.tool.definitions"
9805        },
9806        changelog: [
9807            {
9808                version: "0.4.0",
9809                prs: [
9810                    221
9811                ]
9812            },
9813            {
9814                version: "0.1.0",
9815                prs: [
9816                    63,
9817                    127
9818                ]
9819            }
9820        ]
9821    },
9822    "gen_ai.request.frequency_penalty": {
9823        brief: "Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is a
9823pplied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.",
9824        type: "double",
9825        applyScrubbing: {
9826            key: "manual"
9827        },
9828        isInOtel: !0,
9829        visibility: "public",
9830        example: .5,
9831        aliases: [
9832            "ai.frequency_penalty"
9833        ],
9834        changelog: [
9835            {
9836                version: "0.4.0",
9837                prs: [
9838                    228
9839                ]
9840            },
9841            {
9842                version: "0.1.0",
9843                prs: [
9844                    57
9845                ]
9846            }
9847        ]
9848    },
9849    "gen_ai.request.max_tokens": {
9850        brief: "The maximum number of tokens to generate in the response.",
9851        type: "integer",
9852        applyScrubbing: {
9853            key: "manual"
9854        },
9855        isInOtel: !0,
9856        visibility: "public",
9857        example: 2048,
9858        changelog: [
9859            {
9860                version: "0.4.0",
9861                prs: [
9862                    228
9863                ]
9864            },
9865            {
9866                version: "0.1.0",
9867                prs: [
9868                    62
9869                ]
9870            }
9871        ]
9872    },
9873    "gen_ai.request.messages": {
9874        brief: 'The messages passed to the model. It has to be a stringified version of an array of objects. The `role` attribute of each object must be `"user"`, `"assistant"`, `"tool"`, or `"system"`. For messages of the role `"tool"`, the `content` can be a string or an arbitrary object with information about the tool call. For other messages the `content` can be either a string or a list of objects in the format `{type: "text", text:"..."}`.',
9875        type: "string",
9876        applyScrubbing: {
9877            key: "manual"
9878        },
9879        isInOtel: !1,
9880        visibility: "public",
9881        example: '[{"role": "system", "content": "Generate a random number."}, {"role": "user", "content": [{"text": "Generate a random number between 0 and 10.", "type": "text"}]}, {"role": "tool", "content": {"toolCallId": "1", "toolName": "Weather", "output": "rainy"}}]',
9882        deprecation: {
9883            replacement: "gen_ai.input.messages"
9884        },
9885        aliases: [
9886            "ai.input_messages"
9887        ],
9888        changelog: [
9889            {
9890                version: "0.4.0",
9891                prs: [
9892                    221
9893                ]
9894            },
9895            {
9896                version: "0.1.0",
9897                prs: [
9898                    63,
9899                    74,
9900                    108,
9901                    119,
9902                    122
9903                ]
9904            }
9905        ]
9906    },
9907    "gen_ai.request.model": {
9908        brief: "The model identifier being used for the request.",
9909        type: "string",
9910        applyScrubbing: {
9911            key: "manual"
9912        },
9913        isInOtel: !0,
9914        visibility: "public",
9915        example: "gpt-4-turbo-preview",
9916        changelog: [
9917            {
9918                version: "0.1.0",
9919                prs: [
9920                    62,
9921                    127
9922                ]
9923            }
9924        ]
9925    },
9926    "gen_ai.request.presence_penalty": {
9927        brief: "Used to reduce repetitiveness of generated tokens. Similar to frequency_penalty, except that this penalty is applied equally to all tokens that have already appeared, regardless of their exact frequencies.",
9928        type: "double",
9929        applyScrubbing: {
9930            key: "manual"
9931        },
9932        isInOtel: !0,
9933        visibility: "public",
9934        example: .5,
9935        aliases: [
9936            "ai.presence_penalty"
9937        ],
9938        changelog: [
9939            {
9940                version: "0.4.0",
9941                prs: [
9942                    228
9943                ]
9944            },
9945            {
9946                version: "0.1.0",
9947                prs: [
9948                    57
9949                ]
9950            }
9951        ]
9952    },
9953    "gen_ai.request.reasoning_effort": {
9954        brief: "Constrains the effort on reasoning for reasoning models. Supported values vary by provider.",
9955        type: "string",
9956        applyScrubbing: {
9957            key: "manual"
9958        },
9959        isInOtel: !1,
9960        visibility: "public",
9961        example: "high",
9962        changelog: [
9963            {
9964                version: "0.13.0",
9965                prs: [
9966                    334
9967                ],
9968                description: "Added gen_ai.request.reasoning_effort attribute"
9969            }
9970        ]
9971    },
9972    "gen_ai.request.seed": {
9973        brief: "The seed, ideally models given the same seed and same other parameters will produce the exact same output.",
9974        type: "string",
9975        applyScrubbing: {
9976            key: "manual"
9977        },
9978        isInOtel: !0,
9979        visibility: "public",
9980        example: "1234567890",
9981        aliases: [
9982            "ai.seed"
9983        ],
9984        changelog: [
9985            {
9986                version: "0.1.0",
9987                prs: [
9988                    57,
9989                    127
9990                ]
9991            }
9992        ]
9993    },
9994    "gen_ai.request.stop_sequences": {
9995        brief: "List of sequences that the model will use to stop generating further tokens.",
9996        type: "string[]",
9997        applyScrubbing: {
9998            key: "manual"
9999        },
10000        isInOtel: !0,
10001        visibility: "public",
10002        example: [
10003            "forest",
10004            "lived"
10005        ],
10006        changelog: [
10007            {
10008                version: "0.16.0",
10009                prs: [
10010                    482
10011                ],
10012                description: "Added gen_ai.request.stop_sequences attribute"
10013            }
10014        ]
10015    },
10016    "gen_ai.request.temperature": {
10017        brief: "For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.",
10018        type: "double",
10019        applyScrubbing: {
10020            key: "manual"
10021        },
10022        isInOtel: !0,
10023        visibility: "public",
10024        example: .1,
10025        aliases: [
10026            "ai.temperature"
10027        ],
10028        changelog: [
10029            {
10030                version: "0.4.0",
10031                prs: [
10032                    228
10033                ]
10034            },
10035            {
10036                version: "0.1.0",
10037                prs: [
10038                    57
10039                ]
10040            }
10041        ]
10042    },
10043    "gen_ai.request.top_k": {
10044        brief: "Limits the model to only consider the K most likely next tokens, where K is an integer (e.g., top_k=20 means only the 20 highest probability tokens are considered).",
10045        type: "integer",
10046        applyScrubbing: {
10047            key: "manual"
10048        },
10049        isInOtel: !0,
10050        visibility: "public",
10051        example: 35,
10052        aliases: [
10053            "ai.top_k"
10054        ],
10055        changelog: [
10056            {
10057                version: "0.4.0",
10058                prs: [
10059                    228
10060                ]
10061            },
10062            {
10063                version: "0.1.0",
10064                prs: [
10065                    57
10066                ]
10067            }
10068        ]
10069    },
10070    "gen_ai.request.top_p": {
10071        brief: "Limits the model to only consider tokens whose cumulative probability mass adds up to p, where p is a float between 0 and 1 (e.g., top_p=0.7 means only tokens that sum up to 70% of the probability mass are considered).",
10072        type: "double",
10073        applyScrubbing: {
10074            key: "manual"
10075        },
10076        isInOtel: !0,
10077        visibility: "public",
10078        example: .7,
10079        aliases: [
10080            "ai.top_p"
10081        ],
10082        changelog: [
10083            {
10084                version: "0.4.0",
10085                prs: [
10086                    228
10087                ]
10088            },
10089            {
10090                version: "0.1.0",
10091                prs: [
10092                    57
10093                ]
10094            }
10095        ]
10096    },
10097    "gen_ai.response.finish_reasons": {
10098        brief: "The reason why the model stopped generating.",
10099        type: "string",
10100        applyScrubbing: {
10101            key: "manual"
10102        },
10103        isInOtel: !0,
10104        visibility: "public",
10105        example: "COMPLETE",
10106        aliases: [
10107            "ai.finish_reason"
10108        ],
10109        changelog: [
10110            {
10111                version: "0.1.0",
10112                prs: [
10113                    57,
10114                    127
10115                ]
10116            }
10117        ]
10118    },
10119    "gen_ai.response.id": {
10120        brief: "Unique identifier for the completion.",
10121        type: "string",
10122        applyScrubbing: {
10123            key: "manual"
10124        },
10125        isInOtel: !0,
10126        visibility: "public",
10127        example: "gen_123abc",
10128        aliases: [
10129            "ai.generation_id"
10130        ],
10131        changelog: [
10132            {
10133                version: "0.1.0",
10134                prs: [
10135                    57,
10136                    127
10137                ]
10138            }
10139        ]
10140    },
10141    "gen_ai.response.model": {
10142        brief: "The vendor-specific ID of the model used.",
10143        type: "string",
10144        applyScrubbing: {
10145            key: "manual"
10146        },
10147        isInOtel: !0,
10148        visibility: "public",
10149        example: "gpt-4",
10150        aliases: [
10151            "ai.model_id"
10152        ],
10153        changelog: [
10154            {
10155                version: "0.1.0",
10156                prs: [
10157                    127
10158                ]
10159            },
10160            {
10161                version: "0.0.0"
10162            }
10163        ]
10164    },
10165    "gen_ai.response.streaming": {
10166        brief: "Whether or not the AI model call's response was streamed back asynchronously",
10167        type: "boolean",
10168        applyScrubbing: {
10169            key: "manual"
10170        },
10171        isInOtel: !1,
10172        visibility: "public",
10173        example: !0,
10174        aliases: [
10175            "ai.streaming"
10176        ],
10177        changelog: [
10178            {
10179                version: "0.1.0",
10180                prs: [
10181                    76
10182                ]
10183            }
10184        ]
10185    },
10186    "gen_ai.response.text": {
10187        brief: "The model's response text messages. It has to be a stringified version of an array of response text messages.",
10188        type: "string",
10189        applyScrubbing: {
10190            key: "manual"
10191        },
10192        isInOtel: !1,
10193        visibility: "public",
10194        example: '["The weather in Paris is rainy and overcast, with temperatures around 57\xB0F", "The weather in London is sunny and warm, with temperatures around 65\xB0F"]',
10195        deprecation: {
10196            replacement: "gen_ai.output.messages"
10197        },
10198        changelog: [
10199            {
10200                version: "0.4.0",
10201                prs: [
10202                    221
10203                ]
10204            },
10205            {
10206                version: "0.1.0",
10207                prs: [
10208                    63,
10209                    74
10210                ]
10211            }
10212        ]
10213    },
10214    "gen_ai.response.time_to_first_chunk": {
10215        brief: "Time in seconds when the first response content chunk arrived in streaming responses.",
10216        type: "double",
10217        applyScrubbing: {
10218            key: "manual"
10219        },
10220        isInOtel: !0,
10221        visibility: "public",
10222        example: .6853435,
10223        aliases: [
10224            "gen_ai.response.time_to_first_token"
10225        ],
10226        changelog: [
10227            {
10228                version: "0.11.0",
10229                prs: [
10230                    418
10231                ],
10232                description: "Added gen_ai.response.time_to_first_chunk attribute"
10233            }
10234        ]
10235    },
10236    "gen_ai.response.time_to_first_token": {
10237        brief: "Time in seconds when the first response content chunk arrived in streaming responses.",
10238        type: "double",
10239        applyScrubbing: {
10240            key: "manual"
10241        },
10242        isInOtel: !1,
10243        visibility: "public",
10244        example: .6853435,
10245        deprecation: {
10246            replacement: "gen_ai.response.time_to_first_chunk"
10247        },
10248        aliases: [
10249            "gen_ai.response.time_to_first_chunk"
10250        ],
10251        changelog: [
10252            {
10253                version: "0.11.0",
10254                prs: [
10255                    418
10256                ],
10257                description: "Deprecate in favor of gen_ai.response.time_to_first_chunk"
10258            },
10259            {
10260                version: "0.4.0",
10261                prs: [
10262                    227
10263                ]
10264            }
10265        ]
10266    },
10267    "gen_ai.response.tokens_per_second": {
10268        brief: "The total output tokens per seconds throughput",
10269        type: "double",
10270        applyScrubbing: {
10271            key: "manual"
10272        },
10273        isInOtel: !1,
10274        visibility: "public",
10275        example: 12345.67,
10276        changelog: [
10277            {
10278                version: "0.4.0",
10279                prs: [
10280                    228
10281                ]
10282            },
10283            {
10284                version: "0.1.0",
10285                prs: [
10286                    66
10287                ]
10288            }
10289        ]
10290    },
10291    "gen_ai.response.tool_calls": {
10292        brief: "The tool calls in the model's response. It has to be a stringified version of an array of objects.",
10293        type: "string",
10294        applyScrubbing: {
10295            key: "manual"
10296        },
10297        isInOtel: !1,
10298        visibility: "public",
10299        example: '[{"name": "get_weather", "arguments": {"location": "Paris"}}]',
10300        deprecation: {
10301            replacement: "gen_ai.output.messages"
10302        },
10303        changelog: [
10304            {
10305                version: "0.4.0",
10306                prs: [
10307                    221
10308                ]
10309            },
10310            {
10311                version: "0.1.0",
10312                prs: [
10313                    63,
10314                    74
10315                ]
10316            }
10317        ]
10318    },
10319    "gen_ai.system": {
10320        brief: "The provider of the model.",
10321        type: "string",
10322        applyScrubbing: {
10323            key: "manual"
10324        },
10325        isInOtel: !0,
10326        visibility: "public",
10327        example: "openai",
10328        deprecation: {
10329            replacement: "gen_ai.provider.name"
10330        },
10331        aliases: [
10332            "ai.model.provider",
10333            "gen_ai.provider.name"
10334        ],
10335        changelog: [
10336            {
10337                version: "0.4.0",
10338                prs: [
10339                    253
10340                ]
10341            },
10342            {
10343                version: "0.1.0",
10344                prs: [
10345                    57,
10346                    127
10347                ]
10348            }
10349        ]
10350    },
10351    "gen_ai.system_instructions": {
10352        brief: "The system instructions passed to the model.",
10353        type: "string",
10354        applyScrubbing: {
10355            key: "manual"
10356        },
10357        isInOtel: !0,
10358        visibility: "public",
10359        example: "You are a helpful assistant",
10360        aliases: [
10361            "ai.preamble"
10362        ],
10363        changelog: [
10364            {
10365                version: "0.5.0",
10366                prs: [
10367                    264
10368                ]
10369            },
10370            {
10371                version: "0.4.0",
10372                prs: [
10373                    221
10374                ]
10375            }
10376        ]
10377    },
10378    "gen_ai.system.message": {
10379        brief: "The system instructions passed to the model.",
10380        type: "string",
10381        applyScrubbing: {
10382            key: "auto"
10383        },
10384        isInOtel: !1,
10385        visibility: "public",
10386        example: "You are a helpful assistant",
10387        deprecation: {
10388            replacement: "gen_ai.system_instructions"
10389        },
10390        changelog: [
10391            {
10392                version: "0.4.0",
10393                prs: [
10394                    221
10395                ]
10396            },
10397            {
10398                version: "0.1.0",
10399                prs: [
10400                    62
10401                ]
10402            }
10403        ]
10404    },
10405    "gen_ai.tool.call.arguments": {
10406        brief: "The arguments of the tool call. It has to be a stringified version of the arguments to the tool.",
10407        type: "string",
10408        applyScrubbing: {
10409            key: "manual"
10410        },
10411        isInOtel: !0,
10412        visibility: "public",
10413        example: '{"location": "Paris"}',
10414        aliases: [
10415            "gen_ai.tool.input"
10416        ],
10417        changelog: [
10418            {
10419                version: "0.5.0",
10420                prs: [
10421                    265
10422                ]
10423            },
10424            {
10425                version: "0.4.0",
10426                prs: [
10427                    221
10428                ]
10429            }
10430        ]
10431    },
10432    "gen_ai.tool.call.result": {
10433        brief: "The result of the tool call. It has to be a stringified version of the result of the tool.",
10434        type: "string",
10435        applyScrubbing: {
10436            key: "manual"
10437        },
10438        isInOtel: !0,
10439        visibility: "public",
10440        example: "rainy, 57\xB0F",
10441        aliases: [
10442            "gen_ai.tool.output",
10443            "gen_ai.tool.message",
10444            "mcp.tool.result.content"
10445        ],
10446        changelog: [
10447            {
10448                version: "0.5.0",
10449                prs: [
10450                    265
10451                ]
10452            },
10453            {
10454                version: "0.4.0",
10455                prs: [
10456                    221
10457                ]
10458            }
10459        ]
10460    },
10461    "gen_ai.tool.definitions": {
10462        brief: "The list of source system tool definitions available to the GenAI agent or model.",
10463        type: "string",
10464        applyScrubbing: {
10465            key: "manual"
10466        },
10467        isInOtel: !0,
10468        visibility: "public",
10469        example: '[{"type": "function", "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "The city and state, e.g. San Francisco, CA"}, "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}}, "required": ["location", "unit"]}}]',
10470        changelog: [
10471            {
10472                version: "0.4.0",
10473                prs: [
10474                    221
10475                ]
10476            }
10477        ]
10478    },
10479    "gen_ai.tool.description": {
10480        brief: "The description of the tool being used.",
10481        type: "string",
10482        applyScrubbing: {
10483            key: "manual"
10484        },
10485        isInOtel: !0,
10486        visibility: "public",
10487        example: "Searches the web for current information about a to
10487pic",
10488        changelog: [
10489            {
10490                version: "0.1.0",
10491                prs: [
10492                    62,
10493                    127
10494                ]
10495            }
10496        ]
10497    },
10498    "gen_ai.tool.input": {
10499        brief: "The input of the tool being used. It has to be a stringified version of the input to the tool.",
10500        type: "string",
10501        applyScrubbing: {
10502            key: "manual"
10503        },
10504        isInOtel: !1,
10505        visibility: "public",
10506        example: '{"location": "Paris"}',
10507        deprecation: {
10508            replacement: "gen_ai.tool.call.arguments"
10509        },
10510        aliases: [
10511            "gen_ai.tool.call.arguments"
10512        ],
10513        changelog: [
10514            {
10515                version: "0.5.0",
10516                prs: [
10517                    265
10518                ]
10519            },
10520            {
10521                version: "0.1.0",
10522                prs: [
10523                    63,
10524                    74
10525                ]
10526            }
10527        ]
10528    },
10529    "gen_ai.tool.message": {
10530        brief: "The response from a tool or function call passed to the model.",
10531        type: "string",
10532        applyScrubbing: {
10533            key: "auto"
10534        },
10535        isInOtel: !1,
10536        visibility: "public",
10537        example: "rainy, 57\xB0F",
10538        deprecation: {
10539            replacement: "gen_ai.tool.call.result"
10540        },
10541        aliases: [
10542            "gen_ai.tool.call.result",
10543            "gen_ai.tool.output",
10544            "mcp.tool.result.content"
10545        ],
10546        changelog: [
10547            {
10548                version: "0.5.0",
10549                prs: [
10550                    265
10551                ]
10552            },
10553            {
10554                version: "0.1.0",
10555                prs: [
10556                    62
10557                ]
10558            }
10559        ]
10560    },
10561    "gen_ai.tool.name": {
10562        brief: "Name of the tool utilized by the agent.",
10563        type: "string",
10564        applyScrubbing: {
10565            key: "manual"
10566        },
10567        isInOtel: !0,
10568        visibility: "public",
10569        example: "Flights",
10570        aliases: [
10571            "ai.function_call",
10572            "mcp.tool.name"
10573        ],
10574        changelog: [
10575            {
10576                version: "0.1.0",
10577                prs: [
10578                    57,
10579                    127
10580                ]
10581            }
10582        ]
10583    },
10584    "gen_ai.tool.output": {
10585        brief: "The output of the tool being used. It has to be a stringified version of the output of the tool.",
10586        type: "string",
10587        applyScrubbing: {
10588            key: "manual"
10589        },
10590        isInOtel: !1,
10591        visibility: "public",
10592        example: "rainy, 57\xB0F",
10593        deprecation: {
10594            replacement: "gen_ai.tool.call.result"
10595        },
10596        aliases: [
10597            "gen_ai.tool.call.result",
10598            "gen_ai.tool.message",
10599            "mcp.tool.result.content"
10600        ],
10601        changelog: [
10602            {
10603                version: "0.5.0",
10604                prs: [
10605                    265
10606                ]
10607            },
10608            {
10609                version: "0.1.0",
10610                prs: [
10611                    63,
10612                    74
10613                ]
10614            }
10615        ]
10616    },
10617    "gen_ai.tool.type": {
10618        brief: "The type of tool being used.",
10619        type: "string",
10620        applyScrubbing: {
10621            key: "manual"
10622        },
10623        isInOtel: !0,
10624        visibility: "public",
10625        example: "function",
10626        deprecation: {
10627            reason: "The gen_ai.tool.type attribute is deprecated and should no longer be set."
10628        },
10629        changelog: [
10630            {
10631                version: "0.1.0",
10632                prs: [
10633                    62,
10634                    127
10635                ]
10636            }
10637        ]
10638    },
10639    "gen_ai.usage.cache_creation.input_tokens": {
10640        brief: "The number of tokens written to the cache when processing the AI input (prompt).",
10641        type: "integer",
10642        applyScrubbing: {
10643            key: "manual"
10644        },
10645        isInOtel: !0,
10646        visibility: "public",
10647        example: 100,
10648        aliases: [
10649            "gen_ai.usage.input_tokens.cache_write"
10650        ],
10651        changelog: [
10652            {
10653                version: "0.11.0",
10654                prs: [
10655                    418
10656                ],
10657                description: "Added gen_ai.usage.cache_creation.input_tokens attribute"
10658            }
10659        ],
10660        additionalContext: [
10661            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans."
10662        ]
10663    },
10664    "gen_ai.usage.cache_read.input_tokens": {
10665        brief: "The number of cached tokens used to process the AI input (prompt).",
10666        type: "integer",
10667        applyScrubbing: {
10668            key: "manual"
10669        },
10670        isInOtel: !0,
10671        visibility: "public",
10672        example: 50,
10673        aliases: [
10674            "gen_ai.usage.input_tokens.cached"
10675        ],
10676        changelog: [
10677            {
10678                version: "0.11.0",
10679                prs: [
10680                    418
10681                ],
10682                description: "Added gen_ai.usage.cache_read.input_tokens attribute"
10683            }
10684        ],
10685        additionalContext: [
10686            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
10687            "This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens \u2014 it is already included."
10688        ]
10689    },
10690    "gen_ai.usage.completion_tokens": {
10691        brief: "The number of tokens used in the GenAI response 
10691(completion).",
10692        type: "integer",
10693        applyScrubbing: {
10694            key: "manual"
10695        },
10696        isInOtel: !0,
10697        visibility: "public",
10698        example: 10,
10699        deprecation: {
10700            replacement: "gen_ai.usage.output_tokens"
10701        },
10702        aliases: [
10703            "ai.completion_tokens.used",
10704            "gen_ai.usage.output_tokens"
10705        ],
10706        changelog: [
10707            {
10708                version: "0.9.0",
10709                prs: [
10710                    397
10711                ],
10712                description: "Add additional_context"
10713            },
10714            {
10715                version: "0.4.0",
10716                prs: [
10717                    228
10718                ]
10719            },
10720            {
10721                version: "0.1.0",
10722                prs: [
10723                    61
10724                ]
10725            },
10726            {
10727                version: "0.0.0"
10728            }
10729        ],
10730        additionalContext: [
10731            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans."
10732        ]
10733    },
10734    "gen_ai.usage.input_tokens": {
10735        brief: "The number of tokens used to process the AI input (prompt) including cached input tokens.",
10736        type: "integer",
10737        applyScrubbing: {
10738            key: "manual"
10739        },
10740        isInOtel: !0,
10741        visibility: "public",
10742        example: 10,
10743        aliases: [
10744            "ai.prompt_tokens.used",
10745            "gen_ai.usage.prompt_tokens"
10746        ],
10747        changelog: [
10748            {
10749                version: "0.11.0",
10750                prs: [
10751                    418
10752                ],
10753                description: "Update additional_context to reference gen_ai.usage.cache_read.input_tokens"
10754            },
10755            {
10756                version: "0.9.0",
10757                prs: [
10758                    397
10759                ],
10760                description: "Add additional_context"
10761            },
10762            {
10763                version: "0.5.0",
10764                prs: [
10765                    261
10766                ]
10767            },
10768            {
10769                version: "0.4.0",
10770                prs: [
10771                    228
10772                ]
10773            },
10774            {
10775                version: "0.1.0",
10776                prs: [
10777                    112
10778                ]
10779            },
10780            {
10781                version: "0.0.0"
10782            }
10783        ],
10784        additionalContext: [
10785            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
10786            "This count includes cached input tokens. gen_ai.usage.cache_read.input_tokens is a subset of this value, not an independent count \u2014 do not sum them together."
10787        ]
10788    },
10789    "gen_ai.usage.input_tokens.cached": {
10790        brief: "The number of cached tokens used to process the AI input (prompt).",
10791        type: "integer",
10792        applyScrubbing: {
10793            key: "manual"
10794        },
10795        isInOtel: !1,
10796        visibility: "public",
10797        example: 50,
10798        deprecation: {
10799            replacement: "gen_ai.usage.cache_read.input_tokens"
10800        },
10801        aliases: [
10802            "gen_ai.usage.cache_read.input_tokens"
10803        ],
10804        changelog: [
10805            {
10806                version: "0.11.0",
10807                prs: [
10808                    418
10809                ],
10810                description: "Deprecate in favor of gen_ai.usage.cache_read.input_tokens"
10811            },
10812            {
10813                version: "0.9.0",
10814                prs: [
10815                    397
10816                ],
10817                description: "Add additional_context"
10818            },
10819            {
10820                version: "0.4.0",
10821                prs: [
10822                    228
10823                ]
10824            },
10825            {
10826                version: "0.1.0",
10827                prs: [
10828                    62,
10829                    112
10830                ]
10831            }
10832        ],
10833        additionalContext: [
10834            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
10835            "This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens \u2014 it is already included."
10836        ]
10837    },
10838    "gen_ai.usage.input_tokens.cache_write": {
10839        brief: "The number of tokens written to the cache when processing the AI input (prompt).",
10840        type: "integer",
10841        applyScrubbing: {
10842            key: "manual"
10843        },
10844        isInOtel: !1,
10845        visibility: "public",
10846        example: 100,
10847        deprecation: {
10848            replacement: "gen_ai.usage.cache_creation.input_tokens"
10849        },
10850        aliases: [
10851            "gen_ai.usage.cache_creation.input_tokens"
10852        ],
10853        changelog: [
10854            {
10855                version: "0.11.0",
10856                prs: [
10857                    418
10858                ],
10859                description: "Deprecate in favor of gen_ai.usage.cache_creation.input_tokens"
10860            },
10861            {
10862                version: "0.9.0",
10863                prs: [
10864                    397
10865                ],
10866                description: "Add additional_context"
10867            },
10868            {
10869                version: "0.4.0",
10870                prs: [
10871                    217,
10872                    228
10873                ]
10874            }
10875        ],
10876        additionalContext: [
10877            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans."
10878        ]
10879    },
10880    "gen_ai.usage.output_tokens": {
10881        brief: "The number of tokens used for creating the AI output (including reasoning tokens).",
10882        type: "integer",
10883        applyScrubbing: {
10884            key: "manual"
10885        },
10886        isInOtel: !0,
10887        visibility: "public",
10888        example: 10,
10889        aliases: [
10890            "ai.completion_tokens.used",
10891            "gen_ai.usage.completion_tokens"
10892        ],
10893        changelog: [
10894            {
10895                version: "0.11.0",
10896                prs: [
10897                    418
10898                ],
10899                description: "Update additional_context to reference gen_ai.usage.reasoning.output_tokens"
10900            },
10901            {
10902                version: "0.9.0",
10903                prs: [
10904                    397
10905                ],
10906                description: "Add additional_context"
10907            },
10908            {
10909                version: "0.5.0",
10910                prs: [
10911                    261
10912                ]
10913            },
10914            {
10915                version: "0.4.0",
10916                prs: [
10917                    228
10918                ]
10919            },
10920            {
10921                version: "0.1.0",
10922                prs: [
10923                    112
10924                ]
10925            },
10926            {
10927                version: "0.0.0"
10928            }
10929        ],
10930        additionalContext: [
10931            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
10932            "This count includes reasoning tokens. gen_ai.usage.reasoning.output_tokens is a subset of this value, not an independent count \u2014 do not sum them together."
10933        ]
10934    },
10935    "gen_ai.usage.output_tokens.reasoning": {
10936        brief: "The number of tokens used for reasoning to create the AI output.",
10937        type: "integer",
10938        applyScrubbing: {
10939            key: "manual"
10940        },
10941        isInOtel: !1,
10942        visibility: "public",
10943        example: 75,
10944        deprecation: {
10945            replacement: "gen_ai.usage.reasoning.output_tokens"
10946        },
10947        aliases: [
10948            "gen_ai.usage.reasoning.output_tokens"
10949        ],
10950        changelog: [
10951            {
10952                version: "0.11.0",
10953                prs: [
10954                    418
10955                ],
10956                description: "Deprecate in favor of gen_ai.usage.reasoning.output_tokens"
10957            },
10958            {
10959                version: "0.9.0",
10960                prs: [
10961                    397
10962                ],
10963                description: "Add additional_context"
10964            },
10965            {
10966                version: "0.4.0",
10967                prs: [
10968                    228
10969                ]
10970            },
10971            {
10972                version: "0.1.0",
10973                prs: [
10974                    62,
10975                    112
10976                ]
10977            }
10978        ],
10979        additionalContext: [
10980            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
10981            "This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens \u2014 it is already included."
10982        ]
10983    },
10984    "gen_ai.usage.prompt_tokens": {
10985        brief: "The number of tokens used in the GenAI input (prompt).",
10986        type: "integer",
10987        applyScrubbing: {
10988            key: "manual"
10989        },
10990        isInOtel: !0,
10991        visibility: "public",
10992        example: 20,
10993        deprecation: {
10994            replacement: "gen_ai.usage.input_tokens"
10995        },
10996        aliases: [
10997            "ai.prompt_tokens.used",
10998            "gen_ai.usage.input_tokens"
10999        ],
11000        changelog: [
11001            {
11002                version: "0.9.0",
11003                prs: [
11004                    397
11005                ],
11006                description: "Add additional_context"
11007            },
11008            {
11009                version: "0.4.0",
11010                prs: [
11011                    228
11012                ]
11013            },
11014            {
11015                version: "0.1.0",
11016                prs: [
11017                    61
11018                ]
11019            },
11020            {
11021                version: "0.0.0"
11022            }
11023        ],
11024        additionalContext: [
11025            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans."
11026        ]
11027    },
11028    "gen_ai.usage.reasoning.output_tokens": {
11029        brief: "The number of tokens used for reasoning to create the AI output.",
11030        type: "integer",
11031        applyScrubbing: {
11032            key: "manual"
11033        },
11034        isInOtel: !0,
11035        visibility: "public",
11036        example: 75,
11037        aliases: [
11038            "gen_ai.usage.output_tokens.reasoning"
11039        ],
11040        changelog: [
11041            {
11042                version: "0.11.0",
11043                prs: [
11044                    418
11045                ],
11046                description: "Added gen_ai.usage.reasoning.output_tokens attribute"
11047            }
11048        ],
11049        additionalContext: [
11050            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
11051            "This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens \u2014 it is already included."
11052        ]
11053    },
11054    "gen_ai.usage.total_tokens": {
11055        brief: "The total number of tokens used to process the prompt. (input tokens plus output todkens)",
11056        type: "integer",
11057        applyScrubbing: {
11058            key: "manual"
11059        },
11060        isInOtel: !1,
11061        visibility: "public",
11062        example: 20,
11063        aliases: [
11064            "ai.total_tokens.used"
11065        ],
11066        changelog: [
11067            {
11068                version: "0.9.0",
11069                prs: [
11070                    397
11071                ],
11072                description: "Add additional_context"
11073            },
11074            {
11075                version: "0.4.0",
11076                prs: [
11077                    228
11078                ]
11079            },
11080            {
11081                version: "0.1.0",
11082                prs: [
11083                    57
11084                ]
11085            }
11086        ],
11087        additionalContext: [
11088            "This attribute appears on both agent parent spans (aggregated totals) and LLM child spans (per-call values). When using sum() to count tokens, filter to gen_ai.operation.type:ai_client to avoid double-counting hierarchical spans.",
11089            "This is the sum of gen_ai.usage.input_tokens and gen_ai.usage.output_tokens. Do not sum this with either of them \u2014 they are already included."
11090        ]
11091    },
11092    "graphql.document": {
11093        brief: "The GraphQL document being executed.",
11094        type: "string",
11095        applyScrubbing: {
11096            key: "auto",
11097            reason: "The document may contain sensitive information in arguments or variables. Instrumentation should redact sensitive information when possible."
11098        },
11099        isInOtel: !0,
11100        visibility: "public",
11101        example: "query findBookById { bookById(id: ?) { name } }",
11102        changelog: [
11103            {
11104                version: "0.7.0",
11105                description: "Adds the `graphql.document` attribute to track the GraphQL document being executed."
11106            }
11107        ]
11108    },
11109    "graphql.operation.name": {
11110        brief: "The name of the operation being executed.",
11111        type: "string",
11112        applyScrubbing: {
11113            key: "manual"
11114        },
11115        isInOtel: !0,
11116        visibility: "public",
11117        example: "findBookById",
11118        changelog: [
11119            {
11120                version: "0.1.0",
11121                prs: [
11122                    127
11123                ]
11124            },
11125            {
11126                version: "0.0.0"
11127            }
11128        ]
11129    },
11130    "graphql.operation.type": {
11131        brief: "The type of the operation being executed.",
11132        type: "string",
11133        applyScrubbing: {
11134            key: "manual"
11135        },
11136        isInOtel: !0,
11137        visibility: "public",
11138        example: "query",
11139        changelog: [
11140            {
11141                version: "0.1.0",
11142                prs: [
11143                    127
11144                ]
11145            },
11146            {
11147                version: "0.0.0"
11148            }
11149        ]
11150    },
11151    hardwareConcurrency: {
11152        brief: "The number of logical CPU cores available.",
11153        type: "string",
11154        applyScrubbing: {
11155            key: "manual"
11156        },
11157        isInOtel: !1,
11158        visibility: "public",
11159        example: "14",
11160        deprecation: {
11161            replacement: "device.processor_count",
11162            reason: "Old namespace-less attribute, to be replaced with device.processor_count for span-first future"
11163        },
11164        aliases: [
11165            "device.processor_count"
11166        ],
11167        changelog: [
11168            {
11169                version: "0.5.0",
11170                prs: [
11171                    281,
11172                    300
11173                ],
11174                description: "Added and deprecated attribute to document JS SDK's current behaviour"
11175            }
11176        ]
11177    },
11178    "http.client_ip": {
11179        brief: "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.",
11180        type: "string",
11181        applyScrubbing: {
11182            key: "auto"
11183        },
11184        isInOtel: !0,
11185        visibility: "public",
11186        example: "example.com",
11187        deprecation: {
11188            replacement: "client.address"
11189        },
11190        aliases: [
11191            "client.address"
11192        ],
11193        changelog: [
11194            {
11195                version: "0.1.0",
11196                prs: [
11197                    61,
11198                    106,
11199                    127
11200                ]
11201            },
11202            {
11203                version: "0.0.0"
11204            }
11205        ]
11206    },
11207    "http.decoded_response_content_length": {
11208        brief: "The decoded body size of the response (in bytes).",
11209        type: "integer",
11210        applyScrubbing: {
11211            key: "manual"
11212        },
11213        isInOtel: !1,
11214        visibility: "public",
11215        example: 456,
11216        changelog: [
11217            {
11218                version: "0.4.0",
11219                prs: [
11220                    228
11221                ]
11222            },
11223            {
11224                version: "0.0.0"
11225            }
11226        ]
11227    },
11228    "http.flavor": {
11229        brief: "The actual version of the protocol used for network communication.",
11230        type: "string",
11231        applyScrubbing: {
11232            key: "manual"
11233        },
11234        isInOtel: !0,
11235        visibility: "public",
11236        example: "1.1",
11237        deprecation: {
11238            replacement: "network.protocol.version"
11239        },
11240        aliases: [
11241            "network.protocol.version",
11242            "net.protocol.version"
11243        ],
11244        changelog: [
11245            {
11246                version: "0.1.0",
11247                prs: [
11248                    61,
11249                    108,
11250                    127
11251                ]
11252            },
11253            {
11254                version: "0.0.0"
11255            }
11256        ]
11257    },
11258    "http.fragment": {
11259        brief: "The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not.",
11260        type: "string",
11261        applyScrubbing: {
11262            key: "auto"
11263        },
11264        isInOtel: !1,
11265        visibility: "public",
11266        example: "#details",
11267        changelog: [
11268            {
11269                version: "0.0.0"
11270            }
11271        ]
11272    },
11273    "http.host": {
11274        brief: "The domain name.",
11275        type: "string",
11276        applyScrubbing: {
11277            key: "manual"
11278        },
11279        isInOtel: !0,
11280        visibility: "public",
11281        example: "example.com",
11282        deprecation: {
11283            replacement: "server.address",
11284            reason: "Deprecated, use one of `server.address` or `client.address`, depending on the usage"
11285        },
11286        aliases: [
11287            "server.address",
11288            "client.address",
11289            "http.server_name",
11290            "net.host.name",
11291            "server_name"
11292        ],
11293        changelog: [
11294            {
11295                version: "0.1.0",
11296                prs: [
11297                    61,
11298                    108,
11299                    127
11300                ]
11301            },
11302            {
11303                version: "0.0.0"
11304            }
11305        ]
11306    },
11307    "http.method": {
11308        brief: "The HTTP method used.",
11309        type: "string",
11310        applyScrubbing: {
11311            key: "manual"
11312        },
11313        isInOtel: !0,
11314        visibility: "public",
11315        example: "GET",
11316        deprecation: {
11317            replacement: "http.request.method"
11318        },
11319        aliases: [
11320            "http.request.method",
11321            "http.request_method",
11322            "method"
11323        ],
11324        changelog: [
11325            {
11326                version: "0.1.0",
11327                prs: [
11328                    61,
11329                    127
11330                ]
11331            },
11332            {
11333                version: "0.0.0"
11334            }
11335        ]
11336    },
11337    "http.query": {
11338        brief: "The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not.",
11339        type: "string",
11340        applyScrubbing: {
11341            key: "auto",
11342            reason: "Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information."
11343        },
11344        isInOtel: !1,
11345        visibility: "public",
11346        example: "?foo=bar&bar=baz",
11347        changelog: [
11348            {
11349                version: "0.0.0"
11350            }
11351        ]
11352    },
11353    "http.request.body.data": {
11354        brief: "HTTP request body data. Can be given as string or structural data of any format.",
11355        type: "string",
11356        applyScrubbing: {
11357            key: "auto"
11358        },
11359        isInOtel: !1,
11360        visibility: "public",
11361        example: '[{"role": "user", "message": "hello"}]',
11362        changelog: [
11363            {
11364                version: "0.6.0",
11365                prs: [
11366                    336
11367                ],
11368                description: "Added http.request.body.data attribute"
11369            }
11370        ]
11371    },
11372    "http.request.connection_end": {
11373        brief: "The UNIX timestamp representing the time immediately after the browser finishes establishing the connection to the server to retrieve the resource. The timestamp value includes the time interval to establish the transport connection, as well as other time intervals such as TLS handshake and SOCKS authentication.",
11374        type: "double",
11375        applyScrubbing: {
11376            key: "manual"
11377        },
11378        isInOtel: !1,
11379        visibility: "public",
11380        example: 173282955515e-2,
11381        changelog: [
11382            {
11383                version: "0.4.0",
11384                prs: [
11385                    228
11386                ]
11387            },
11388            {
11389                version: "0.1.0",
11390                prs: [
11391                    134
11392                ]
11393            },
11394            {
11395                version: "0.0.0"
11396            }
11397        ]
11398    },
11399    "http.request.connect_start": {
11400        brief: "The UNIX timestamp representing the time immediately before the user agent starts establishing the connection to the server to retrieve the resource.",
11401        type: "double",
11402        applyScrubbing: {
11403            key: "manual"
11404        },
11405        isInOtel: !1,
11406        visibility: "public",
11407        example: 1732829555111e-3,
11408        changelog: [
11409            {
11410                version: "0.4.0",
11411                prs: [
11412                    228
11413                ]
11414            },
11415            {
11416                version: "0.1.0",
11417                prs: [
11418                    134
11419                ]
11420            },
11421            {
11422                version: "0.0.0"
11423            }
11424        ]
11425    },
11426    "http.request.domain_lookup_end": {
11427        brief: "The UNIX timestamp representing the time immediately after the browser finishes the domain-name lookup for the resource.",
11428        type: "double",
11429        applyScrubbing: {
11430            key: "manual"
11431        },
11432        isInOtel: !1,
11433        visibility: "public",
11434        example: 1732829555201e-3,
11435        changelog: [
11436            {
11437                version: "0.4.0",
11438                prs: [
11439                    228
11440                ]
11441            },
11442            {
11443                version: "0.1.0",
11444                prs: [
11445                    134
11446                ]
11447            },
11448            {
11449                version: "0.0.0"
11450            }
11451        ]
11452    },
11453    "http.request.domain_lookup_start": {
11454        brief: "The UNIX timestamp representing the time immediately before the browser starts the domain name lookup for the resource.",
11455        type: "double",
11456        applyScrubbing: {
11457            key: "manual"
11458        },
11459        isInOtel: !1,
11460        visibility: "public",
11461        example: 1732829555322e-3,
11462        changelog: [
11463            {
11464                version: "0.4.0",
11465                prs: [
11466                    228
11467                ]
11468            },
11469            {
11470                version: "0.1.0",
11471                prs: [
11472                    134
11473                ]
11474            },
11475            {
11476                version: "0.0.0"
11477            }
11478        ]
11479    },
11480    "http.request.fetch_start": {
11481        brief: "The UNIX timestamp representing the time immediately before the browser starts to fetch the resource.",
11482        type: "double",
11483        applyScrubbing: {
11484            key: "manual"
11485        },
11486        isInOtel: !1,
11487        visibility: "public",
11488        example: 1732829555389e-3,
11489        changelog: [
11490            {
11491                version: "0.4.0",
11492                prs: [
11493                    228
11494                ]
11495            },
11496            {
11497                version: "0.1.0",
11498                prs: [
11499                    134
11500                ]
11501            },
11502            {
11503                version: "0.0.0"
11504            }
11505        ]
11506    },
11507    "http.request.header.<key>": {
11508        brief: "HTTP request headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.",
11509        type: "string[]",
11510        applyScrubbing: {
11511            key: "auto"
11512        },
11513        isInOtel: !0,
11514        visibility: "public",
11515        hasDynamicSuffix: !0,
11516        example: "http.request.header.custom-header=['foo', 'bar']",
11517        changelog: [
11518            {
11519                version: "0.4.0",
11520                prs: [
11521                    201,
11522                    204
11523                ]
11524            },
11525            {
11526                version: "0.1.0",
11527                prs: [
11528                    103
11529                ]
11530            }
11531        ]
11532    },
11533    "http.request.method": {
11534        brief: "The HTTP method used.",
11535        type: "string",
11536        applyScrubbing: {
11537            key: "manual"
11538        },
11539        isInOtel: !0,
11540        visibility: "public",
11541        example: "GET",
11542        aliases: [
11543            "method",
11544            "http.method",
11545            "http.request_method"
11546        ],
11547        changelog: [
11548            {
11549                version: "0.1.0",
11550                prs: [
11551                    127
11552                ]
11553            },
11554            {
11555                version: "0.0.0"
11556            }
11557        ]
11558    },
11559    "http.request_method": {
11560        brief: "The HTTP method used.",
11561        type: "string",
11562        applyScrubbing: {
11563            key: "manual"
11564        },
11565        isInOtel: !1,
11566        visibility: "public",
11567        example: "GET",
11568        deprecation: {
11569            replacement: "http.request.method"
11570        },
11571        aliases: [
11572            "method",
11573            "http.method",
11574            "http.request.method"
11575        ],
11576        changelog: [
11577            {
11578                version: "0.6.0",
11579                prs: [
11580                    343
11581                ],
11582                description: "Added http.request_method attribute"
11583            }
11584        ]
11585    },
11586    "http.request.redirect_end": {
11587        brief: "The UNIX timestamp representing the timestamp immediately after receiving the last b
11587yte of the response of the last redirect",
11588        type: "double",
11589        applyScrubbing: {
11590            key: "manual"
11591        },
11592        isInOtel: !1,
11593        visibility: "public",
11594        example: 1732829558502e-3,
11595        changelog: [
11596            {
11597                version: "0.4.0",
11598                prs: [
11599                    228
11600                ]
11601            },
11602            {
11603                version: "0.1.0",
11604                prs: [
11605                    130,
11606                    134
11607                ]
11608            }
11609        ]
11610    },
11611    "http.request.redirect_start": {
11612        brief: "The UNIX timestamp representing the start time of the fetch which that initiates the redirect.",
11613        type: "double",
11614        applyScrubbing: {
11615            key: "manual"
11616        },
11617        isInOtel: !1,
11618        visibility: "public",
11619        example: 1732829555495e-3,
11620        changelog: [
11621            {
11622                version: "0.4.0",
11623                prs: [
11624                    228
11625                ]
11626            },
11627            {
11628                version: "0.1.0",
11629                prs: [
11630                    134
11631                ]
11632            },
11633            {
11634                version: "0.0.0"
11635            }
11636        ]
11637    },
11638    "http.request.request_start": {
11639        brief: "The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.",
11640        type: "double",
11641        applyScrubbing: {
11642            key: "manual"
11643        },
11644        isInOtel: !1,
11645        visibility: "public",
11646        example: 173282955551e-2,
11647        changelog: [
11648            {
11649                version: "0.4.0",
11650                prs: [
11651                    228
11652                ]
11653            },
11654            {
11655                version: "0.1.0",
11656                prs: [
11657                    134
11658                ]
11659            },
11660            {
11661                version: "0.0.0"
11662            }
11663        ]
11664    },
11665    "http.request.resend_count": {
11666        brief: "The ordinal number of request resending attempt (for any reason, including redirects).",
11667        type: "integer",
11668        applyScrubbing: {
11669            key: "manual"
11670        },
11671        isInOtel: !1,
11672        visibility: "public",
11673        example: 2,
11674        changelog: [
11675            {
11676                version: "0.4.0",
11677                prs: [
11678                    228
11679                ]
11680            },
11681            {
11682                version: "0.0.0"
11683            }
11684        ]
11685    },
11686    "http.request.response_end": {
11687        brief: "The UNIX timestamp representing the time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first.",
11688        type: "double",
11689        applyScrubbing: {
11690            key: "manual"
11691        },
11692        isInOtel: !1,
11693        visibility: "public",
11694        example: 173282955589e-2,
11695        changelog: [
11696            {
11697                version: "0.4.0",
11698                prs: [
11699                    228
11700                ]
11701            },
11702            {
11703                version: "0.1.0",
11704                prs: [
11705                    134
11706                ]
11707            },
11708            {
11709                version: "0.0.0"
11710            }
11711        ]
11712    },
11713    "http.request.response_start": {
11714        brief: "The UNIX timestamp representing the time immediately before the browser starts requesting the resource from the server, cache, or local resource. If the transport connection fails and the browser retires the request, the value returned will be the start of the retry request.",
11715        type: "double",
11716        applyScrubbing: {
11717            key: "manual"
11718        },
11719        isInOtel: !1,
11720        visibility: "public",
11721        example: 17328295557e-1,
11722        changelog: [
11723            {
11724                version: "0.4.0",
11725                prs: [
11726                    228
11727                ]
11728            },
11729            {
11730                version: "0.1.0",
11731                prs: [
11732                    134
11733                ]
11734            },
11735            {
11736                version: "0.0.0"
11737            }
11738        ]
11739    },
11740    "http.request.same_origin": {
11741        brief: "Indicates that a URL has the same origin as the current page's origin in the browser.",
11742        type: "boolean",
11743        applyScrubbing: {
11744            key: "manual"
11745        },
11746        isInOtel: !1,
11747        visibility: "public",
11748        example: !0,
11749        aliases: [
11750            "url.same_origin"
11751        ],
11752        changelog: [
11753            {
11754                version: "0.16.0",
11755                prs: [
11756                    456
11757                ],
11758                description: "Added http.request.same_origin attribute"
11759            }
11760        ]
11761    },
11762    "http.request.secure_connection_start": {
11763        brief: "The UNIX timestamp representing the time immediately before the browser starts the handshake process to secure the current connection. If a secure connection is not used, the property returns zero.",
11764        type: "double",
11765        applyScrubbing: {
11766            key: "manual"
11767        },
11768        isInOtel: !1,
11769        visibility: "public",
11770        example: 173282955573e-2,
11771        changelog: [
11772            {
11773                version: "0.4.0",
11774                prs: [
11775                    228
11776                ]
11777            },
11778            {
11779                version: "0.1.0",
11780                prs: [
11781                    134
11782                ]
11783            },
11784            {
11785                version: "0.0.0"
11786            }
11787        ]
11788    },
11789    "http.request.time_to_first_byte": {
11790        brief: "The time in seconds from the browser's timeorigin to when the first byte of the request's response was received. See https://web.dev/articles/ttfb#measure-resource-requests",
11791        type: "double",
11792        applyScrubbing: {
11793            key: "manual"
11794        },
11795        isInOtel: !1,
11796        visibility: "public",
11797        example: 1.032,
11798        changelog: [
11799            {
11800                version: "0.4.0",
11801                prs: [
11802                    228
11803                ]
11804            },
11805            {
11806                version: "0.1.0",
11807                prs: [
11808                    131
11809                ]
11810            }
11811        ]
11812    },
11813    "http.request.worker_start": {
11814        brief: "The UNIX timestamp representing the timestamp immediately before dispatching the FetchEvent if a Service Worker thread is already running, or immediately before starting the Service Worker thread if it is not already running.",
11815        type: "double",
11816        applyScrubbing: {
11817            key: "manual"
11818        },
11819        isInOtel: !1,
11820        visibility: "public",
11821        example: 173282955368e-2,
11822        changelog: [
11823            {
11824                version: "0.4.0",
11825                prs: [
11826                    228
11827                ]
11828            },
11829            {
11830                version: "0.1.0",
11831                prs: [
11832                    130,
11833                    134
11834                ]
11835            }
11836        ]
11837    },
11838    "http.response.body.size": {
11839        brief: "The encoded body size of the response (in bytes).",
11840        type: "integer",
11841        applyScrubbing: {
11842            key: "manual"
11843        },
11844        isInOtel: !0,
11845        visibility: "public",
11846        example: 123,
11847        aliases: [
11848            "http.response_content_length",
11849            "http.response.header.content-length"
11850        ],
11851        changelog: [
11852            {
11853                version: "0.4.0",
11854                prs: [
11855                    228
11856                ]
11857            },
11858            {
11859                version: "0.1.0",
11860                prs: [
11861                    106
11862                ]
11863            },
11864            {
11865                version: "0.0.0"
11866            }
11867        ]
11868    },
11869    "http.response_content_length": {
11870        brief: "The encoded body size of the response (in bytes).",
11871        type: "integer",
11872        applyScrubbing: {
11873            key: "manual"
11874        },
11875        isInOtel: !0,
11876        visibility: "public",
11877        example: 123,
11878        deprecation: {
11879            replacement: "http.response.body.size"
11880        },
11881        aliases: [
11882            "http.response.body.size",
11883            "http.response.header.content-length"
11884        ],
11885        changelog: [
11886            {
11887                version: "0.4.0",
11888                prs: [
11889                    228
11890                ]
11891            },
11892            {
11893                version: "0.1.0",
11894                prs: [
11895                    61,
11896                    106
11897                ]
11898            },
11899            {
11900                version: "0.0.0"
11901            }
11902        ]
11903    },
11904    "http.response.header.content-length": {
11905        brief: "The size of the message body sent to the recipient (in bytes)",
11906        type: "string",
11907        applyScrubbing: {
11908            key: "manual"
11909        },
11910        isInOtel: !0,
11911        visibility: "public",
11912        example: "http.response.header.custom-header=['foo', 'bar']",
11913        aliases: [
11914            "http.response_content_length",
11915            "http.response.body.size"
11916        ],
11917        changelog: [
11918            {
11919                version: "0.1.0",
11920                prs: [
11921                    127
11922                ]
11923            },
11924            {
11925                version: "0.0.0"
11926            }
11927        ]
11928    },
11929    "http.response.header.<key>": {
11930        brief: "HTTP response headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.",
11931        type: "string[]",
11932        applyScrubbing: {
11933            key: "auto"
11934        },
11935        isInOtel: !0,
11936        visibility: "public",
11937        hasDynamicSuffix: !0,
11938        example: "http.response.header.custom-header=['foo', 'bar']",
11939        changelog: [
11940            {
11941                version: "0.4.0",
11942                prs: [
11943                    201,
11944                    204
11945                ]
11946            },
11947            {
11948                version: "0.1.0",
11949                prs: [
11950                    103
11951                ]
11952            }
11953        ]
11954    },
11955    "http.response.size": {
11956        brief: "The transfer size of the response (in bytes).",
11957        type: "integer",
11958        applyScrubbing: {
11959            key: "manual"
11960        },
11961        isInOtel: !0,
11962        visibility: "public",
11963        example: 456,
11964        aliases: [
11965            "http.response_transfer_size"
11966        ],
11967        changelog: [
11968            {
11969                version: "0.4.0",
11970                prs: [
11971                    228
11972                ]
11973            },
11974            {
11975                version: "0.0.0"
11976            }
11977        ]
11978    },
11979    "http.response.status_code": {
11980        brief: "The status code of the HTTP response.",
11981        type: "integer",
11982        applyScrubbing: {
11983            key: "manual"
11984        },
11985        isInOtel: !0,
11986        visibility: "public",
11987        example: 404,
11988        aliases: [
11989            "http.status_code"
11990        ],
11991        changelog: [
11992            {
11993                version: "0.4.0",
11994                prs: [
11995                    228
11996                ]
11997            },
11998            {
11999                version: "0.0.0"
12000            }
12001        ]
12002    },
12003    "http.response_transfer_size": {
12004        brief: "The transfer size of the response (in bytes).",
12005        type: "integer",
12006        applyScrubbing: {
12007            key: "manual"
12008        },
12009        isInOtel: !1,
12010        visibility: "public",
12011        example: 456,
12012        deprecation: {
12013            replacement: "http.response.size"
12014        },
12015        aliases: [
12016            "http.response.size"
12017        ],
12018        changelog: [
12019            {
12020                version: "0.4.0",
12021                prs: [
12022                    228
12023                ]
12024            },
12025            {
12026                version: "0.1.0",
12027                prs: [
12028                    61
12029                ]
12030            },
12031            {
12032                version: "0.0.0"
12033            }
12034        ]
12035    },
12036    "http.route": {
12037        brief: "The matched route, that is, the path template in the format used by the respective server framework.",
12038        type: "string",
12039        applyScrubbing: {
12040            key: "manual"
12041        },
12042        isInOtel: !0,
12043        visibility: "public",
12044        example: "/users/:id",
12045        aliases: [
12046            "url.template"
12047        ],
12048        changelog: [
12049            {
12050                version: "0.1.0",
12051                prs: [
12052                    127
12053                ]
12054            },
12055            {
12056                version: "0.0.0"
12057            }
12058        ]
12059    },
12060    "http.scheme": {
12061        brief: "The URI scheme component identifying the used protocol.",
12062        type: "string",
12063        applyScrubbing: {
12064            key: "manual"
12065        },
12066        isInOtel: !0,
12067        visibility: "public",
12068        example: "https",
12069        deprecation: {
12070            replacement: "url.scheme"
12071        },
12072        aliases: [
12073            "url.scheme"
12074        ],
12075        changelog: [
12076            {
12077                version: "0.1.0",
12078                prs: [
12079                    61,
12080                    127
12081                ]
12082            },
12083            {
12084                version: "0.0.0"
12085            }
12086        ]
12087    },
12088    "http.server_name": {
12089        brief: "The server domain name",
12090        type: "string",
12091        applyScrubbing: {
12092            key: "manual"
12093        },
12094        isInOtel: !0,
12095        visibility: "public",
12096        example: "example.com",
12097        deprecation: {
12098            replacement: "server.address"
12099        },
12100        aliases: [
12101            "server.address",
12102            "net.host.name",
12103            "http.host",
12104            "server_name"
12105        ],
12106        changelog: [
12107            {
12108                version: "0.1.0",
12109                prs: [
12110                    61,
12111                    108,
12112                    127
12113                ]
12114            },
12115            {
12116                version: "0.0.0"
12117            }
12118        ]
12119    },
12120    "http.server.request.time_in_queue": {
12121        brief: "The time in milliseconds the request spent in the server queue before processing began. Measured from the X-Request-Start header set by reverse proxies (e.g., Nginx, HAProxy, Heroku) to when the application started handling the request.",
12122        type: "double",
12123        applyScrubbing: {
12124            key: "manual"
12125        },
12126        isInOtel: !1,
12127        visibility: "public",
12128        example: 50,
12129        changelog: [
12130            {
12131                version: "0.5.0",
12132                prs: [
12133                    267
12134                ]
12135            }
12136        ]
12137    },
12138    "http.status_code": {
12139        brief: "The status code of the HTTP response.",
12140        type: "integer",
12141        applyScrubbing: {
12142            key: "manual"
12143        },
12144        isInOtel: !0,
12145        visibility: "public",
12146        example: 404,
12147        deprecation: {
12148            replacement: "http.response.status_code"
12149        },
12150        aliases: [
12151            "http.response.status_code"
12152        ],
12153        changelog: [
12154            {
12155                version: "0.4.0",
12156                prs: [
12157                    228
12158                ]
12159            },
12160            {
12161                version: "0.1.0",
12162                prs: [
12163                    61
12164                ]
12165            },
12166            {
12167                version: "0.0.0"
12168            }
12169        ]
12170    },
12171    "http.target": {
12172        brief: "The pathname and query string of the URL.",
12173        type: "string",
12174        applyScrubbing: {
12175            key: "auto"
12176        },
12177        isInOtel: !0,
12178        visibility: "public",
12179        example: "/test?foo=bar#buzz",
12180        deprecation: {
12181            replacement: "url.path",
12182            reason: "This attribute is being deprecated in favor of url.path and url.query"
12183        },
12184        changelog: [
12185            {
12186                version: "0.1.0",
12187                prs: [
12188                    61
12189                ]
12190            },
12191            {
12192                version: "0.0.0"
12193            }
12194        ]
12195    },
12196    "http.url": {
12197        brief: "The URL of the resource that was fetched.",
12198        type: "string",
12199        applyScrubbing: {
12200            key: "auto"
12201        },
12202        isInOtel: !0,
12203        visibility: "public",
12204        example: "https://example.com/test?foo=bar#buzz",
12205        deprecation: {
12206            replacement: "url.full"
12207        },
12208        aliases: [
12209            "url.full",
12210            "url"
12211        ],
12212        changelog: [
12213            {
12214                version: "0.1.0",
12215                prs: [
12216                    61,
12217                    108
12218                ]
12219            },
12220            {
12221                version: "0.0.0"
12222            }
12223        ]
12224    },
12225    "http.user_agent": {
12226        brief: "Value of the HTTP User-Agent header sent by the client.",
12227        type: "string",
12228        applyScrubbing: {
12229            key: "manual"
12230        },
12231        isInOtel: !0,
12232        visibility: "public",
12233        example: "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1",
12234        deprecation: {
12235            replacement: "user_agent.original"
12236        },
12237        aliases: [
12238            "user_agent.original"
12239        ],
12240        changelog: [
12241            {
12242                version: "0.1.0",
12243                prs: [
12244                    61,
12245                    127
12246                ]
12247            },
12248            {
12249                version: "0.0.0"
12250            }
12251        ]
12252    },
12253    id: {
12254        brief: "A unique identifier for the span.",
12255        type: "string",
12256        applyScrubbing: {
12257            key: "never"
12258        },
12259        isInOtel: !1,
12260        visibility: "public",
12261        example: "f47ac10b58cc4372a5670e02b2c3d479",
12262        changelog: [
12263            {
12264                version: "0.0.0"
12265            }
12266        ]
12267    },
12268    inp: {
12269        brief: "The value of the recorded Interaction to Next Paint (INP) web vital",
12270        type: "double",
12271        applyScrubbing: {
12272            key: "manual"
12273        },
12274        isInOtel: !1,
12275        visibility: "public",
12276        example: 200,
12277        deprecation: {
12278            replacement: "browser.web_vital.inp.value",
12279            reason: "The INP web vital is now recorded as a browser.web_vital.inp.value attribute."
12280        },
12281        aliases: [
12282            "browser.web_vital.inp.value"
12283        ],
12284        changelog: [
12285            {
12286                version: "0.5.0",
12287                prs: [
12288                    229
12289                ],
12290                description: "Added and deprecated attribute to document JS SDK's current behaviour"
12291            }
12292        ]
12293    },
12294    "jsonrpc.protocol.version": {
12295        brief: "The version of the JSON-RPC protocol used.",
12296        type: "string",
12297        applyScrubbing: {
12298            key: "manual"
12299        },
12300        isInOtel: !0,
12301        visibility: "public",
12302        example: "2.0",
12303        changelog: [
12304            {
12305                version: "0.12.0",
12306                prs: [
12307                    420
12308                ],
12309                description: "Added jsonrpc.protocol.version attribute"
12310            }
12311        ]
12312    },
12313    "jsonrpc.request.id": {
12314        brief: "The JSON-RPC request identifier. Unique within the session.",
12315        type: "string",
12316        applyScrubbing: {
12317            key: "manual"
12318        },
12319        isInOtel: !0,
12320        visibility: "public",
12321        example: "1",
12322        aliases: [
12323            "mcp.request.id"
12324        ],
12325        changelog: [
12326            {
12327                version: "0.12.0",
12328                prs: [
12329                    420
12330                ],
12331                description: "Added jsonrpc.request.id attribute"
12332            }
12333        ]
12334    },
12335    "jvm.gc.action": {
12336        brief: "Name of the garbage collector action.",
12337        type: "string",
12338        applyScrubbing: {
12339            key: "manual"
12340        },
12341        isInOtel: !0,
12342        visibility: "public",
12343        example: "end of minor GC",
12344        changelog: [
12345            {
12346                version: "0.1.0",
12347                prs: [
12348                    127
12349                ]
12350            },
12351            {
12352                version: "0.0.0"
12353            }
12354        ]
12355    },
12356    "jvm.gc.name": {
12357        brief: "Name of the garbage collector.",
12358        type: "string",
12359        applyScrubbing: {
12360            key: "manual"
12361        },
12362        isInOtel: !0,
12363        visibility: "public",
12364        example: "G1 Young Generation",
12365        changelog: [
12366            {
12367                version: "0.1.0",
12368                prs: [
12369                    127
12370                ]
12371            },
12372            {
12373                version: "0.0.0"
12374            }
12375        ]
12376    },
12377    "jvm.memory.pool.name": {
12378        brief: "Name of the memory pool.",
12379        type: "string",
12380        applyScrubbing: {
12381            key: "manual"
12382        },
12383        isInOtel: !0,
12384        visibility: "public",
12385        example: "G1 Old Gen",
12386        changelog: [
12387            {
12388                version: "0.1.0",
12389                prs: [
12390                    127
12391                ]
12392            },
12393            {
12394                version: "0.0.0"
12395            }
12396        ]
12397    },
12398    "jvm.memory.type": {
12399        brief: "Name of the memory pool.",
12400        type: "string",
12401        applyScrubbing: {
12402            key: "manual"
12403        },
12404        isInOtel: !0,
12405        visibility: "public",
12406        example: "G1 Old Gen",
12407        changelog: [
12408            {
12409                version: "0.1.0",
12410                prs: [
12411                    127
12412                ]
12413            },
12414            {
12415                version: "0.0.0"
12416            }
12417        ]
12418    },
12419    "jvm.thread.daemon": {
12420        brief: "Whether the thread is daemon or not.",
12421        type: "boolean",
12422        applyScrubbing: {
12423            key: "manual"
12424        },
12425        isInOtel: !0,
12426        visibility: "public",
12427        example: !0,
12428        changelog: [
12429            {
12430                version: "0.0.0"
12431            }
12432        ]
12433    },
12434    "jvm.thread.state": {
12435        brief: "State of the thread.",
12436        type: "string",
12437        applyScrubbing: {
12438            key: "manual"
12439        },
12440        isInOtel: !0,
12441        visibility: "public",
12442        example: "blocked",
12443        changelog: [
12444            {
12445                version: "0.1.0",
12446                prs: [
12447                    127
12448                ]
12449            },
12450            {
12451                version: "0.0.0"
12452            }
12453        ]
12454    },
12455    "koa.name": {
12456        brief: "The name of the Koa middleware or matched route that handled the request.",
12457        type: "string",
12458        applyScrubbing: {
12459            key: "manual"
12460        },
12461        isInOtel: !1,
12462        visibility: "public",
12463        example: "/users/:id",
12464        deprecation: {
12465            reason: "No single replacement. SDKs should use http.route for router layers and code.function.name for middleware layers instead."
12466        },
12467        changelog: [
12468            {
12469                version: "0.16.0",
12470                prs: [
12471                    490
12472                ],
12473                description: "Added koa.name attribute as deprecated"
12474            }
12475        ]
12476    },
12477    "koa.type": {
12478        brief: "The type of the Koa layer that handled the request.",
12479        type: "string",
12480        applyScrubbing: {
12481            key: "manual"
12482        },
12483        isInOtel: !1,
12484        visibility: "public",
12485        example: "router",
12486        changelog: [
12487            {
12488                version: "0.16.0",
12489                prs: [
12490                    471
12491                ],
12492                description: "Added koa.type attribute"
12493            }
12494        ]
12495    },
12496    lcp: {
12497        brief: "The value of the recorded Largest Contentful Paint (LCP) web vital",
12498        type: "double",
12499        applyScrubbing: {
12500            key: "manual"
12501        },
12502        isInOtel: !1,
12503        visibility: "public",
12504        example: 2500,
12505        deprecation: {
12506            replacement: "browser.web_vital.lcp.value",
12507            reason: "The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute."
12508        },
12509        aliases: [
12510            "browser.web_vital.lcp.value"
12511        ],
12512        changelog: [
12513            {
12514                version: "0.5.0",
12515                prs: [
12516                    229
12517                ],
12518                description: "Added and deprecated attribute to document JS SDK's current behaviour"
12519            }
12520        ]
12521    },
12522    "lcp.element": {
12523        brief: "The dom element responsible for the largest contentful paint.",
12524        type: "string",
12525        applyScrubbing: {
12526            key: "manual"
12527        },
12528        isInOtel: !1,
12529        visibility: "public",
12530        example: "img",
12531        deprecation: {
12532            replacement: "browser.web_vital.lcp.element",
12533            reason: "The LCP element is now recorded as a browser.web_vital.lcp.element attribute."
12534        },
12535        aliases: [
12536            "browser.web_vital.lcp.element"
12537        ],
12538        changelog: [
12539            {
12540                version: "0.5.0",
12541                prs: [
12542                    233
12543                ]
12544            },
12545            {
12546                version: "0.1.0",
12547                prs: [
12548                    127
12549                ]
12550            },
12551            {
12552                version: "0.0.0"
12553            }
12554        ]
12555    },
12556    "lcp.id": {
12557        brief: "The id of the dom element responsible for the largest contentful paint.",
12558        type: "string",
12559        applyScrubbing: {
12560            key: "manual"
12561        },
12562        isInOtel: !1,
12563        visibility: "public",
12564        example: "#hero",
12565        deprecation: {
12566            replacement: "browser.web_vital.lcp.id",
12567            reason: "The LCP id is now recorded as a browser.web_vital.lcp.id attribute."
12568        },
12569        aliases: [
12570            "browser.web_vital.lcp.id"
12571        ],
12572        changelog: [
12573            {
12574                version: "0.5.0",
12575                prs: [
12576                    233
12577                ]
12578            },
12579            {
12580                version: "0.1.0",
12581                prs: [
12582                    127
12583                ]
12584            },
12585            {
12586                version: "0.0.0"
12587            }
12588        ]
12589    },
12590    "lcp.loadTime": {
12591        brief: "The time it took for the LCP element to be loaded",
12592        type: "integer",
12593        applyScrubbing: {
12594            key: "manual"
12595        },
12596        isInOtel: !1,
12597        visibility: "public",
12598        example: 1402,
12599        deprecation: {
12600            replacement: "browser.web_vital.lcp.load_time",
12601            reason: "The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute."
12602        },
12603        aliases: [
12604            "browser.web_vital.lcp.load_time"
12605        ],
12606        changelog: [
12607            {
12608                version: "0.5.0",
12609                prs: [
12610                    233
12611                ]
12612            }
12613        ]
12614    },
12615    "lcp.renderTime": {
12616        brief: "The time it took for the LCP element to be rendered",
12617        type: "integer",
12618        applyScrubbing: {
12619            key: "manual"
12620        },
12621        isInOtel: !1,
12622        visibility: "public",
12623        example: 1685,
12624        deprecation: {
12625            replacement: "browser.web_vital.lcp.render_time",
12626            reason: "The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute."
12627        },
12628        aliases: [
12629            "browser.web_vital.lcp.render_time"
12630        ],
12631        changelog: [
12632            {
12633                version: "0.5.0",
12634                prs: [
12635                    233
12636                ]
12637            }
12638        ]
12639    },
12640    "lcp.size": {
12641        brief: "The size of the largest contentful paint element.",
12642        type: "integer",
12643        applyScrubbing: {
12644            key: "manual"
12645        },
12646        isInOtel: !1,
12647        visibility: "public",
12648        example: 1234,
12649        deprecation: {
12650            replacement: "browser.web_vital.lcp.size",
12651            reason: "The LCP size is now recorded as a browser.web_vital.lcp.size attribute."
12652        },
12653        aliases: [
12654            "browser.web_vital.lcp.size"
12655        ],
12656        changelog: [
12657            {
12658                version: "0.5.0",
12659                prs: [
12660                    233
12661                ]
12662            },
12663            {
12664                version: "0.4.0",
12665                prs: [
12666                    228
12667                ]
12668            },
12669            {
12670                version: "0.0.0"
12671            }
12672        ]
12673    },
12674    "lcp.url": {
12675        brief: "The url of the dom element responsible for the largest contentful paint.",
12676        type: "string",
12677        applyScrubbing: {
12678            key: "auto"
12679        },
12680        isInOtel: !1,
12681        visibility: "public",
12682        example: "https://example.com",
12683        deprecation: {
12684            replacement: "browser.web_vital.lcp.url",
12685            reason: "The LCP url is now recorded as a browser.web_vital.lcp.url attribute."
12686        },
12687        aliases: [
12688            "browser.web_vital.lcp.url"
12689        ],
12690        changelog: [
12691            {
12692                version: "0.5.0",
12693                prs: [
12694                    233
12695                ]
12696            },
12697            {
12698                version: "0.1.0",
12699                prs: [
12700                    127
12701                ]
12702            },
12703            {
12704                version: "0.0.0"
12705            }
12706        ]
12707    },
12708    "logger.name": {
12709        brief: "The name of the logger that generated this event.",
12710        type: "string",
12711        applyScrubbing: {
12712            key: "manual"
12713        },
12714        isInOtel: !1,
12715        visibility: "public",
12716        example: "myLogger",
12717        changelog: [
12718            {
12719                version: "0.1.0",
12720                prs: [
12721                    127
12722                ]
12723            },
12724            {
12725                version: "0.0.0"
12726            }
12727        ]
12728    },
12729    "mcp.cancelled.reason": {
12730        brief: "Reason for the cancellation of an MCP operation.",
12731        type: "string",
12732        applyScrubbing: {
12733            key: "manual",
12734            reason: "Cancellation reasons may contain user-specific or sensitive information"
12735        },
12736        isInOtel: !1,
12737        visibility: "public",
12738        example: "User cancelled the request",
12739        changelog: [
12740            {
12741                version: "0.3.0",
12742                prs: [
12743                    171
12744                ]
12745            }
12746        ]
12747    },
12748    "mcp.cancelled.request_id": {
12749        brief: "Request ID of the cancelled MCP operation.",
12750        type: "string",
12751        applyScrubbing: {
12752            key: "manual"
12753        },
12754        isInOtel: !1,
12755        visibility: "public",
12756        example: "123",
12757        changelog: [
12758            {
12759                version: "0.3.0",
12760                prs: [
12761                    171
12762                ]
12763            }
12764        ]
12765    },
12766    "mcp.client.name": {
12767        brief: "Name of the MCP client application.",
12768        type: "string",
12769        applyScrubbing: {
12770            key: "manual"
12771        },
12772        isInOtel: !1,
12773        visibility: "public",
12774        example: "claude-desktop",
12775        changelog: [
12776            {
12777                version: "0.3.0",
12778                prs: [
12779                    171
12780                ]
12781            }
12782        ]
12783    },
12784    "mcp.client.title": {
12785        brief: "Display title of the MCP client application.",
12786        type: "string",
12787        applyScrubbing: {
12788            key: "manual",
12789            reason: "Client titles may reveal user-specific application configurations or custom setups"
12790        },
12791        isInOtel: !1,
12792        visibility: "public",
12793        example: "Claude Desktop",
12794        changelog: [
12795            {
12796                version: "0.3.0",
12797                prs: [
12798                    171
12799                ]
12800            }
12801        ]
12802    },
12803    "mcp.client.version": {
12804        brief: "Version of the MCP client application.",
12805        type: "string",
12806        applyScrubbing: {
12807            key: "manual"
12808        },
12809        isInOtel: !1,
12810        visibility: "public",
12811        example: "1.0.0",
12812        changelog: [
12813            {
12814                version: "0.3.0",
12815                prs: [
12816                    171
12817                ]
12818            }
12819        ]
12820    },
12821    "mcp.lifecycle.phase": {
12822        brief: "Lifecycle phase indicator for MCP operations.",
12823        type: "string",
12824        applyScrubbing: {
12825            key: "manual"
12826        },
12827        isInOtel: !1,
12828        visibility: "public",
12829        example: "initialization_complete",
12830        changelog: [
12831            {
12832                version: "0.3.0",
12833                prs: [
12834                    171
12835                ]
12836            }
12837        ]
12838    },
12839    "mcp.logging.data_type": {
12840        brief: "Data type of the logged message content.",
12841        type: "string",
12842        applyScrubbing: {
12843            key: "manual"
12844        },
12845        isInOtel: !1,
12846        visibility: "public",
12847        example: "string",
12848        changelog: [
12849            {
12850                version: "0.3.0",
12851                prs: [
12852                    171
12853                ]
12854            }
12855        ]
12856    },
12857    "mcp.logging.level": {
12858        brief: "Log level for MCP logging operations.",
12859        type: "string",
12860        applyScrubbing: {
12861            key: "manual"
12862        },
12863        isInOtel: !1,
12864        visibility: "public",
12865        example: "info",
12866        changelog: [
12867            {
12868                version: "0.3.0",
12869                prs: [
12870                    171
12871                ]
12872            }
12873        ]
12874    },
12875    "mcp.logging.logger": {
12876        brief: "Logger name for MCP logging operations.",
12877        type: "string",
12878        applyScrubbing: {
12879            key: "manual",
12880            reason: "Logger names may be user-defined and could contain sensitive information"
12881        },
12882        isInOtel: !1,
12883        visibility: "public",
12884        example: "mcp_server",
12885        changelog: [
12886            {
12887                version: "0.3.0",
12888                prs: [
12889                    171
12890                ]
12891            }
12892        ]
12893    },
12894    "mcp.logging.message": {
12895        brief: "Log message content from MCP logging operations.",
12896        type: "string",
12897        applyScrubbing: {
12898            key: "auto",
12899            reason: "Log messages can contain user data"
12900        },
12901        isInOtel: !1,
12902        visibility: "public",
12903        example: "Tool execution completed successfully",
12904        changelog: [
12905            {
12906                version: "0.3.0",
12907                prs: [
12908                    171
12909                ]
12910            }
12911        ]
12912    },
12913    "mcp.method.name": {
12914        brief: "The name of the MCP request or notification method being called.",
12915        type: "string",
12916        applyScrubbing: {
12917            key: "manual"
12918        },
12919        isInOtel: !0,
12920        visibility: "public",
12921        example: "tools/call",
12922        changelog: [
12923            {
12924                version: "0.12.0",
12925                prs: [
12926                    420
12927                ],
12928                description: "Set is_in_otel=true, attribute exists in OTel MCP registry"
12929            },
12930            {
12931                version: "0.3.0",
12932                prs: [
12933                    171
12934                ]
12935            }
12936        ]
12937    },
12938    "mcp.progress.current": {
12939        brief: "Current progress value of an MCP operation.",
12940        type: "integer",
12941        applyScrubbing: {
12942            key: "manual"
12943        },
12944        isInOtel: !1,
12945        visibility: "public",
12946        example: 50,
12947        changelog: [
12948            {
12949                version: "0.4.0",
12950                prs: [
12951                    228
12952                ]
12953            },
12954            {
12955                version: "0.3.0",
12956                prs: [
12957                    171
12958                ]
12959            }
12960        ]
12961    },
12962    "mcp.progress.message": {
12963        brief: "Progress message describing the current state of an MCP operation.",
12964        type: "string",
12965        applyScrubbing: {
12966            key: "manual",
12967            reason: "Progress messages may contain user-specific or sensitive information"
12968        },
12969        isInOtel: !1,
12970        visibility: "public",
12971        example: "Processing 50 of 100 items",
12972        changelog: [
12973            {
12974                version: "0.3.0",
12975                prs: [
12976                    171
12977                ]
12978            }
12979        ]
12980    },
12981    "mcp.progress.percentage": {
12982        brief: "Calculated progress percentage of an MCP operation. Computed from current/total * 100.",
12983        type: "double",
12984        applyScrubbing: {
12985            key: "manual"
12986        },
12987        isInOtel: !1,
12988        visibility: "public",
12989        example: 50,
12990        changelog: [
12991            {
12992                version: "0.4.0",
12993                prs: [
12994                    228
12995                ]
12996            },
12997            {
12998                version: "0.3.0",
12999                prs: [
13000                    171
13001                ]
13002            }
13003        ]
13004    },
13005    "mcp.progress.token": {
13006        brief: "Token for tracking progress of an MCP operation.",
13007        type: "string",
13008        applyScrubbing: {
13009            key: "manual"
13010        },
13011        isInOtel: !1,
13012        visibility: "public",
13013        example: "progress-token-123",
13014        changelog: [
13015            {
13016                version: "0.3.0",
13017                prs: [
13018                    171
13019                ]
13020            }
13021        ]
13022    },
13023    "mcp.progress.total": {
13024        brief: "Total progress target value of an MCP operation.",
13025        type: "integer",
13026        applyScrubbing: {
13027            key: "manual"
13028        },
13029        isInOtel: !1,
13030        visibility: "public",
13031        example: 100,
13032        changelog: [
13033            {
13034                version: "0.4.0",
13035                prs: [
13036                    228
13037                ]
13038            },
13039            {
13040                version: "0.3.0",
13041                prs: [
13042                    171
13043                ]
13044            }
13045        ]
13046    },
13047    "mcp.prompt.name": {
13048        brief: "Name of the MCP prompt template being used.",
13049        type: "string",
13050        applyScrubbing: {
13051            key: "manual",
13052            reason: "Prompt names may reveal user behavior patterns or sensitive operations"
13053        },
13054        isInOtel: !1,
13055        visibility: "public",
13056        example: "summarize",
13057        deprecation: {
13058            replacement: "gen_ai.prompt.name",
13059            reason: "OTel uses gen_ai.prompt.name for MCP prompt names"
13060        },
13061        aliases: [
13062            "gen_ai.prompt.name"
13063        ],
13064        changelog: [
13065            {
13066                version: "0.12.0",
13067                prs: [
13068                    420
13069                ],
13070                description: "Deprecated in favor of gen_ai.prompt.name"
13071            },
13072            {
13073                version: "0.3.0",
13074                prs: [
13075                    171
13076                ]
13077            }
13078        ]
13079    },
13080    "mcp.prompt.result.description": {
13081        brief: "Description of the prompt result.",
13082        type: "string",
13083        applyScrubbing: {
13084            key: "auto"
13085        },
13086        isInOtel: !1,
13087        visibility: "public",
13088        example: "A summary of the requested information",
13089        changelog: [
13090            {
13091                version: "0.3.0",
13092                prs: [
13093                    171
13094                ]
13095            }
13096        ]
13097    },
13098    "mcp.prompt.result.message_content": {
13099        brief: "Content of the message in the prompt result. Used for single message results only.",
13100        type: "string",
13101        applyScrubbing: {
13102            key: "auto"
13103        },
13104        isInOtel: !1,
13105        visibility: "public",
13106        example: "Please provide a summary of the document",
13107        changelog: [
13108            {
13109                version: "0.3.0",
13110                prs: [
13111                    171
13112                ]
13113            }
13114        ]
13115    },
13116    "mcp.prompt.result.message_count": {
13117        brief: "Number of messages in the prompt result.",
13118        type: "integer",
13119        applyScrubbing: {
13120            key: "manual"
13121        },
13122        isInOtel: !1,
13123        visibility: "public",
13124        example: 3,
13125        changelog: [
13126            {
13127                version: "0.4.0",
13128                prs: [
13129                    228
13130                ]
13131            },
13132            {
13133                version: "0.3.0",
13134                prs: [
13135                    171
13136                ]
13137            }
13138        ]
13139    },
13140    "mcp.prompt.result.message_role": {
13141        brief: "Role of the message in the prompt result. Used for single message results only.",
13142        type: "string",
13143        applyScrubbing: {
13144            key: "manual"
13145        },
13146        isInOtel: !1,
13147        visibility: "public",
13148        example: "user",
13149        changelog: [
13150            {
13151                version: "0.3.0",
13152                prs: [
13153                    171
13154                ]
13155            }
13156        ]
13157    },
13158    "mcp.protocol.ready": {
13159        brief: "Protocol readiness indicator for MCP session. Non-zero value indicates the protocol is ready.",
13160        type: "integer",
13161        applyScrubbing: {
13162            key: "manual"
13163        },
13164        isInOtel: !1,
13165        visibility: "public",
13166        example: 1,
13167        changelog: [
13168            {
13169                version: "0.4.0",
13170                prs: [
13171                    228
13172                ]
13173            },
13174            {
13175                version: "0.3.0",
13176                prs: [
13177                    171
13178                ]
13179            }
13180        ]
13181    },
13182    "mcp.protocol.version": {
13183        brief: "MCP protocol version used in the session.",
13184        type: "string",
13185        applyScrubbing: {
13186            key: "manual"
13187        },
13188        isInOtel: !0,
13189        visibility: "public",
13190        example: "2024-11-05",
13191        changelog: [
13192            {
13193                version: "0.12.0",
13194                prs: [
13195                    420
13196                ],
13197                description: "Set is_in_otel=true, attribute exists in OTel MCP registry"
13198            },
13199            {
13200                version: "0.3.0",
13201                prs: [
13202                    171
13203                ]
13204            }
13205        ]
13206    },
13207    "mcp.request.argument.<key>": {
13208        brief: "MCP request argument with dynamic key suffix. The <key> is replaced with the actual argument name. The value is a JSON-stringified representation of the argument value.",
13209        type: "string",
13210        applyScrubbing: {
13211            key: "auto",
13212            reason: "Arguments contain user input"
13213        },
13214        isInOtel: !1,
13215        visibility: "public",
13216        hasDynamicSuffix: !0,
13217        example: "mcp.request.argument.query='weather in Paris'",
13218        changelog: [
13219            {
13220                version: "0.3.0",
13221                prs: [
13222                    176
13223                ]
13224            }
13225        ]
13226    },
13227    "mcp.request.argument.name": {
13228        brief: "Name argument from prompts/get MCP request.",
13229        type: "string",
13230        applyScrubbing: {
13231            key: "auto",
13232            reason: "Prompt names can contain user input"
13233        },
13234        isInOtel: !1,
13235        visibility: "public",
13236        example: "summarize",
13237        changelog: [
13238            {
13239                version: "0.3.0",
13240                prs: [
13241                    171
13242                ]
13243            }
13244        ]
13245    },
13246    "mcp.request.argument.uri": {
13247        brief: "URI argument from resources/read MCP request.",
13248        type: "string",
13249        applyScrubbing: {
13250            key: "auto",
13251            reason: "URIs can contain user file paths"
13252        },
13253        isInOtel: !1,
13254        visibility: "public",
13255        example: "file:///path/to/resource",
13256        changelog: [
13257            {
13258                version: "0.3.0",
13259                prs: [
13260                    171
13261                ]
13262            }
13263        ]
13264    },
13265    "mcp.request.id": {
13266        brief: "JSON-RPC request identifier for the MCP request. Unique within the MCP session.",
13267        type: "string",
13268        applyScrubbing: {
13269            key: "manual"
13270        },
13271        isInOtel: !1,
13272        visibility: "public",
13273        example: "1",
13274        deprecation: {
13275            replacement: "jsonrpc.request.id",
13276            reason: "OTel models MCP as JSON-RPC, uses jsonrpc.request.id"
13277        },
13278        aliases: [
13279            "jsonrpc.request.id"
13280        ],
13281        changelog: [
13282            {
13283                version: "0.12.0",
13284                prs: [
13285                    420
13286                ],
13287                description: "Deprecated in favor of jsonrpc.request.id"
13288            },
13289            {
13290                version: "0.3.0",
13291                prs: [
13292                    171
13293                ]
13294            }
13295        ]
13296    },
13297    "mcp.resource.protocol": {
13298        brief: "Protocol of the resource URI being accessed, extracted from the URI.",
13299        type: "string",
13300        applyScrubbing: {
13301            key: "manual"
13302        },
13303        isInOtel: !1,
13304        visibility: "public",
13305        example: "file",
13306        deprecation: {
13307            replacement: "network.protocol.name",
13308            reason: "OTel uses the generic network.protocol.name attribute"
13309        },
13310        aliases: [
13311            "network.protocol.name",
13312            "net.protocol.name"
13313        ],
13314        changelog: [
13315            {
13316                version: "0.12.0",
13317                prs: [
13318                    420
13319                ],
13320                description: "Deprecated in favor of network.protocol.name"
13321            },
13322            {
13323                version: "0.3.0",
13324                prs: [
13325                    171
13326                ]
13327            }
13328        ]
13329    },
13330    "mcp.resource.uri": {
13331        brief: "The resource URI being accessed in an MCP operation.",
13332        type: "string",
13333        applyScrubbing: {
13334            key: "auto",
13335            reason: "URIs can contain sensitive file paths"
13336        },
13337        isInOtel: !0,
13338        visibility: "public",
13339        example: "file:///path/to/file.txt",
13340        changelog: [
13341            {
13342                version: "0.12.0",
13343                prs: [
13344                    420
13345                ],
13346                description: "Set is_in_otel=true, attribute exists in OTel MCP registry"
13347            },
13348            {
13349                version: "0.3.0",
13350                prs: [
13351                    171
13352                ]
13353            }
13354        ]
13355    },
13356    "mcp.server.name": {
13357        brief: "Name of the MCP server application.",
13358        type: "string",
13359        applyScrubbing: {
13360            key: "manual"
13361        },
13362        isInOtel: !1,
13363        visibility: "public",
13364        example: "sentry-mcp-server",
13365        changelog: [
13366            {
13367                version: "0.3.0",
13368                prs: [
13369                    171
13370                ]
13371            }
13372        ]
13373    },
13374    "mcp.server.title": {
13375        brief: "Display title of the MCP server application.",
13376        type: "string",
13377        applyScrubbing: {
13378            key: "manual",
13379            reason: "Server titles may reveal user-specific application configurations or custom setups"
13380        },
13381        isInOtel: !1,
13382        visibility: "public",
13383        example: "Sentry MCP Server",
13384        changelog: [
13385            {
13386                version: "0.3.0",
13387                prs: [
13388                    171
13389                ]
13390            }
13391        ]
13392    },
13393    "mcp.server.version": {
13394        brief: "Version of the MCP server application.",
13395        type: "string",
13396        applyScrubbing: {
13397            key: "manual"
13398        },
13399        isInOtel: !1,
13400        visibility: "public",
13401        example: "0.1.0",
13402        changelog: [
13403            {
13404                version: "0.3.0",
13405                prs: [
13406                    171
13407                ]
13408            }
13409        ]
13410    },
13411    "mcp.session.id": {
13412        brief: "Identifier for the MCP session.",
13413        type: "string",
13414        applyScrubbing: {
13415            key: "manual"
13416        },
13417        isInOtel: !0,
13418        visibility: "public",
13419        example: "550e8400-e29b-41d4-a716-446655440000",
13420        changelog: [
13421            {
13422                version: "0.12.0",
13423                prs: [
13424                    420
13425                ],
13426                description: "Set is_in_otel=true, attribute exists in OTel MCP registry"
13427            },
13428            {
13429                version: "0.3.0",
13430                prs: [
13431                    171
13432                ]
13433            }
13434        ]
13435    },
13436    "mcp.tool.name": {
13437        brief: "Name of the MCP tool being called.",
13438        type: "string",
13439        applyScrubbing: {
13440            key: "manual"
13441        },
13442        isInOtel: !1,
13443        visibility: "public",
13444        example: "calculator",
13445        deprecation: {
13446            replacement: "gen_ai.tool.name",
13447            reason: "OTel uses gen_ai.tool.name for MCP tool names"
13448        },
13449        aliases: [
13450            "gen_ai.tool.name",
13451            "ai.function_call"
13452        ],
13453        changelog: [
13454            {
13455                version: "0.12.0",
13456                prs: [
13457                    420
13458                ],
13459                description: "Deprecated in favor of gen_ai.tool.name"
13460            },
13461            {
13462                version: "0.3.0",
13463                prs: [
13464                    171
13465                ]
13466            }
13467        ]
13468    },
13469    "mcp.tool.result.content": {
13470        brief: "The content of the tool result.",
13471        type: "string",
13472        applyScrubbing: {
13473            key: "auto",
13474            reason: "Tool results can contain user data"
13475        },
13476        isInOtel: !1,
13477        visibility: "public",
13478        example: '{"output": "rainy", "toolCallId": "1"}',
13479        deprecation: {
13480            replacement: "gen_ai.tool.call.result",
13481            reason: "OTel uses gen_ai.tool.call.result for MCP tool results"
13482        },
13483        aliases: [
13484            "gen_ai.tool.call.result",
13485            "gen_ai.tool.message",
13486            "gen_ai.tool.output"
13487        ],
13488        changelog: [
13489            {
13490                version: "0.12.0",
13491                prs: [
13492                    420
13493                ],
13494                description: "Deprecated in favor of gen_ai.tool.call.result"
13495            },
13496            {
13497                version: "0.3.0",
13498                prs: [
13499                    171
13500                ]
13501            },
13502            {
13503                version: "0.2.0",
13504                prs: [
13505                    164
13506                ]
13507            }
13508        ]
13509    },
13510    "mcp.tool.result.content_count": {
13511        brief: "Number of content items in the tool result.",
13512        type: "integer",
13513        applyScrubbing: {
13514            key: "manual"
13515        },
13516        isInOtel: !1,
13517        visibility: "public",
13518        example: 1,
13519        changelog: [
13520            {
13521                version: "0.4.0",
13522                prs: [
13523                    228
13524                ]
13525            },
13526            {
13527                version: "0.3.0",
13528                prs: [
13529                    171
13530                ]
13531            }
13532        ]
13533    },
13534    "mcp.tool.result.is_error": {
13535        brief: "Whether a tool execution resulted in an error.",
13536        type: "boolean",
13537        applyScrubbing: {
13538            key: "manual"
13539        },
13540        isInOtel: !1,
13541        visibility: "public",
13542        example: !1,
13543        deprecation: {
13544            replacement: "error.type",
13545            reason: "OTel uses error.type set to 'tool_error' when isError is true. Cannot be automatically backfilled due to type mismatch (boolean vs string)."
13546        },
13547        changelog: [
13548            {
13549                version: "0.12.0",
13550                prs: [
13551                    420
13552                ],
13553                description: "Deprecated in favor of error.type"
13554            },
13555            {
13556                version: "0.3.0",
13557                prs: [
13558                    171
13559                ]
13560            }
13561        ]
13562    },
13563    "mcp.transport": {
13564        brief: "Transport method used for MCP communication.",
13565        type: "string",
13566        applyScrubbing: {
13567            key: "manual"
13568        },
13569        isInOtel: !1,
13570        visibility: "public",
13571        example: "stdio",
13572        deprecation: {
13573            replacement: "network.transport",
13574            reason: "OTel uses the generic network.transport attribute"
13575        },
13576        aliases: [
13577            "network.transport",
13578            "net.transport"
13579        ],
13580        changelog: [
13581            {
13582                version: "0.12.0",
13583                prs: [
13584                    420
13585                ],
13586                description: "Deprecated in favor of network.transport"
13587            },
13588            {
13589                version: "0.3.0",
13590                prs: [
13591                    171
13592                ]
13593            }
13594        ]
13595    },
13596    "mdc.<key>": {
13597        brief: "Attributes from the Mapped Diagnostic Context (MDC) present at the moment the log record was created. The MDC is supported by all the most popular logging solutions in the Java ecosystem, and it's usually implemented as a thread-local map that stores context for e.g. a specific request.",
13598        type: "string",
13599        applyScrubbing: {
13600            key: "auto"
13601        },
13602        isInOtel: !1,
13603        visibility: "public",
13604        hasDynamicSuffix: !0,
13605        example: "mdc.some_key='some_value'",
13606        changelog: [
13607            {
13608                version: "0.3.0",
13609                prs: [
13610                    176
13611                ]
13612            }
13613        ]
13614    },
13615    "messaging.batch.message_count": {
13616        brief: "The number of messages sent, received, or processed in the scope of the batching operation.",
13617        type: "integer",
13618        applyScrubbing: {
13619            key: "manual"
13620        },
13621        isInOtel: !0,
13622        visibility: "public",
13623        example: 10,
13624        changelog: [
13625            {
13626                version: "0.6.0",
13627                prs: [
13628                    341
13629                ],
13630                description: "Added messaging.batch.message_count attribute"
13631            }
13632        ]
13633    },
13634    "messaging.destination": {
13635        brief: "The message destination name.",
13636        type: "string",
13637        applyScrubbing: {
13638            key: "manual"
13639        },
13640        isInOtel: !1,
13641        visibility: "public",
13642        example: "BestTopic",
13643        deprecation: {
13644            replacement: "messaging.destination.name",
13645            reason: "This attribute is being deprecated in favor of messaging.destination.name, which is the OTel-aligned replacement."
13646        },
13647        aliases: [
13648            "messaging.destination.name"
13649        ],
13650        changelog: [
13651            {
13652                version: "0.16.0",
13653                prs: [
13654                    482
13655                ],
13656                description: "Added messaging.destination attribute, deprecated in favor of messaging.destination.name"
13657            }
13658        ]
13659    },
13660    "messaging.destination.connection": {
13661        brief: "The message destination connection.",
13662        type: "string",
13663        applyScrubbing: {
13664            key: "manual"
13665        },
13666        isInOtel: !1,
13667        visibility: "public",
13668        example: "BestTopic",
13669        changelog: [
13670            {
13671                version: "0.1.0",
13672                prs: [
13673                    127
13674                ]
13675            },
13676            {
13677                version: "0.0.0"
13678            }
13679        ]
13680    },
13681    "messaging.destination.name": {
13682        brief: "The message destination name.",
13683        type: "string",
13684        applyScrubbing: {
13685            key: "manual"
13686        },
13687        isInOtel: !0,
13688        visibility: "public",
13689        example: "BestTopic",
13690        aliases: [
13691            "messaging.destination"
13692        ],
13693        changelog: [
13694            {
13695                version: "0.16.0",
13696                prs: [
13697                    482
13698                ],
13699                description: "Added messaging.destination as an alias"
13700            },
13701            {
13702                version: "0.1.0",
13703                prs: [
13704                    127
13705                ]
13706            },
13707            {
13708                version: "0.0.0"
13709            }
13710        ]
13711    },
13712    "messaging.message.body.size": {
13713        brief: "The size of the message body in bytes.",
13714        type: "integer",
13715        applyScrubbing: {
13716            key: "manual"
13717        },
13718        isInOtel: !0,
13719        visibility: "public",
13720        example: 839,
13721        changelog: [
13722            {
13723                version: "0.4.0",
13724                prs: [
13725                    228
13726                ]
13727            },
13728            {
13729                version: "0.0.0"
13730            }
13731        ]
13732    },
13733    "messaging.message.conversation_id": {
13734        brief: 'The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called "Correlation ID".',
13735        type: "string",
13736        applyScrubbing: {
13737            key: "manual"
13738        },
13739        isInOtel: !0,
13740        visibility: "public",
13741        example: "MyConversationId",
13742        changelog: [
13743            {
13744                version: "0.16.0",
13745                prs: [
13746                    468
13747                ],
13748                description: "Added messaging.message.conversation_id attribute"
13749            }
13750        ]
13751    },
13752    "messaging.message.envelope.size": {
13753        brief: "The size of the message body and metadata in bytes.",
13754        type: "integer",
13755        applyScrubbing: {
13756            key: "manual"
13757        },
13758        isInOtel: !0,
13759        visibility: "public",
13760        example: 1045,
13761        changelog: [
13762            {
13763                version: "0.4.0",
13764                prs: [
13765                    228
13766                ]
13767            },
13768            {
13769                version: "0.0.0"
13770            }
13771        ]
13772    },
13773    "messaging.message.id": {
13774        brief: "A value used by the messaging system as an identifier for the message, represented as a string.",
13775        type: "string",
13776        applyScrubbing: {
13777            key: "manual"
13778        },
13779        isInOtel: !0,
13780        visibility: "public",
13781        example: "f47ac10b58cc4372a5670e02b2c3d479",
13782        changelog: [
13783            {
13784                version: "0.1.0",
13785                prs: [
13786                    127
13787                ]
13788            },
13789            {
13790                version: "0.0.0"
13791            }
13792        ]
13793    },
13794    "messaging.message.receive.latency": {
13795        brief: "The latency between when the message was published and received.",
13796        type: "integer",
13797        applyScrubbing: {
13798            key: "manual"
13799        },
13800        isInOtel: !1,
13801        visibility: "public",
13802        example: 1732847252,
13803        changelog: [
13804            {
13805                version: "0.4.0",
13806                prs: [
13807                    228
13808                ]
13809            },
13810            {
13811                version: "0.0.0"
13812            }
13813        ]
13814    },
13815    "messaging.message.retry.count": {
13816        brief: "The amount of attempts to send the message.",
13817        type: "integer",
13818        applyScrubbing: {
13819            key: "manual"
13820        },
13821        isInOtel: !1,
13822        visibility: "public",
13823        example: 2,
13824        changelog: [
13825            {
13826                version: "0.4.0",
13827                prs: [
13828                    228
13829                ]
13830            },
13831            {
13832                version: "0.0.0"
13833            }
13834        ]
13835    },
13836    "messaging.operation.name": {
13837        brief: "The name of the messaging operation being performed",
13838        type: "string",
13839        applyScrubbing: {
13840            key: "manual"
13841        },
13842        isInOtel: !0,
13843        visibility: "public",
13844        example: "send",
13845        changelog: [
13846            {
13847                version: "0.11.0",
13848                prs: [
13849                    392
13850                ],
13851                description: "Added messaging.operation.name attribute"
13852            }
13853        ]
13854    },
13855    "messaging.operation.type": {
13856        brief: "A string identifying the type of the messaging operation",
13857        type: "string",
13858        applyScrubbing: {
13859            key: "manual"
13860        },
13861        isInOtel: !0,
13862        visibility: "public",
13863        example: "create",
13864        changelog: [
13865            {
13866                version: "0.1.0",
13867                prs: [
13868                    51,
13869                    127
13870                ]
13871            }
13872        ]
13873    },
13874    "messaging.rabbitmq.destination.routing_key": {
13875        brief: "RabbitMQ message routing key.",
13876        type: "string",
13877        applyScrubbing: {
13878            key: "manual"
13879        },
13880        isInOtel: !0,
13881        visibility: "public",
13882        example: "myKey",
13883        changelog: [
13884            {
13885                version: "0.16.0",
13886                prs: [
13887                    468
13888                ],
13889                description: "Added messaging.rabbitmq.destination.routing_key attribute"
13890            }
13891        ]
13892    },
13893    "messaging.system": {
13894        brief: "The messaging system as identified by the client instrumentation.",
13895        type: "string",
13896        applyScrubbing: {
13897            key: "manual"
13898        },
13899        isInOtel: !0,
13900        visibility: "public",
13901        example: "activemq",
13902        changelog: [
13903            {
13904                version: "0.1.0",
13905                prs: [
13906                    127
13907                ]
13908            },
13909            {
13910                version: "0.0.0"
13911            }
13912        ]
13913    },
13914    method: {
13915        brief: "The HTTP method used.",
13916        type: "string",
13917        applyScrubbing: {
13918            key: "manual"
13919        },
13920        isInOtel: !1,
13921        visibility: "public",
13922        example: "GET",
13923        deprecation: {
13924            replacement: "http.request.method"
13925        },
13926        aliases: [
13927            "http.request.method",
13928            "http.request_method",
13929            "http.method"
13930        ],
13931        changelog: [
13932            {
13933                version: "0.1.0",
13934                prs: [
13935                    61,
13936                    127
13937                ]
13938            },
13939            {
13940                version: "0.0.0"
13941            }
13942        ]
13943    },
13944    "middleware.name": {
13945        brief: "The name of the middleware.",
13946        type: "string",
13947        applyScrubbing: {
13948            key: "manual"
13949        },
13950        isInOtel: !1,
13951        visibility: "public",
13952        example: "AuthenticationMiddleware",
13953        changelog: [
13954            {
13955                version: "0.6.0",
13956                prs: [
13957                    336
13958                ],
13959                description: "Added middleware.name attribute"
13960            }
13961        ]
13962    },
13963    "navigation.origin": {
13964        brief: "The origin of the navigation (usually client side router navigations). Should preferrably parameterized template (like url.template) or a URL path otherwise.",
13965        type: "string",
13966        applyScrubbing: {
13967            key: "auto"
13968        },
13969        isInOtel: !1,
13970        visibility: "public",
13971        example: "/users/:id",
13972        aliases: [
13973            "sentry.sveltekit.navigation.from"
13974        ],
13975        changelog: [
13976            {
13977                version: "0.16.0",
13978                prs: [
13979                    467
13980                ],
13981                description: "Added navigation.origin attribute"
13982            }
13983        ]
13984    },
13985    "navigation.route.id": {
13986        brief: "The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id).",
13987        type: "string",
13988        applyScrubbing: {
13989            key: "auto"
13990        },
13991        isInOtel: !1,
13992        visibility: "public",
13993        example: "AboutView",
13994        changelog: [
13995            {
13996                version: "0.16.0",
13997                prs: [
13998                    468
13999                ],
14000                description: "Added navigation.route.id attribute"
14001            }
14002        ]
14003    },
14004    "navigation.type": {
14005        brief: "The type of navigation done by a client-side router.",
14006        type: "string",
14007        applyScrubbing: {
14008            key: "manual"
14009        },
14010        isInOtel: !1,
14011        visibility: "public",
14012        example: "router.push",
14013        aliases: [
14014            "sentry.sveltekit.navigation.type"
14015        ],
14016        changelog: [
14017            {
14018                version: "0.16.0",
14019                prs: [
14020                    467
14021                ],
14022                description: "Added new deprecated alias"
14023            },
14024            {
14025                version: "0.1.0",
14026                prs: [
14027                    127
14028                ]
14029            },
14030            {
14031                version: "0.0.0"
14032            }
14033        ]
14034    },
14035    "nel.elapsed_time": {
14036        brief: "The elapsed number of milliseconds between the start of the resource fetch and when it was completed or aborted by the user agent.",
14037        type: "integer",
14038        applyScrubbing: {
14039            key: "manual"
14040        },
14041        isInOtel: !1,
14042        visibility: "public",
14043        example: 100,
14044        changelog: [
14045            {
14046                version: "0.4.0",
14047                prs: [
14048                    228
14049                ]
14050            },
14051            {
14052                version: "0.1.0",
14053                prs: [
14054                    68
14055                ]
14056            }
14057        ]
14058    },
14059    "nel.phase": {
14060        brief: 'If request failed, the phase of its network error. If request succeeded, "application".',
14061        type: "string",
14062        applyScrubbing: {
14063            key: "manual"
14064        },
14065        isInOtel: !1,
14066        visibility: "public",
14067        example: "application",
14068        changelog: [
14069            {
14070                version: "0.1.0",
14071                prs: [
14072                    68,
14073                    127
14074                ]
14075            }
14076        ]
14077    },
14078    "nel.referrer": {
14079        brief: "request's referrer, as determined by the referrer policy associated with its client.",
14080        type: "string",
14081        applyScrubbing: {
14082            key: "auto"
14083        },
14084        isInOtel: !1,
14085        visibility: "public",
14086        example: "https://example.com/foo?bar=baz",
14087        changelog: [
14088            {
14089                version: "0.1.0",
14090                prs: [
14091                    68,
14092                    127
14093                ]
14094            }
14095        ]
14096    },
14097    "nel.sampling_function": {
14098        brief: "The sampling function used to determine if the request should be sampled.",
14099        type: "double",
14100        applyScrubbing: {
14101            key: "manual"
14102        },
14103        isInOtel: !1,
14104        visibility: "public",
14105        example: .5,
14106        changelog: [
14107            {
14108                version: "0.4.0",
14109                prs: [
14110                    228
14111                ]
14112            },
14113            {
14114                version: "0.1.0",
14115                prs: [
14116                    68
14117                ]
14118            }
14119        ]
14120    },
14121    "nel.type": {
14122        brief: 'If request failed, the type of its network error. If request succeeded, "ok".',
14123        type: "string",
14124        applyScrubbing: {
14125            key: "manual"
14126        },
14127        isInOtel: !1,
14128        visibility: "public",
14129        example: "dns.unreachable",
14130        changelog: [
14131            {
14132                version: "0.1.0",
14133                prs: [
14134                    68,
14135                    127
14136                ]
14137            }
14138        ]
14139    },
14140    "network.connection.effective_type": {
14141        brief: "Specifies the effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).",
14142        type: "string",
14143        applyScrubbing: {
14144            key: "manual"
14145        },
14146        isInOtel: !1,
14147        visibility: "public",
14148        example: "4g",
14149        aliases: [
14150            "effectiveConnectionType"
14151        ],
14152        changelog: [
14153            {
14154                version: "0.5.0",
14155                prs: [
14156                    279
14157                ],
14158                description: "Added attribute network.connection.effective_type to be used instead of effectiveConnectionType"
14159            }
14160        ]
14161    },
14162    "network.connection.rtt": {
14163        brief: "Specifies the estimated effective round-trip time of the current connection, in milliseconds.",
14164        type: "integer",
14165        applyScrubbing: {
14166            key: "manual"
14167        },
14168        isInOtel: !1,
14169        visibility: "public",
14170        example: 100,
14171        aliases: [
14172            "connection.rtt"
14173        ],
14174        changelog: [
14175            {
14176                version: "0.5.0",
14177                prs: [
14178                    279
14179                ],
14180                description: "Added attribute network.connection.rtt to be used instead of connection.rtt"
14181            }
14182        ]
14183    },
14184    "network.connection.type": {
14185        brief: "Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).",
14186        type: "string",
14187        applyScrubbing: {
14188            key: "manual"
14189        },
14190        isInOtel: !0,
14191        visibility: "public",
14192        example: "wifi",
14193        aliases: [
14194            "device.connection_type",
14195            "connectionType"
14196        ],
14197        changelog: [
14198            {
14199                version: "0.5.0",
14200                prs: [
14201                    279
14202                ],
14203                description: "Added attribute network.connection.type to be used instead of connectionType"
14204            }
14205        ]
14206    },
14207    "network.local.address": {
14208        brief: "Local address of the network connection - IP address or Unix domain socket name.",
14209        type: "string",
14210        applyScrubbing: {
14211            key: "manual"
14212        },
14213        isInOtel: !0,
14214        visibility: "public",
14215        example: "10.1.2.80",
14216        aliases: [
14217            "net.host.ip",
14218            "net.sock.host.addr"
14219        ],
14220        changelog: [
14221            {
14222                version: "0.1.0",
14223                prs: [
14224                    127
14225                ]
14226            },
14227            {
14228                version: "0.0.0"
14229            }
14230        ]
14231    },
14232    "network.local.port": {
14233        brief: "Local port number of the network connection.",
14234        type: "integer",
14235        applyScrubbing: {
14236            key: "manual"
14237        },
14238        isInOtel: !0,
14239        visibility: "public",
14240        example: 65400,
14241        aliases: [
14242            "net.sock.host.port"
14243        ],
14244        changelog: [
14245            {
14246                version: "0.4.0",
14247                prs: [
14248                    228
14249                ]
14250            },
14251            {
14252                version: "0.0.0"
14253            }
14254        ]
14255    },
14256    "network.peer.address": {
14257        brief: "Peer address of the network connection - IP address or Unix domain socket name.",
14258        type: "string",
14259        applyScrubbing: {
14260            key: "auto"
14261        },
14262        isInOtel: !0,
14263        visibility: "public",
14264        example: "10.1.2.80",
14265        aliases: [
14266            "net.peer.ip",
14267            "net.sock.peer.addr"
14268        ],
14269        changelog: [
14270            {
14271                version: "0.1.0",
14272                prs: [
14273                    108,
14274                    127
14275                ]
14276            },
14277            {
14278                version: "0.0.0"
14279            }
14280        ]
14281    },
14282    "network.peer.port": {
14283        brief: "Peer port number of the network connection.",
14284        type: "integer",
14285        applyScrubbing: {
14286            key: "manual"
14287        },
14288        isInOtel: !0,
14289        visibility: "public",
14290        example: 65400,
14291        changelog: [
14292            {
14293                version: "0.4.0",
14294                prs: [
14295                    228
14296                ]
14297            },
14298            {
14299                version: "0.0.0"
14300            }
14301        ]
14302    },
14303    "network.protocol.name": {
14304        brief: "OSI application layer or non-OSI equivalent.",
14305        type: "string",
14306        applyScrubbing: {
14307            key: "manual"
14308        },
14309        isInOtel: !0,
14310        visibility: "public",
14311        example: "http",
14312        aliases: [
14313            "net.protocol.name",
14314            "mcp.resource.protocol"
14315        ],
14316        changelog: [
14317            {
14318                version: "0.1.0",
14319                prs: [
14320                    127
14321                ]
14322            },
14323            {
14324                version: "0.0.0"
14325            }
14326        ]
14327    },
14328    "network.protocol.version": {
14329        brief: "The actual version of the protocol used for network communication.",
14330        type: "string",
14331        applyScrubbing: {
14332            key: "manual"
14333        },
14334        isInOtel: !0,
14335        visibility: "public",
14336        example: "1.1",
14337        aliases: [
14338            "http.flavor",
14339            "net.protocol.version"
14340        ],
14341        changelog: [
14342            {
14343                version: "0.1.0",
14344                prs: [
14345                    127
14346                ]
14347            },
14348            {
14349                version: "0.0.0"
14350            }
14351        ]
14352    },
14353    "network.transport": {
14354        brief: "OSI transport layer or inter-process communication method.",
14355        type: "string",
14356        applyScrubbing: {
14357            key: "manual"
14358        },
14359        isInOtel: !0,
14360        visibility: "public",
14361        example: "tcp",
14362        aliases: [
14363            "net.transport",
14364            "mcp.transport"
14365        ],
14366        changelog: [
14367            {
14368                version: "0.1.0",
14369                prs: [
14370                    127
14371                ]
14372            },
14373            {
14374                version: "0.0.0"
14375            }
14376        ]
14377    },
14378    "network.type": {
14379        brief: "OSI network layer or non-OSI equivalent.",
14380        type: "string",
14381        applyScrubbing: {
14382            key: "manual"
14383        },
14384        isInOtel: !0,
14385        visibility: "public",
14386        example: "ipv4",
14387        changelog: [
14388            {
14389                version: "0.1.0",
14390                prs: [
14391                    127
14392                ]
14393            },
14394            {
14395                version: "0.0.0"
14396            }
14397        ]
14398    },
14399    "net.host.ip": {
14400        brief: "Local address of the network connection - IP address or Unix domain socket name.",
14401        type: "string",
14402        applyScrubbing: {
14403            key: "manual"
14404        },
14405        isInOtel: !0,
14406        visibility: "public",
14407        example: "192.168.0.1",
14408        deprecation: {
14409            replacement: "network.local.address"
14410        },
14411        aliases: [
14412            "network.local.address",
14413            "net.sock.host.addr"
14414        ],
14415        changelog: [
14416            {
14417                version: "0.1.0",
14418                prs: [
14419                    61,
14420                    108,
14421                    127
14422                ]
14423            },
14424            {
14425                version: "0.0.0"
14426            }
14427        ]
14428    },
14429    "net.host.name": {
14430        brief: "Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.",
14431        type: "string",
14432        applyScrubbing: {
14433            key: "manual"
14434        },
14435        isInOtel: !0,
14436        visibility: "public",
14437        example: "example.com",
14438        deprecation: {
14439            replacement: "server.address"
14440        },
14441        aliases: [
14442            "server.address",
14443            "http.server_name",
14444            "http.host",
14445            "server_name"
14446        ],
14447        changelog: [
14448            {
14449                version: "0.1.0",
14450                prs: [
14451                    61,
14452                    108,
14453                    127
14454                ]
14455            },
14456            {
14457                version: "0.0.0"
14458            }
14459        ]
14460    },
14461    "net.host.port": {
14462        brief: "Server port number.",
14463        type: "integer",
14464        applyScrubbing: {
14465            key: "manual"
14466        },
14467        isInOtel: !0,
14468        visibility: "public",
14469        example: 1337,
14470        deprecation: {
14471            replacement: "server.port"
14472        },
14473        aliases: [
14474            "server.port"
14475        ],
14476        changelog: [
14477            {
14478                version: "0.4.0",
14479                prs: [
14480                    228
14481                ]
14482            },
14483            {
14484                version: "0.1.0",
14485                prs: [
14486                    61
14487                ]
14488            },
14489            {
14490                version: "0.0.0"
14491            }
14492        ]
14493    },
14494    "net.peer.ip": {
14495        brief: "Peer address of the network connection - IP address or Unix domain socket name.",
14496        type: "string",
14497        applyScrubbing: {
14498            key: "auto"
14499        },
14500        isInOtel: !0,
14501        visibility: "public",
14502        example: "192.168.0.1",
14503        deprecation: {
14504            replacement: "network.peer.address"
14505        },
14506        aliases: [
14507            "network.peer.address",
14508            "net.sock.peer.addr"
14509        ],
14510        changelog: [
14511            {
14512                version: "0.1.0",
14513                prs: [
14514                    61,
14515                    108,
14516                    127
14517                ]
14518            },
14519            {
14520                version: "0.0.0"
14521            }
14522        ]
14523    },
14524   
14524 "net.peer.name": {
14525        brief: "Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.",
14526        type: "string",
14527        applyScrubbing: {
14528            key: "auto"
14529        },
14530        isInOtel: !0,
14531        visibility: "public",
14532        example: "example.com",
14533        deprecation: {
14534            replacement: "server.address",
14535            reason: "Deprecated, use server.address on client spans and client.address on server spans."
14536        },
14537        changelog: [
14538            {
14539                version: "0.1.0",
14540                prs: [
14541                    61,
14542                    127
14543                ]
14544            },
14545            {
14546                version: "0.0.0"
14547            }
14548        ]
14549    },
14550    "net.peer.port": {
14551        brief: "Peer port number.",
14552        type: "integer",
14553        applyScrubbing: {
14554            key: "manual"
14555        },
14556        isInOtel: !0,
14557        visibility: "public",
14558        example: 1337,
14559        deprecation: {
14560            replacement: "server.port",
14561            reason: "Deprecated, use server.port on client spans and client.port on server spans."
14562        },
14563        changelog: [
14564            {
14565                version: "0.4.0",
14566                prs: [
14567                    228
14568                ]
14569            },
14570            {
14571                version: "0.1.0",
14572                prs: [
14573                    61
14574                ]
14575            },
14576            {
14577                version: "0.0.0"
14578            }
14579        ]
14580    },
14581    "net.protocol.name": {
14582        brief: "OSI application layer or non-OSI equivalent.",
14583        type: "string",
14584        applyScrubbing: {
14585            key: "manual"
14586        },
14587        isInOtel: !0,
14588        visibility: "public",
14589        example: "http",
14590        deprecation: {
14591            replacement: "network.protocol.name"
14592        },
14593        aliases: [
14594            "network.protocol.name",
14595            "mcp.resource.protocol"
14596        ],
14597        changelog: [
14598            {
14599                version: "0.1.0",
14600                prs: [
14601                    61,
14602                    127
14603                ]
14604            },
14605            {
14606                version: "0.0.0"
14607            }
14608        ]
14609    },
14610    "net.protocol.version": {
14611        brief: "The actual version of the protocol used for network communication.",
14612        type: "string",
14613        applyScrubbing: {
14614            key: "manual"
14615        },
14616        isInOtel: !0,
14617        visibility: "public",
14618        example: "1.1",
14619        deprecation: {
14620            replacement: "network.protocol.version"
14621        },
14622        aliases: [
14623            "network.protocol.version",
14624            "http.flavor"
14625        ],
14626        changelog: [
14627            {
14628                version: "0.1.0",
14629                prs: [
14630                    61,
14631                    108,
14632                    127
14633                ]
14634            },
14635            {
14636                version: "0.0.0"
14637            }
14638        ]
14639    },
14640    "net.sock.family": {
14641        brief: "OSI transport and network layer",
14642        type: "string",
14643        applyScrubbing: {
14644            key: "manual"
14645        },
14646        isInOtel: !0,
14647        visibility: "public",
14648        example: "inet",
14649        deprecation: {
14650            replacement: "network.transport",
14651            reason: "Deprecated, use network.transport and network.type."
14652        },
14653        changelog: [
14654            {
14655                version: "0.1.0",
14656                prs: [
14657                    61,
14658                    127
14659                ]
14660            },
14661            {
14662                version: "0.0.0"
14663            }
14664        ]
14665    },
14666    "net.sock.host.addr": {
14667        brief: "Local address of the network connection mapping to Unix domain socket name.",
14668        type: "string",
14669        applyScrubbing: {
14670            key: "manual"
14671        },
14672        isInOtel: !0,
14673        visibility: "public",
14674        example: "/var/my.sock",
14675        deprecation: {
14676            replacement: "network.local.address"
14677        },
14678        aliases: [
14679            "network.local.address",
14680            "net.host.ip"
14681        ],
14682        changelog: [
14683            {
14684                version: "0.1.0",
14685                prs: [
14686                    61,
14687                    108,
14688                    127
14689                ]
14690            },
14691            {
14692                version: "0.0.0"
14693            }
14694        ]
14695    },
14696    "net.sock.host.port": {
14697        brief: "Local port number of the network connection.",
14698        type: "integer",
14699        applyScrubbing: {
14700            key: "manual"
14701        },
14702        isInOtel: !0,
14703        visibility: "public",
14704        example: 8080,
14705        deprecation: {
14706            replacement: "network.local.port"
14707        },
14708        aliases: [
14709            "network.local.port"
14710        ],
14711        changelog: [
14712            {
14713                version: "0.4.0",
14714                prs: [
14715                    228
14716                ]
14717            },
14718            {
14719                version: "0.1.0",
14720                prs: [
14721                    61
14722                ]
14723            },
14724            {
14725                version: "0.0.0"
14726            }
14727        ]
14728    },
14729    "net.sock.peer.addr": {
14730        brief: "Peer address of the network connection - IP address",
14731        type: "string",
14732        applyScrubbing: {
14733            key: "auto"
14734        },
14735        isInOtel: !0,
14736        visibility: "public",
14737        example: "192.168.0.1",
14738        deprecation: {
14739            replacement: "network.peer.address"
14740        },
14741        aliases: [
14742            "network.peer.address",
14743            "net.peer.ip"
14744        ],
14745        changelog: [
14746            {
14747                version: "0.1.0",
14748                prs: [
14749                    61,
14750                    108,
14751                    127
14752                ]
14753            },
14754            {
14755                version: "0.0.0"
14756            }
14757        ]
14758    },
14759    "net.sock.peer.name": {
14760        brief: "Peer address of the network connection - Unix domain socket name",
14761        type: "string",
14762        applyScrubbing: {
14763            key: "auto"
14764        },
14765        isInOtel: !0,
14766        visibility: "public",
14767        example: "/var/my.sock",
14768        deprecation: {
14769            reason: "Deprecated from OTEL, no replacement at this time"
14770        },
14771        changelog: [
14772            {
14773                version: "0.1.0",
14774                prs: [
14775                    61,
14776                    119,
14777                    127
14778                ]
14779            },
14780            {
14781                version: "0.0.0"
14782            }
14783        ]
14784    },
14785    "net.sock.peer.port": {
14786        brief: "Peer port number of the network connection.",
14787        type: "integer",
14788        applyScrubbing: {
14789            key: "manual"
14790        },
14791        isInOtel: !0,
14792        visibility: "public",
14793        example: 8080,
14794        deprecation: {
14795            replacement: "network.peer.port"
14796        },
14797        changelog: [
14798            {
14799                version: "0.4.0",
14800                prs: [
14801                    228
14802                ]
14803            },
14804            {
14805                version: "0.1.0",
14806                prs: [
14807                    61
14808                ]
14809            },
14810            {
14811                version: "0.0.0"
14812            }
14813        ]
14814    },
14815    "net.transport": {
14816        brief: "OSI transport layer or inter-process communication method.",
14817        type: "string",
14818        applyScrubbing: {
14819            key: "manual"
14820        },
14821        isInOtel: !0,
14822        visibility: "public",
14823        example: "tcp",
14824        deprecation: {
14825            replacement: "network.transport"
14826        },
14827        aliases: [
14828            "network.transport",
14829            "mcp.transport"
14830        ],
14831        changelog: [
14832            {
14833                version: "0.1.0",
14834                prs: [
14835                    61,
14836                    127
14837                ]
14838            },
14839            {
14840                version: "0.0.0"
14841            }
14842        ]
14843    },
14844    "os.build": {
14845        brief: "The build ID of the operating system.",
14846        type: "string",
14847        applyScrubbing: {
14848            key: "manual"
14849        },
14850        isInOtel: !1,
14851        visibility: "public",
14852        example: "1234567890",
14853        deprecation: {
14854            replacement: "os.build_id"
14855        },
14856        aliases: [
14857            "os.build_id"
14858        ],
14859        changelog: [
14860            {
14861                version: "0.5.0",
14862                prs: [
14863                    301
14864                ],
14865                description: "Added os.build attribute, deprecated 
14865in favor of os.build_id"
14866            }
14867        ]
14868    },
14869    "os.build_id": {
14870        brief: "The build ID of the operating system.",
14871        type: "string",
14872        applyScrubbing: {
14873            key: "manual"
14874        },
14875        isInOtel: !0,
14876        visibility: "public",
14877        example: "1234567890",
14878        aliases: [
14879            "os.build"
14880        ],
14881        changelog: [
14882            {
14883                version: "0.5.0",
14884                prs: [
14885                    301
14886                ],
14887                description: "Added os.build as alias"
14888            },
14889            {
14890                version: "0.1.0",
14891                prs: [
14892                    127
14893                ]
14894            },
14895            {
14896                version: "0.0.0"
14897            }
14898        ]
14899    },
14900    "os.description": {
14901        brief: "Human readable (not intended to be parsed) OS version information, like e.g. reported by ver or lsb_release -a commands.",
14902        type: "string",
14903        applyScrubbing: {
14904            key: "manual"
14905        },
14906        isInOtel: !0,
14907        visibility: "public",
14908        example: "Ubuntu 18.04.1 LTS",
14909        changelog: [
14910            {
14911                version: "0.1.0",
14912                prs: [
14913                    127
14914                ]
14915            },
14916            {
14917                version: "0.0.0"
14918            }
14919        ]
14920    },
14921    "os.kernel_version": {
14922        brief: "An independent kernel version string. Typically the entire output of the `uname` syscall.",
14923        type: "string",
14924        applyScrubbing: {
14925            key: "manual"
14926        },
14927        isInOtel: !1,
14928        visibility: "public",
14929        example: "20.2.0",
14930        changelog: [
14931            {
14932                version: "0.5.0",
14933                prs: [
14934                    301
14935                ],
14936                description: "Added os.kernel_version attribute"
14937            }
14938        ]
14939    },
14940    "os.name": {
14941        brief: "Human readable operating system name.",
14942        type: "string",
14943        applyScrubbing: {
14944            key: "manual"
14945        },
14946        isInOtel: !0,
14947        visibility: "public",
14948        example: "Ubuntu",
14949        changelog: [
14950            {
14951                version: "0.1.0",
14952                prs: [
14953                    127
14954                ]
14955            },
14956            {
14957                version: "0.0.0"
14958            }
14959        ]
14960    },
14961    "os.raw_description": {
14962        brief: "An unprocessed description string obtained by the operating system. For some well-known runtimes, Sentry will attempt to parse `name` and `version` from this string, if they are not explicitly given.",
14963        type: "string",
14964        applyScrubbing: {
14965            key: "manual"
14966        },
14967        isInOtel: !1,
14968        visibility: "public",
14969        example: "Ubuntu 22.04.4 LTS (Jammy Jellyfish)",
14970        changelog: [
14971            {
14972                version: "0.5.0",
14973                prs: [
14974                    301
14975                ],
14976                description: "Added os.raw_description attribute"
14977            }
14978        ]
14979    },
14980    "os.rooted": {
14981        brief: "Whether the operating system has been jailbroken or rooted.",
14982        type: "boolean",
14983        applyScrubbing: {
14984            key: "manual"
14985        },
14986        isInOtel: !1,
14987        visibility: "public",
14988        example: !0,
14989        changelog: [
14990            {
14991                version: "0.5.0",
14992                prs: [
14993                    301
14994                ],
14995                description: "Added os.rooted attribute"
14996            }
14997        ]
14998    },
14999    "os.theme": {
15000        brief: "Whether the OS runs in dark mode or light mode.",
15001        type: "string",
15002        applyScrubbing: {
15003            key: "manual"
15004        },
15005        isInOtel: !1,
15006        visibility: "public",
15007        example: "dark",
15008        changelog: [
15009            {
15010                version: "0.5.0",
15011                prs: [
15012                    301
15013                ],
15014                description: "Added os.theme attribute"
15015            }
15016        ]
15017    },
15018    "os.type": {
15019        brief: "The operating system type.",
15020        type: "string",
15021        applyScrubbing: {
15022            key: "manual"
15023        },
15024        isInOtel: !0,
15025        visibility: "public",
15026        example: "linux",
15027        changelog: [
15028            {
15029                version: "0.1.0",
15030                prs: [
15031                    127
15032                ]
15033            },
15034            {
15035                version: "0.0.0"
15036            }
15037        ]
15038    },
15039    "os.version": {
15040        brief: "The version of the operating system.",
15041        type: "string",
15042        applyScrubbing: {
15043            key: "manual"
15044        },
15045        isInOtel: !0,
15046        visibility: "public",
15047        example: "18.04.2",
15048        changelog: [
15049            {
15050                version: "0.1.0",
15051                prs: [
15052                    127
15053                ]
15054            },
15055            {
15056                version: "0.0.0"
15057            }
15058        ]
15059    },
15060    "otel.kind": {
15061        brief: "The span kind (https://opentelemetry.io/docs/concepts/signals/traces/#span-kind). Deprecated, use `sentry.kind` instead.",
15062        type: "string",
15063        applyScrubbing: {
15064            key: "manual"
15065        },
15066        isInOtel: !1,
15067        visibility: "public",
15068        example: "SERVER",
15069        deprecation: {
15070            replacement: "sentry.kind",
15071            reason: "Deprecated in favor of sentry.kind"
15072        },
15073        aliases: [
15074            "sentry.kind"
15075        ],
15076        changelog: [
15077            {
15078                version: "0.13.0",
15079                prs: [
15080                    440
15081                ],
15082                description: "Added otel.kind attribute"
15083            }
15084        ]
15085    },
15086    "otel.scope.name": {
15087        brief: "The name of the instrumentation scope - (InstrumentationScope.Name in OTLP).",
15088        type: "string",
15089        applyScrubbing: {
15090            key: "manual"
15091        },
15092        isInOtel: !0,
15093        visibility: "public",
15094        example: "io.opentelemetry.contrib.mongodb",
15095        changelog: [
15096            {
15097                version: "0.1.0",
15098                prs: [
15099                    127
15100                ]
15101            },
15102            {
15103                version: "0.0.0"
15104            }
15105        ]
15106    },
15107    "otel.scope.version": {
15108        brief: "The version of the instrumentation scope - (InstrumentationScope.Version in OTLP).",
15109        type: "string",
15110        applyScrubbing: {
15111            key: "manual"
15112        },
15113        isInOtel: !0,
15114        visibility: "public",
15115        example: "2.4.5",
15116        changelog: [
15117            {
15118                version: "0.1.0",
15119                prs: [
15120                    127
15121                ]
15122            },
15123            {
15124                version: "0.0.0"
15125            }
15126        ]
15127    },
15128    "otel.status_code": {
15129        brief: "Name of the code, either \u201COK\u201D or \u201CERROR\u201D. MUST NOT be set if the status code is UNSET.",
15130        type: "string",
15131        applyScrubbing: {
15132            key: "manual"
15133        },
15134        isInOtel: !0,
15135        visibility: "public",
15136        example: "OK",
15137        changelog: [
15138            {
15139                version: "0.1.0",
15140                prs: [
15141                    127
15142                ]
15143            },
15144            {
15145                version: "0.0.0"
15146            }
15147        ]
15148    },
15149    "otel.status_description": {
15150        brief: "Description of the Status if it has a value, otherwise not set.",
15151        type: "string",
15152        applyScrubbing: {
15153            key: "auto"
15154        },
15155        isInOtel: !0,
15156        visibility: "public",
15157        example: "resource not found",
15158        changelog: [
15159            {
15160                version: "0.1.0",
15161                prs: [
15162                    127
15163                ]
15164            },
15165            {
15166                version: "0.0.0"
15167            }
15168        ]
15169    },
15170    "params.<key>": {
15171        brief: "Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.",
15172        type: "string",
15173        applyScrubbing: {
15174            key: "auto"
15175        },
15176        isInOtel: !1,
15177        visibility: "public",
15178        hasDynamicSuffix: !0,
15179        example: "params.id='123'",
15180        aliases: [
15181            "url.path.parameter.<key>"
15182        ],
15183        changelog: [
15184            {
15185                version: "0.1.0",
15186                prs: [
15187                    103
15188                ]
15189            }
15190        ]
15191    },
15192    "performance.activationStart": {
15193        brief: "The time between initiating a navigation to a page and the browser activating the page",
15194        type: "double",
15195        applyScrubbing: {
15196            key: "manual"
15197        },
15198        isInOtel: !1,
15199        visibility: "public",
15200        example: 1.983,
15201        deprecation: {
15202            replacement: "browser.performance.navigation.activation_start",
15203            reason: "The activationStart is now recorded as the browser.performance.navigation.activation_start attribute."
15204        },
15205        aliases: [
15206            "browser.performance.navigation.activation_start"
15207        ],
15208        changelog: [
15209            {
15210                version: "0.5.0",
15211                prs: [
15212                    321
15213                ],
15214                description: "Added performance.activationStart attribute"
15215            }
15216        ]
15217    },
15218    "performance.timeOrigin": {
15219        brief: "The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated",
15220        type: "double",
15221        applyScrubbing: {
15222            key: "manual"
15223        },
15224        isInOtel: !1,
15225        visibility: "public",
15226        example: 1776185678886e-3,
15227        deprecation: {
15228            replacement: "browser.performance.time_origin",
15229            reason: "The timeOrigin is now recorded as the browser.performance.time_origin attribute."
15230        },
15231        aliases: [
15232            "browser.performance.time_origin"
15233        ],
15234        changelog: [
15235            {
15236                version: "0.5.0",
15237                prs: [
15238                    321
15239                ],
15240                description: "Added performance.timeOrigin attribute"
15241            }
15242        ]
15243    },
15244    previous_route: {
15245        brief: "Also used by mobile SDKs to indicate the previous route in the application.",
15246        type: "string",
15247        applyScrubbing: {
15248            key: "manual"
15249        },
15250        isInOtel: !1,
15251        visibility: "public",
15252        example: "HomeScreen",
15253        changelog: [
15254            {
15255                version: "0.1.0",
15256                prs: [
15257                    74
15258                ]
15259            },
15260            {
15261                version: "0.0.0"
15262            }
15263        ]
15264    },
15265    "process.command_args": {
15266        brief: "All the command arguments (including the command/executable itself) as received by the process.",
15267        type: "string[]",
15268        applyScrubbing: {
15269            key: "auto"
15270        },
15271        isInOtel: !0,
15272        visibility: "public",
15273        example: [
15274            "cmd/otecol",
15275            "--config=config.yaml"
15276        ],
15277        changelog: [
15278            {
15279                version: "0.6.0",
15280                prs: [
15281                    327
15282                ],
15283                description: "Added process.command_args attribute"
15284            }
15285        ]
15286    },
15287    "process.executable.name": {
15288        brief: "The name of the executable that started the process.",
15289        type: "string",
15290        applyScrubbing: {
15291            key: "manual"
15292        },
15293        isInOtel: !0,
15294        visibility: "public",
15295        example: "getsentry",
15296        changelog: [
15297            {
15298                version: "0.1.0",
15299                prs: [
15300                    127
15301                ]
15302            },
15303            {
15304                version: "0.0.0"
15305            }
15306        ]
15307    },
15308    "process.pid": {
15309        brief: "The process ID of the running process.",
15310        type: "integer",
15311        applyScrubbing: {
15312            key: "manual"
15313        },
15314        isInOtel: !0,
15315        visibility: "public",
15316        example: 12345,
15317        changelog: [
15318            {
15319                version: "0.4.0",
15320                prs: [
15321                    228
15322                ]
15323            },
15324            {
15325                version: "0.0.0"
15326            }
15327        ]
15328    },
15329    "process.runtime.description": {
15330        brief: "An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment. Equivalent to `raw_description` in the Sentry runtime context.",
15331        type: "string",
15332        applyScrubbing: {
15333            key: "manual"
15334        },
15335        isInOtel: !0,
15336        visibility: "public",
15337        example: "Eclipse OpenJ9 VM openj9-0.21.0",
15338        aliases: [
15339            "runtime.raw_description"
15340        ],
15341        changelog: [
15342            {
15343                version: "0.1.0",
15344                prs: [
15345                    127
15346                ]
15347            },
15348            {
15349                version: "0.0.0"
15350            }
15351        ]
15352    },
15353    "process.runtime.engine.name": {
15354        brief: "The name of the runtime engine.",
15355        type: "string",
15356        applyScrubbing: {
15357            key: "manual"
15358        },
15359        isInOtel: !1,
15360        visibility: "public",
15361        example: "v8",
15362        changelog: [
15363            {
15364                version: "0.0.0"
15365            }
15366        ]
15367    },
15368    "process.runtime.engine.version": {
15369        brief: "The version of the runtime engine.",
15370        type: "string",
15371        applyScrubbing: {
15372            key: "manual"
15373        },
15374        isInOtel: !1,
15375        visibility: "public",
15376        example: "12.9.202.13-rusty",
15377        changelog: [
15378            {
15379                version: "0.0.0"
15380            }
15381        ]
15382    },
15383    "process.runtime.name": {
15384        brief: "The name of the runtime. Equivalent to `name` in the Sentry runtime context.",
15385        type: "string",
15386        applyScrubbing: {
15387            key: "manual"
15388        },
15389        isInOtel: !0,
15390        visibility: "public",
15391        example: "node",
15392        aliases: [
15393            "runtime.name"
15394        ],
15395        changelog: [
15396            {
15397                version: "0.1.0",
15398                prs: [
15399                    127
15400                ]
15401            },
15402            {
15403                version: "0.0.0"
15404            }
15405        ]
15406    },
15407    "process.runtime.version": {
15408        brief: "The version of the runtime of this process, as returned by the runtime without modification. Equivalent to `version` in the Sentry runtime context.",
15409        type: "string",
15410        applyScrubbing: {
15411            key: "manual"
15412        },
15413        isInOtel: !0,
15414        visibility: "public",
15415        example: "18.04.2",
15416        aliases: [
15417            "runtime.version"
15418        ],
15419        changelog: [
15420            {
15421                version: "0.1.0",
15422                prs: [
15423                    127
15424                ]
15425            },
15426            {
15427                version: "0.0.0"
15428            }
15429        ]
15430    },
15431    "query.<key>": {
15432        brief: "An item in a query string. Usually added by client-side routing frameworks like vue-router.",
15433        type: "string",
15434        applyScrubbing: {
15435            key: "auto"
15436        },
15437        isInOtel: !1,
15438        visibility: "public",
15439        hasDynamicSuffix: !0,
15440        example: "query.id='123'",
15441        deprecation: {
15442            replacement: "url.query",
15443            reason: "Instead of sending items individually in query.<key>, they should be sent all together with url.query."
15444        },
15445        changelog: [
15446            {
15447                version: "0.1.0",
15448                prs: [
15449                    103
15450                ]
15451            }
15452        ]
15453    },
15454    "react.version": {
15455        brief: "The version of the React framework",
15456        type: "string",
15457        applyScrubbing: {
15458            key: "manual"
15459        },
15460        isInOtel: !1,
15461        visibility: "public",
15462        example: "18.2.0",
15463        changelog: [
15464            {
15465                version: "0.7.0",
15466                prs: [
15467                    368
15468                ],
15469                description: "Added react.version attribute"
15470            }
15471        ]
15472    },
15473    release: {
15474        brief: "The sentry release.",
15475        type: "string",
15476        applyScrubbing: {
15477            key: "manual"
15478        },
15479        isInOtel: !1,
15480        visibility: "public",
15481        example: "production",
15482        deprecation: {
15483            replacement: "sentry.release"
15484        },
15485        aliases: [
15486            "sentry.release"
15487        ],
15488        changelog: [
15489            {
15490                version: "0.1.0",
15491                prs: [
15492                    61,
15493                    127
15494                ]
15495            },
15496            {
15497                version: "0.0.0"
15498            }
15499        ]
15500    },
15501    "remix.action_form_data.<key>": {
15502        brief: "Remix form data, <key> being the form data key, the value being the form data value.",
15503        type: "string",
15504        applyScrubbing: {
15505            key: "auto"
15506        },
15507        isInOtel: !1,
15508        visibility: "public",
15509        hasDynamicSuffix: !0,
15510        example: "http.response.header.text='test'",
15511        changelog: [
15512            {
15513                version: "0.1.0",
15514                prs: [
15515                    103
15516                ]
15517            }
15518        ]
15519    },
15520    replay_id: {
15521        brief: "The id of the sentry replay.",
15522        type: "string",
15523        applyScrubbing: {
15524            key: "never"
15525        },
15526        isInOtel: !1,
15527        visibility: "public",
15528        example: "123e4567e89b12d3a456426614174000",
15529        deprecation: {
15530            replacement: "sentry.replay_id"
15531        },
15532        aliases: [
15533            "sentry.replay_id"
15534        ],
15535        changelog: [
15536            {
15537                version: "0.1.0",
15538                prs: [
15539                    61
15540                ]
15541            },
15542            {
15543                version: "0.0.0"
15544            }
15545        ]
15546    },
15547    "resource.deployment.environment": {
15548        brief: "The software deployment environment name.",
15549        type: "string",
15550        applyScrubbing: {
15551            key: "manual"
15552        },
15553        isInOtel: !0,
15554        visibility: "public",
15555        example: "production",
15556        deprecation: {
15557            replacement: "sentry.environment"
15558        },
15559        changelog: [
15560            {
15561                version: "0.5.0",
15562                prs: [
15563                    266
15564                ]
15565            }
15566        ]
15567    },
15568    "resource.deployment.environment.name": {
15569        brief: "The software deployment environment name.",
15570        type: "string",
15571        applyScrubbing: {
15572            key: "manual"
15573        },
15574        isInOtel: !0,
15575        visibility: "public",
15576        example: "production",
15577        deprecation: {
15578            replacement: "sentry.environment"
15579        },
15580        changelog: [
15581            {
15582                version: "0.3.1",
15583                prs: [
15584                    196
15585                ]
15586            }
15587        ]
15588    },
15589    "resource.render_blocking_status": {
15590        brief: "The render blocking status of the resource.",
15591        type: "string",
15592        applyScrubbing: {
15593            key: "manual"
15594        },
15595        isInOtel: !1,
15596        visibility: "public",
15597        example: "non-blocking",
15598        changelog: [
15599            {
15600                version: "0.1.0",
15601                prs: [
15602                    127
15603                ]
15604            },
15605            {
15606                version: "0.0.0"
15607            }
15608        ]
15609    },
15610    route: {
15611        brief: "The matched route, that is, the path template in the format used by the respective server framework. Also used by mobile SDKs to indicate the current route in the application.",
15612        type: "string",
15613        applyScrubbing: {
15614            key: "manual"
15615        },
15616        isInOtel: !1,
15617        visibility: "public",
15618        example: "App\\Controller::indexAction",
15619        deprecation: {
15620            replacement: "http.route"
15621        },
15622        aliases: [
15623            "http.route"
15624        ],
15625        changelog: [
15626            {
15627                version: "0.1.0",
15628                prs: [
15629                    61,
15630                    74
15631                ]
15632            },
15633            {
15634                version: "0.0.0"
15635            }
15636        ]
15637    },
15638    "rpc.grpc.status_code": {
15639        brief: "The numeric status code of the gRPC request.",
15640        type: "integer",
15641        applyScrubbing: {
15642            key: "manual"
15643        },
15644        isInOtel: !0,
15645        visibility: "public",
15646        example: 2,
15647        changelog: [
15648            {
15649                version: "0.4.0",
15650                prs: [
15651                    228
15652                ]
15653            },
15654            {
15655                version: "0.0.0"
15656            }
15657        ]
15658    },
15659    "rpc.method": {
15660        brief: "The fully-qualified logical name of the method from the RPC interface perspective.",
15661        type: "string",
15662        applyScrubbing: {
15663            key: "manual"
15664        },
15665        isInOtel: !0,
15666        visibility: "public",
15667        example: "com.example.ExampleService/exampleMethod",
15668        changelog: [
15669            {
15670                version: "0.7.0",
15671                prs: [
15672                    351
15673                ],
15674                description: "Added rpc.method attribute"
15675            }
15676        ]
15677    },
15678    "rpc.response.status_code": {
15679        brief: "Status code of the RPC returned by the RPC server or generated by the client.",
15680        type: "string",
15681        applyScrubbing: {
15682            key: "manual"
15683        },
15684        isInOtel: !0,
15685        visibility: "public",
15686        example: "DEADLINE_EXCEEDED",
15687        changelog: [
15688            {
15689                version: "0.7.0",
15690                prs: [
15691                    352
15692                ],
15693                description: "Added rpc.response.status_code attribute"
15694            }
15695        ]
15696    },
15697    "rpc.service": {
15698        brief: "The full (logical) name of the service being called, including its package name, if applicable.",
15699        type: "string",
15700        applyScrubbing: {
15701            key: "manual"
15702        },
15703        isInOtel: !0,
15704        visibility: "public",
15705        example: "myService.BestService",
15706        changelog: [
15707            {
15708                version: "0.1.0",
15709                prs: [
15710                    127
15711                ]
15712            },
15713            {
15714                version: "0.0.0"
15715            }
15716        ]
15717    },
15718    "rpc.system": {
15719        brief: "A string identifying the remoting system.",
15720        type: "string",
15721        applyScrubbing: {
15722            key: "manual"
15723        },
15724        isInOtel: !0,
15725        visibility: "public",
15726        example: "aws-api",
15727        deprecation: {
15728            replacement: "rpc.system.name",
15729            reason: "This attribute is being deprecated in favor of rpc.system.name, which is the OTel-aligned replacement."
15730        },
15731        aliases: [
15732            "rpc.system.name"
15733        ],
15734        changelog: [
15735            {
15736                version: "0.16.0",
15737                prs: [
15738                    482
15739                ],
15740                description: "Added rpc.system attribute, deprecated in favor of rpc.system.name"
15741            }
15742        ]
15743    },
15744    "rpc.system.name": {
15745        brief: "A string identifying the remoting system.",
15746        type: "string",
15747        applyScrubbing: {
15748            key: "manual"
15749        },
15750        isInOtel: !0,
15751        visibility: "public",
15752        example: "aws-api",
15753        aliases: [
15754            "rpc.system"
15755        ],
15756        changelog: [
15757            {
15758                version: "0.16.0",
15759                prs: [
15760                    482
15761                ],
15762                description: "Added rpc.system.name attribute"
15763            }
15764        ]
15765    },
15766    "runtime.build": {
15767        brief: "The application build string, when it is separate from the version.",
15768        type: "string",
15769        applyScrubbing: {
15770            key: "manual"
15771        },
15772        isInOtel: !1,
15773        visibility: "public",
15774        example: "stable",
15775        deprecation: {
15776            reason: "The runtime.* namespace is deprecated in favor of process.runtime.*. No direct OTel equivalent exists for this attribute."
15777        },
15778        changelog: [
15779            {
15780                version: "0.11.0",
15781                prs: [
15782                    383
15783                ],
15784                description: "Added and deprecated runtime.build attribute"
15785            }
15786        ]
15787    },
15788    "runtime.name": {
15789        brief: "The name of the runtime. For example node, CPython, or rustc.",
15790        type: "string",
15791        applyScrubbing: {
15792            key: "manual"
15793        },
15794        isInOtel: !1,
15795        visibility: "public",
15796        example: "node",
15797        deprecation: {
15798            replacement: "process.runtime.name",
15799            reason: "Prefer OTel-aligned process.runtime.name"
15800        },
15801        aliases: [
15802            "process.runtime.name"
15803        ],
15804        changelog: [
15805            {
15806                version: "0.11.0",
15807                prs: [
15808                    383
15809                ],
15810                description: "Added and deprecated runtime.name attribute in favor of process.runtime.name"
15811            }
15812        ]
15813    },
15814    "runtime.raw_description": {
15815        brief: "Unprocessed description string as obtained from the runtime. Used to extract name and version for well-known runtimes.",
15816        type: "string",
15817        applyScrubbing: {
15818            key: "manual"
15819        },
15820        isInOtel: !1,
15821        visibility: "public",
15822        example: "Eclipse OpenJ9 VM openj9-0.21.0",
15823        deprecation: {
15824            replacement: "process.runtime.description",
15825            reason: "Prefer OTel-aligned process.runtime.description"
15826        },
15827        aliases: [
15828            "process.runtime.description"
15829        ],
15830        changelog: [
15831            {
15832                version: "0.11.0",
15833                prs: [
15834                    383
15835                ],
15836                description: "Added and deprecated runtime.raw_description attribute in favor of process.runtime.description"
15837            }
15838        ]
15839    },
15840    "runtime.version": {
15841        brief: "The version of the runtime.",
15842        type: "string",
15843        applyScrubbing: {
15844            key: "manual"
15845        },
15846        isInOtel: !1,
15847        visibility: "public",
15848        example: "18.04.2",
15849        deprecation: {
15850            replacement: "process.runtime.version",
15851            reason: "Prefer OTel-aligned process.runtime.version"
15852        },
15853        aliases: [
15854            "process.runtime.version"
15855        ],
15856        changelog: [
15857            {
15858                version: "0.11.0",
15859                prs: [
15860                    383
15861                ],
15862                description: "Added and deprecated runtime.version attribute in favor of process.runtime.version"
15863            }
15864        ]
15865    },
15866    "score.<key>": {
15867        brief: "The weighted performance score for a web vital. This is defined as `score.weight.<key>` * `score.ratio.<key>`.",
15868        type: "double",
15869        applyScrubbing: {
15870            key: "manual"
15871        },
15872        isInOtel: !1,
15873        visibility: "public",
15874        hasDynamicSuffix: !0,
15875        example: "score.cls=0.1723",
15876        changelog: [
15877            {
15878                version: "0.7.0",
15879                prs: [
15880                    355
15881                ],
15882                description: "Added score.<key> attribute"
15883            }
15884        ]
15885    },
15886    "score.ratio.<key>": {
15887        brief: "The score for a web vital, normalized to a number between 0 and 1.",
15888        type: "double",
15889        applyScrubbing: {
15890            key: "manual"
15891        },
15892        isInOtel: !1,
15893        visibility: "public",
15894        hasDynamicSuffix: !0,
15895        example: "score.ratio.inp=0.7748",
15896        changelog: [
15897            {
15898                version: "0.7.0",
15899                prs: [
15900                    355
15901                ],
15902                description: "Added score.ratio.<key> attribute"
15903            }
15904        ]
15905    },
15906    "score.total": {
15907        brief: "The total performance score of a span. This is the sum of individual weighted 
15907web vital scores (see `score.<key>`).",
15908        type: "double",
15909        applyScrubbing: {
15910            key: "manual"
15911        },
15912        isInOtel: !1,
15913        visibility: "public",
15914        changelog: [
15915            {
15916                version: "0.7.0",
15917                prs: [
15918                    355
15919                ],
15920                description: "Added score.total attribute"
15921            }
15922        ]
15923    },
15924    "score.weight.<key>": {
15925        brief: "The relative weight of a web vital in a span's performance score.",
15926        type: "double",
15927        applyScrubbing: {
15928            key: "manual"
15929        },
15930        isInOtel: !1,
15931        visibility: "public",
15932        hasDynamicSuffix: !0,
15933        example: "score.weight.fcp=0.25",
15934        changelog: [
15935            {
15936                version: "0.7.0",
15937                prs: [
15938                    355
15939                ],
15940                description: "Added score.weight.<key> attribute"
15941            }
15942        ]
15943    },
15944    "sentry.action": {
15945        brief: "Used as a generic attribute representing the action depending on the type of span. For instance, this is the database query operation for DB spans, and the request method for HTTP spans.",
15946        type: "string",
15947        applyScrubbing: {
15948            key: "manual"
15949        },
15950        isInOtel: !1,
15951        visibility: "public",
15952        example: "SELECT",
15953        changelog: [
15954            {
15955                version: "0.4.0",
15956                prs: [
15957                    212
15958                ]
15959            }
15960        ]
15961    },
15962    "sentry.browser.name": {
15963        brief: "The name of the browser.",
15964        type: "string",
15965        applyScrubbing: {
15966            key: "manual"
15967        },
15968        isInOtel: !1,
15969        visibility: "public",
15970        example: "Chrome",
15971        deprecation: {
15972            replacement: "browser.name"
15973        },
15974        aliases: [
15975            "browser.name"
15976        ],
15977        changelog: [
15978            {
15979                version: "0.1.0",
15980                prs: [
15981                    139
15982                ]
15983            }
15984        ]
15985    },
15986    "sentry.browser.version": {
15987        brief: "The version of the browser.",
15988        type: "string",
15989        applyScrubbing: {
15990            key: "manual"
15991        },
15992        isInOtel: !1,
15993        visibility: "public",
15994        example: "120.0.6099.130",
15995        deprecation: {
15996            replacement: "browser.version"
15997        },
15998        aliases: [
15999            "browser.version"
16000        ],
16001        changelog: [
16002            {
16003                version: "0.1.0",
16004                prs: [
16005                    139
16006                ]
16007            }
16008        ]
16009    },
16010    "sentry.cancellation_reason": {
16011        brief: "The reason why a span ended early.",
16012        type: "string",
16013        applyScrubbing: {
16014            key: "never"
16015        },
16016        isInOtel: !1,
16017        visibility: "public",
16018        example: "document.hidden",
16019        changelog: [
16020            {
16021                version: "0.0.0"
16022            }
16023        ]
16024    },
16025    "sentry.category": {
16026        brief: "The high-level category of a span, derived from the span operation or span attributes. This categorizes spans by their general purpose (e.g., database, HTTP, UI). Known values include: 'ai', 'ai.pipeline', 'app', 'browser', 'cache', 'console', 'db', 'event', 'file', 'function.aws', 'function.azure', 'function.gcp', 'function.nextjs', 'function.remix', 'graphql', 'grpc', 'http', 'measure', 'middleware', 'navigation', 'pageload', 'queue', 'resource', 'rpc', 'serialize', 'subprocess', 'template', 'topic', 'ui', 'ui.angular', 'ui.ember', 'ui.react', 'ui.svelte', 'ui.vue', 'view', 'websocket'.",
16027        type: "string",
16028        applyScrubbing: {
16029            key: "never"
16030        },
16031        isInOtel: !1,
16032        visibility: "public",
16033        example: "db",
16034        changelog: [
16035            {
16036                version: "0.4.0",
16037                prs: [
16038                    218
16039                ]
16040            }
16041        ]
16042    },
16043    "sentry.client_sample_rate": {
16044        brief: "Rate at which a span was sampled in the SDK.",
16045        type: "double",
16046        applyScrubbing: {
16047            key: "never"
16048        },
16049        isInOtel: !1,
16050        visibility: "public",
16051        example: .5,
16052        changelog: [
16053            {
16054                version: "0.1.0",
16055                prs: [
16056                    102
16057                ]
16058            }
16059        ]
16060    },
16061    "sentry.description": {
16062        brief: "The human-readable description of a span.",
16063        type: "string",
16064        applyScrubbing: {
16065            key: "auto"
16066        },
16067        isInOtel: !1,
16068        visibility: "public",
16069        example: "index view query",
16070        changelog: [
16071            {
16072                version: "0.1.0",
16073                prs: [
16074                    135
16075                ]
16076            }
16077        ]
16078    },
16079    "sentry.dist": {
16080        brief: "The sentry dist.",
16081        type: "string",
16082        applyScrubbing: {
16083            key: "never"
16084        },
16085        isInOtel: !1,
16086        visibility: "public",
16087        example: "1.0",
16088        aliases: [
16089            "dist"
16090        ],
16091        changelog: [
16092            {
16093                version: "0.16.0",
16094                prs: [
16095                    489
16096                ],
16097                description: "Added dist as an alias"
16098            },
16099            {
16100                version: "0.0.0"
16101            }
16102        ]
16103    },
16104    "sentry.domain": {
16105        brief: "Used as a generic attribute representing the domain depending on the type of span. For instance, this is the collection/table name for database spans, and the server address for HTTP spans.",
16106        type: "string",
16107        applyScrubbing: {
16108            key: "manual"
16109        },
16110        isInOtel: !1,
16111        visibility: "public",
16112        example: "example.com",
16113        changelog: [
16114            {
16115                version: "0.4.0",
16116                prs: [
16117                    212
16118                ]
16119            }
16120        ]
16121    },
16122    "sentry.dsc.environment": {
16123        brief: "The environment from the dynamic sampling context.",
16124        type: "string",
16125        applyScrubbing: {
16126            key: "never"
16127        },
16128        isInOtel: !1,
16129        visibility: "internal",
16130        example: "prod",
16131        changelog: [
16132            {
16133                version: "0.3.0",
16134                prs: [
16135                    185
16136                ]
16137            }
16138        ]
16139    },
16140    "sentry.dsc.project_id": {
16141        brief: "The ID of the project where the trace originated (i.e. the project of the SDK that started the trace). Propagated through the dynamic sampling context and set by Relay during ingestion.",
16142        type: "string",
16143        applyScrubbing: {
16144            key: "never"
16145        },
16146        isInOtel: !1,
16147        visibility: "internal",
16148        example: "12345",
16149        changelog: [
16150            {
16151                version: "0.7.0",
16152                prs: [
16153                    358
16154                ],
16155                description: "Add sentry.dsc.project_id as an attribute"
16156            }
16157        ]
16158    },
16159    "sentry.dsc.public_key": {
16160        brief: "The public key from the dynamic sampling context.",
16161        type: "string",
16162        applyScrubbing: {
16163            key: "manual"
16164        },
16165        isInOtel: !1,
16166        visibility: "internal",
16167        example: "c51734c603c4430eb57cb0a5728a479d",
16168        changelog: [
16169            {
16170                version: "0.3.0",
16171                prs: [
16172                    185
16173                ]
16174            }
16175        ]
16176    },
16177    "sentry.dsc.release": {
16178        brief: "The release identifier from the dynamic sampling context.",
16179        type: "string",
16180        applyScrubbing: {
16181            key: "never"
16182        },
16183        isInOtel: !1,
16184        visibility: "internal",
16185        example: "frontend@e8211be71b214afab5b85de4b4c54be3714952bb",
16186        changelog: [
16187            {
16188                version: "0.3.0",
16189                prs: [
16190                    185
16191                ]
16192            }
16193        ]
16194    },
16195    "sentry.dsc.sampled": {
16196        brief: "Whether the event was sampled according to the dynamic sampling context.",
16197        type: "boolean",
16198        applyScrubbing: {
16199            key: "never"
16200        },
16201        isInOtel: !1,
16202        visibility: "internal",
16203        example: !0,
16204        changelog: [
16205            {
16206                version: "0.3.0",
16207                prs: [
16208                    185
16209                ]
16210            }
16211        ]
16212    },
16213    "sentry.dsc.sample_rate": {
16214        brief: "The sample rate from the dynamic sampling context.",
16215        type: "string",
16216        applyScrubbing: {
16217            key: "never"
16218        },
16219        isInOtel: !1,
16220        visibility: "internal",
16221        example: "1.0",
16222        changelog: [
16223            {
16224                version: "0.3.0",
16225                prs: [
16226                    185
16227                ]
16228            }
16229        ]
16230    },
16231    "sentry.dsc.trace_id": {
16232        brief: "The trace ID from the dynamic sampling context.",
16233        type: "string",
16234        applyScrubbing: {
16235            key: "never"
16236        },
16237        isInOtel: !1,
16238        visibility: "internal",
16239        example: "047372980460430cbc78d9779df33a46",
16240        changelog: [
16241            {
16242                version: "0.3.0",
16243                prs: [
16244                    185
16245                ]
16246            }
16247        ]
16248    },
16249    "sentry.dsc.transaction": {
16250        brief: "The transaction name from the dynamic sampling context.",
16251        type: "string",
16252        applyScrubbing: {
16253            key: "never"
16254        },
16255        isInOtel: !1,
16256        visibility: "internal",
16257        example: "/issues/errors-outages/",
16258        changelog: [
16259            {
16260                version: "0.3.0",
16261                prs: [
16262                    185
16263                ]
16264            }
16265        ]
16266    },
16267    "sentry.environment": {
16268        brief: "The sentry environment.",
16269        type: "string",
16270        applyScrubbing: {
16271            key: "never"
16272        },
16273        isInOtel: !1,
16274        visibility: "public",
16275        example: "production",
16276        aliases: [
16277            "environment"
16278        ],
16279        changelog: [
16280            {
16281                version: "0.0.0"
16282            }
16283        ]
16284    },
16285    "sentry.exclusive_time": {
16286        brief: "The exclusive time duration of the span in milliseconds.",
16287        type: "double",
16288        applyScrubbing: {
16289            key: "manual"
16290        },
16291        isInOtel: !1,
16292        visibility: "public",
16293        example: 1234,
16294        changelog: [
16295            {
16296                version: "0.4.0",
16297                prs: [
16298                    228
16299                ]
16300            },
16301            {
16302                version: "0.3.0",
16303                prs: [
16304                    160
16305                ]
16306            },
16307            {
16308                version: "0.0.0"
16309            }
16310        ]
16311    },
16312    "sentry.graphql.operation": {
16313        brief: "Indicates the type of graphql operation, emitted by the Javascript SDK.",
16314        type: "string",
16315        applyScrubbing: {
16316            key: "manual"
16317        },
16318        isInOtel: !1,
16319        visibility: "public",
16320        example: "getUserById",
16321        changelog: [
16322            {
16323                version: "0.3.1",
16324                prs: [
16325                    190
16326                ]
16327            }
16328        ]
16329    },
16330    "sentry.group": {
16331        brief: "Stores the hash of `sentry.normalized_description`. This is primarily used for grouping spans in the product end.",
16332        type: "string",
16333        applyScrubbing: {
16334            key: "never"
16335        },
16336        isInOtel: !1,
16337        visibility: "public",
16338        changelog: [
16339            {
16340                version: "0.4.0",
16341                prs: [
16342                    212
16343                ]
16344            }
16345        ]
16346    },
16347    "sentry.http.prefetch": {
16348        brief: "If an http request was a prefetch request.",
16349        type: "boolean",
16350        applyScrubbing: {
16351            key: "never"
16352        },
16353        isInOtel: !1,
16354        visibility: "public",
16355        example: !0,
16356        changelog: [
16357            {
16358                version: "0.0.0"
16359            }
16360        ]
16361    },
16362    "sentry.idle_span_finish_reason": {
16363        brief: "The reason why an idle span ended early.",
16364        type: "string",
16365        applyScrubbing: {
16366            key: "never"
16367        },
16368        isInOtel: !1,
16369        visibility: "public",
16370        example: "idleTimeout",
16371        changelog: [
16372            {
16373                version: "0.0.0"
16374            }
16375        ]
16376    },
16377    "sentry.is_remote": {
16378        brief: "Indicates whether a span's parent is remote.",
16379        type: "boolean",
16380        applyScrubbing: {
16381            key: "never"
16382        },
16383        isInOtel: !1,
16384        visibility: "public",
16385        example: !0,
16386        changelog: [
16387            {
16388                version: "0.3.1",
16389                prs: [
16390                    190
16391                ]
16392            }
16393        ]
16394    },
16395    "sentry.kind": {
16396        brief: "Used to clarify the relationship between parents and children, or to distinguish between spans, e.g. a `server` and `client` span with the same name.",
16397        type: "string",
16398        applyScrubbing: {
16399            key: "manual"
16400        },
16401        isInOtel: !1,
16402        visibility: "public",
16403        example: "server",
16404        aliases: [
16405            "otel.kind"
16406        ],
16407        changelog: [
16408            {
16409                version: "0.3.1",
16410                prs: [
16411                    190
16412                ]
16413            }
16414        ]
16415    },
16416    "sentry.main_thread": {
16417        brief: "Whether the span or event occurred on the main thread. Computed by Relay and should not be set by SDKs.",
16418        type: "boolean",
16419        applyScrubbing: {
16420            key: "never"
16421        },
16422        isInOtel: !1,
16423        visibility: "public",
16424        example: !0,
16425        changelog: [
16426            {
16427                version: "0.5.0"
16428            }
16429        ]
16430    },
16431    "sentry.message.parameter.<key>": {
16432        brief: "A parameter used in the message template. <key> can either be the number that represent the parameter's position in the template string (sentry.message.parameter.0, sentry.message.parameter.1, etc) or the parameter's name (sentry.message.parameter.item_id, sentry.message.parameter.user_id, etc)",
16433        type: "string",
16434        applyScrubbing: {
16435            key: "auto"
16436        },
16437        isInOtel: !1,
16438        visibility: "public",
16439        example: "sentry.message.parameter.0='123'",
16440        changelog: [
16441            {
16442                version: "0.1.0",
16443                prs: [
16444                    116
16445                ]
16446            }
16447        ]
16448    },
16449    "sentry.message.template": {
16450        brief: "The parameterized template string.",
16451        type: "string",
16452        applyScrubbing: {
16453            key: "manual"
16454        },
16455        isInOtel: !1,
16456        visibility: "public",
16457        example: "Hello, {name}!",
16458        changelog: [
16459            {
16460                version: "0.1.0",
16461                prs: [
16462                    116
16463                ]
16464            }
16465        ]
16466    },
16467    "sentry.metric.source": {
16468        brief: "The provenance of a metric.  For example, this can be set to indicate if a metric was generated by Relay from a span.",
16469        type: "string",
16470        applyScrubbing: {
16471            key: "never"
16472        },
16473        isInOtel: !1,
16474        visibility: "public",
16475        example: "span",
16476        changelog: [
16477            {
16478                version: "0.16.0",
16479                prs: [
16480                    476
16481                ],
16482                description: "Added sentry.metric.source attribute"
16483            }
16484        ]
16485    },
16486    "sentry.mobile": {
16487        brief: "Whether the application is using a mobile SDK. Computed by Relay and should not be set by SDKs.",
16488        type: "boolean",
16489        applyScrubbing: {
16490            key: "never"
16491        },
16492        isInOtel: !1,
16493        visibility: "public",
16494        example: !0,
16495        changelog: [
16496            {
16497                version: "0.5.0"
16498            }
16499        ]
16500    },
16501    "sentry.module.<key>": {
16502        brief: "A module that was loaded in the process. The key is the name of the module.",
16503        type: "string",
16504        applyScrubbing: {
16505            key: "manual"
16506        },
16507        isInOtel: !1,
16508        visibility: "public",
16509        hasDynamicSuffix: !0,
16510        example: "sentry.module.brianium/paratest='v7.7.0'",
16511        changelog: [
16512            {
16513                version: "0.1.0",
16514                prs: [
16515                    103
16516                ]
16517            }
16518        ]
16519    },
16520    "sentry.nextjs.ssr.function.route": {
16521        brief: "A parameterized route for a function in Next.js that contributes to Server-Side Rendering. Should be present on spans that track such functions when the file location of the function is known.",
16522        type: "string",
16523        applyScrubbing: {
16524            key: "never"
16525        },
16526        isInOtel: !1,
16527        visibility: "public",
16528        example: "/posts/[id]/layout",
16529        changelog: [
16530            {
16531                version: "0.1.0",
16532                prs: [
16533                    54,
16534                    106
16535                ]
16536            }
16537        ]
16538    },
16539    "sentry.nextjs.ssr.function.type": {
16540        brief: "A descriptor for a for a function in Next.js that contributes to Server-Side Rendering. Should be present on spans that track such functions.",
16541        type: "string",
16542        applyScrubbing: {
16543            key: "never"
16544        },
16545        isInOtel: !1,
16546        visibility: "public",
16547        example: "generateMetadata",
16548        changelog: [
16549            {
16550                version: "0.1.0",
16551                prs: [
16552                    54,
16553                    106
16554                ]
16555            }
16556        ]
16557    },
16558    "sentry.normalized_db_query": {
16559        brief: "The normalized version of `db.query.text`.",
16560        type: "string",
16561        applyScrubbing: {
16562            key: "manual"
16563        },
16564        isInOtel: !1,
16565        visibility: "public",
16566        example: "SELECT .. FROM sentry_project WHERE (project_id = %s)",
16567        changelog: [
16568            {
16569                version: "0.3.1",
16570                prs: [
16571                    194
16572                ]
16573            }
16574        ]
16575    },
16576    "sentry.normalized_db_query.hash": {
16577        brief: "The hash of `sentry.normalized_db_query`.",
16578        type: "string",
16579        applyScrubbing: {
16580            key: "never"
16581        },
16582        isInOtel: !1,
16583        visibility: "public",
16584        changelog: [
16585            {
16586                version: "0.4.0",
16587                prs: [
16588                    200
16589                ]
16590            }
16591        ]
16592    },
16593    "sentry.normalized_description": {
16594        brief: "Used as a generic attribute representing the normalized `sentry.description`. This refers to the legacy use case of `sentry.description` where it holds relevant data depending on the type of span (e.g. database query, resource url, http request description, etc).",
16595        type: "string",
16596        applyScrubbing: {
16597            key: "auto"
16598        },
16599        isInOtel: !1,
16600        visibility: "public",
16601        example: "SELECT .. FROM sentry_project WHERE (project_id = %s)",
16602        changelog: [
16603            {
16604                version: "0.4.0",
16605                prs: [
16606                    212
16607                ]
16608            }
16609        ]
16610    },
16611    "sentry.observed_timestamp_nanos": {
16612        brief: "The timestamp at which an envelope was received by Relay, in nanoseconds.",
16613        type: "string",
16614        applyScrubbing: {
16615            key: "never"
16616        },
16617        isInOtel: !1,
16618        visibility: "public",
16619        example: "1544712660300000000",
16620        changelog: [
16621            {
16622                version: "0.3.0",
16623                prs: [
16624                    174
16625                ]
16626            },
16627            {
16628                version: "0.2.0",
16629                prs: [
16630                    137
16631                ]
16632            }
16633        ]
16634    },
16635    "sentry.op": {
16636        brief: "The operation of a span.",
16637        type: "string",
16638        applyScrubbing: {
16639            key: "never"
16640        },
16641        isInOtel: !1,
16642        visibility: "public",
16643        example: "http.client",
16644        changelog: [
16645            {
16646                version: "0.0.0"
16647            }
16648        ]
16649    },
16650    "sentry.origin": {
16651        brief: "The origin of the instrumentation (e.g. span, log, etc.)",
16652        type: "string",
16653        applyScrubbing: {
16654            key: "never"
16655        },
16656        isInOtel: !1,
16657        visibility: "public",
16658        example: "auto.http.otel.fastify",
16659        changelog: [
16660            {
16661                version: "0.1.0",
16662                prs: [
16663                    68
16664                ]
16665            },
16666            {
16667                version: "0.0.0"
16668            }
16669        ]
16670    },
16671    "sentry.platform": {
16672        brief: "The sdk platform that generated the event.",
16673        type: "string",
16674        applyScrubbing: {
16675            key: "never"
16676        },
16677        isInOtel: !1,
16678        visibility: "public",
16679        example: "php",
16680        changelog: [
16681            {
16682                version: "0.0.0"
16683            }
16684        ]
16685    },
16686    "sentry.profiler_id": {
16687        brief: "The id of the currently running profiler (continuous profiling)",
16688        type: "string",
16689        applyScrubbing: {
16690            key: "never"
16691        },
16692        isInOtel: !1,
16693        visibility: "public",
16694        example: "18779b64dd35d1a538e7ce2dd2d3fad3",
16695        changelog: [
16696            {
16697                version: "0.4.0",
16698                prs: [
16699                    242
16700                ]
16701            }
16702        ]
16703    },
16704    "sentry.profile_id": {
16705        brief: "The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling.",
16706        type: "string",
16707        applyScrubbing: {
16708            key: "never"
16709        },
16710        isInOtel: !1,
16711        visibility: "public",
16712        example: "123e4567e89b12d3a456426614174000",
16713        changelog: [
16714            {
16715                version: "0.6.0",
16716                prs: [
16717                    344
16718                ],
16719                description: "Added sentry.profile_id attribute"
16720            }
16721        ]
16722    },
16723    "sentry.release": {
16724        brief: "The sentry release.",
16725        type: "string",
16726        applyScrubbing: {
16727            key: "never"
16728        },
16729        isInOtel: !1,
16730        visibility: "public",
16731        example: "7.0.0",
16732        aliases: [
16733            "service.version",
16734            "release"
16735        ],
16736        changelog: [
16737            {
16738                version: "0.0.0"
16739            }
16740        ]
16741    },
16742    "sentry.replay_id": {
16743        brief: "The id of the sentry replay.",
16744        type: "string",
16745        applyScrubbing: {
16746            key: "never"
16747        },
16748        isInOtel: !1,
16749        visibility: "public",
16750        example: "123e4567e89b12d3a456426614174000",
16751        aliases: [
16752            "replay_id"
16753        ],
16754        changelog: [
16755            {
16756                version: "0.0.0"
16757            }
16758        ]
16759    },
16760    "sentry.replay_is_buffering": {
16761        brief: "A sentinel attribute on log events indicating whether the current Session Replay is being buffered (onErrorSampleRate).",
16762        type: "boolean",
16763        applyScrubbing: {
16764            key: "never"
16765        },
16766        isInOtel: !1,
16767        visibility: "public",
16768        example: !0,
16769        changelog: [
16770            {
16771                version: "0.3.0",
16772                prs: [
16773                    185
16774                ]
16775            }
16776        ]
16777    },
16778    "sentry.report_event": {
16779        brief: "(Deprecated) The event that caused the SDK to report CLS or LCP (pagehide or navigation)",
16780        type: "string",
16781        applyScrubbing: {
16782            key: "manual"
16783        },
16784        isInOtel: !1,
16785        visibility: "public",
16786        example: "pagehide",
16787        deprecation: {
16788            reason: "The report event is now recorded as a browser.web_vital.lcp.report_event or browser.web_vital.cls.report_event attribute. No backfill required."
16789        },
16790        changelog: [
16791            {
16792                version: "0.5.0",
16793                prs: [
16794                    320
16795                ],
16796                description: "Added sentry.report_event attribute"
16797            }
16798        ]
16799    },
16800    "sentry.sdk.integrations": {
16801        brief: "A list of names identifying enabled integrations. The list shouldhave all enabled integrations, including default integrations. Defaultintegrations are included because different SDK releases may contain differentdefault integrations.",
16802        type: "string[]",
16803        applyScrubbing: {
16804            key: "never"
16805        },
16806        isInOtel: !1,
16807        visibility: "public",
16808        example: [
16809            "InboundFilters",
16810            "FunctionToString",
16811            "BrowserApiErrors",
16812            "Breadcrumbs"
16813        ],
16814        changelog: [
16815            {
16816                version: "0.0.0",
16817                prs: [
16818                    42
16819                ]
16820            }
16821        ]
16822    },
16823    "sentry.sdk.name": {
16824        brief: "The sentry sdk name.",
16825        type: "string",
16826        applyScrubbing: {
16827            key: "never"
16828        },
16829        isInOtel: !1,
16830        visibility: "public",
16831        example: "@sentry/react",
16832        changelog: [
16833            {
16834                version: "0.0.0"
16835            }
16836        ]
16837    },
16838    "sentry.sdk.version": {
16839        brief: "The sentry sdk version.",
16840        type: "string",
16841        applyScrubbing: {
16842            key: "never"
16843        },
16844        isInOtel: !1,
16845        visibility: "public",
16846        example: "7.0.0",
16847        changelog: [
16848            {
16849                version: "0.0.0"
16850            }
16851        ]
16852    },
16853    "sentry.segment.id": {
16854        brief: "The segment ID of a span",
16855        type: "string",
16856        applyScrubbing: {
16857            key: "never"
16858        },
16859        isInOtel: !1,
16860        visibility: "public",
16861        example: "051581bf3cb55c13",
16862        aliases: [
16863            "sentry.segment_id"
16864        ],
16865        changelog: [
16866            {
16867                version: "0.1.0",
16868                prs: [
16869                    107,
16870                    124
16871                ]
16872            }
16873        ]
16874    },
16875    "sentry.segment_id": {
16876        brief: "The segment ID of a span",
16877        type: "string",
16878        applyScrubbing: {
16879            key: "never"
16880        },
16881        isInOtel: !1,
16882        visibility: "public",
16883        example: "051581bf3cb55c13",
16884        deprecation: {
16885            replacement: "sentry.segment.id"
16886        },
16887        aliases: [
16888            "sentry.segment.id"
16889        ],
16890        changelog: [
16891            {
16892                version: "0.1.0",
16893                prs: [
16894                    124
16895                ]
16896            }
16897        ]
16898    },
16899    "sentry.segment.name": {
16900        brief: "The segment name of a span",
16901        type: "string",
16902        applyScrubbing: {
16903            key: "manual"
16904        },
16905        isInOtel: !1,
16906        visibility: "public",
16907        example: "GET /user",
16908        aliases: [
16909            "sentry.transaction",
16910            "transaction"
16911        ],
16912        changelog: [
16913            {
16914                version: "0.6.0",
16915                prs: [
16916                    345
16917                ],
16918                description: "Added sentry.transaction and transaction aliases"
16919            },
16920            {
16921                version: "0.1.0",
16922                prs: [
16923                    104
16924                ]
16925            }
16926        ]
16927    },
16928    "sentry.server_sample_rate": {
16929        brief: "Rate at which a span was sampled in Relay.",
16930        type: "double",
16931        applyScrubbing: {
16932            key: "never"
16933        },
16934        isInOtel: !1,
16935        visibility: "public",
16936        example: .5,
16937        changelog: [
16938            {
16939                version: "0.1.0",
16940                prs: [
16941                    102
16942                ]
16943            }
16944        ]
16945    },
16946    "sentry.source": {
16947        brief: "The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers.",
16948        type: "string",
16949        applyScrubbing: {
16950            key: "never"
16951        },
16952        isInOtel: !1,
16953        visibility: "public",
16954        example: "route",
16955        deprecation: {
16956            replacement: "sentry.span.source",
16957            reason: "This attribute is being deprecated in favor of sentry.span.source"
16958        },
16959        changelog: [
16960            {
16961                version: "0.5.0"
16962            }
16963        ]
16964    },
16965    "sentry.span.source": {
16966        brief: "The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers.",
16967        type: "string",
16968        applyScrubbing: {
16969            key: "never"
16970        },
16971        isInOtel: !1,
16972        visibility: "public",
16973        example: "route",
16974        changelog: [
16975            {
16976                version: "0.4.0",
16977                prs: [
16978                    214
16979                ]
16980            },
16981            {
16982                version: "0.0.0"
16983            }
16984        ]
16985    },
16986    "sentry.status": {
16987        brief: 'The span\'s status (either "ok" or "error"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.',
16988        type: "string",
16989        applyScrubbing: {
16990            key: "never"
16991        },
16992        isInOtel: !1,
16993        visibility: "public",
16994        example: "ok",
16995        changelog: [
16996            {
16997                version: "0.14.0",
16998                prs: [
16999                    453
17000                ]
17001            }
17002        ]
17003    },
17004    "sentry.status_code": {
17005        brief: "The HTTP status code used in Sentry Insights. Typically set by Sentry during ingestion, rather than by clients.",
17006        type: "integer",
17007        applyScrubbing: {
17008            key: "manual"
17009        },
17010        isInOtel: !1,
17011        visibility: "public",
17012        example: 200,
17013        changelog: [
17014            {
17015                version: "0.4.0",
17016                prs: [
17017                    223,
17018                    228
17019                ]
17020            }
17021        ]
17022    },
17023    "sentry.status.message": {
17024        brief: "The from OTLP extracted status message.",
17025        type: "string",
17026        applyScrubbing: {
17027            key: "manual"
17028        },
17029        isInOtel: !1,
17030        visibility: "public",
17031        example: "foobar",
17032        changelog: [
17033            {
17034                version: "0.3.1",
17035                prs: [
17036                    190
17037                ]
17038            }
17039        ]
17040    },
17041    "sentry.sveltekit.navigation.from": {
17042        brief: "the navigation origin (sveltekit router)",
17043        type: "string",
17044        applyScrubbing: {
17045            key: "auto"
17046        },
17047        isInOtel: !1,
17048        visibility: "public",
17049        example: "/home",
17050        deprecation: {
17051            replacement: "navigation.origin",
17052            reason: "Use the more generic attribute instead"
17053        },
17054        aliases: [
17055            "navigation.origin"
17056        ],
17057        changelog: [
17058            {
17059                version: "0.16.0",
17060                prs: [
17061                    467
17062                ],
17063                description: "Added sentry.sveltekit.navigation.from attribute"
17064            }
17065        ]
17066    },
17067    "sentry.sveltekit.navigation.to": {
17068        brief: "the navigation destination",
17069        type: "string",
17070        applyScrubbing: {
17071            key: "auto"
17072        },
17073        isInOtel: !1,
17074        visibility: "public",
17075        example: "/users/:id",
17076        deprecation: {
17077            reason: "the navigation destination is already covered by url.* attributes"
17078        },
17079        changelog: [
17080            {
17081                version: "0.16.0",
17082                prs: [
17083                    467
17084                ],
17085                description: "Added sentry.sveltekit.navigation.to attribute"
17086            }
17087        ]
17088    },
17089    "sentry.sveltekit.navigation.type": {
17090        brief: "The type of navigation event emitted from the sveltekit client router",
17091        type: "string",
17092        applyScrubbing: {
17093            key: "manual"
17094        },
17095        isInOtel: !1,
17096        visibility: "public",
17097        example: "link",
17098        deprecation: {
17099            replacement: "navigation.type",
17100            reason: "Use the more generic attribute instead"
17101        },
17102        aliases: [
17103            "navigation.type"
17104        ],
17105        changelog: [
17106            {
17107                version: "0.16.0",
17108                prs: [
17109                    467
17110                ],
17111                description: "Added sentry.sveltekit.navigation.type attribute"
17112            }
17113        ]
17114    },
17115    "sentry.thread.id": {
17116        brief: "Current \u201Cmanaged\u201D thread ID.",
17117        type: "integer",
17118        applyScrubbing: {
17119            key: "manual"
17120        },
17121        isInOtel: !1,
17122        visibility: "public",
17123        example: 56,
17124        deprecation: {
17125            replacement: "thread.id",
17126            reason: "This attribute is being deprecated in favor of the OTel-standard thread.id"
17127        },
17128        changelog: [
17129            {
17130                version: "0.13.0",
17131                prs: [
17132                    451
17133                ]
17134            }
17135        ]
17136    },
17137    "sentry.timestamp.sequence": {
17138        brief: "A sequencing counter for deterministic ordering of logs or metrics when timestamps share the same integer millisecond. Starts at 0 on SDK initialization, increments by 1 for each captured item, and resets to 0 when the integer millisecond of the current item differs from the previous one.",
17139        type: "integer",
17140        applyScrubbing: {
17141            key: "never"
17142        },
17143        isInOtel: !1,
17144        visibility: "public",
17145        example: 0,
17146        changelog: [
17147            {
17148                version: "0.5.0",
17149                prs: [
17150                    262
17151                ]
17152            }
17153        ]
17154    },
17155    "sentry.trace_lifecycle": {
17156        brief: "Indicates the chosen trace lifecycle mode of the SDK (stream or static)",
17157        type: "string",
17158        applyScrubbing: {
17159            key: "manual"
17160        },
17161        isInOtel: !1,
17162        visibility: "public",
17163        example: "stream",
17164        changelog: [
17165            {
17166                version: "0.13.0",
17167                prs: [
17168                    442
17169                ],
17170                description: "Added sentry.trace_lifecycle attribute"
17171            }
17172        ]
17173    },
17174    "sentry.trace.parent_span_id": {
17175        brief: "The span id of the span that was active when the log was collected. This should not be set if there was no active span.",
17176        type: "string",
17177        applyScrubbing: {
17178            key: "never"
17179        },
17180        isInOtel: !1,
17181        visibility: "public",
17182        example: "b0e6f15b45c36b12",
17183        deprecation: {},
17184        changelog: [
17185            {
17186                version: "0.5.0",
17187                prs: [
17188                    287
17189                ],
17190                description: "Deprecate `sentry.trace.parent_span_id`"
17191            },
17192            {
17193                version: "0.1.0",
17194                prs: [
17195                    116
17196                ]
17197            }
17198        ]
17199    },
17200    "sentry.trace.status": {
17201        brief: 'The segment\'s status (either "ok" or "error"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.',
17202        type: "string",
17203        applyScrubbing: {
17204            key: "never"
17205        },
17206        isInOtel: !1,
17207        visibility: "public",
17208        example: "ok",
17209        changelog: [
17210            {
17211                version: "0.14.0",
17212                prs: [
17213                    453
17214                ]
17215            }
17216        ]
17217    },
17218    "sentry.transaction": {
17219        brief: "The sentry transaction (segment name).",
17220        type: "string",
17221        applyScrubbing: {
17222            key: "never"
17223        },
17224        isInOtel: !1,
17225        visibility: "public",
17226        example: "GET /",
17227        deprecation: {
17228            replacement: "sentry.segment.name",
17229            reason: "This attribute is being deprecated in favor of sentry.segment.name"
17230        },
17231        aliases: [
17232            "sentry.segment.name",
17233            "transaction"
17234        ],
17235        changelog: [
17236            {
17237                version: "0.6.0",
17238                prs: [
17239                    345
17240                ],
17241                description: "Deprecated sentry.transaction in favor of sentry.segment.name"
17242            },
17243            {
17244                version: "0.0.0"
17245            }
17246        ]
17247    },
17248    "sentry.user.email": {
17249        brief: "User email address.",
17250        type: "string",
17251        applyScrubbing: {
17252            key: "auto"
17253        },
17254        isInOtel: !1,
17255        visibility: "public",
17256        deprecation: {
17257            replacement: "user.email"
17258        },
17259        aliases: [
17260            "user.email"
17261        ],
17262        changelog: [
17263            {
17264                version: "0.10.0",
17265                prs: [
17266                    406
17267                ]
17268            }
17269        ]
17270    },
17271    "sentry.user.geo.city": {
17272        brief: "Human readable city name.",
17273        type: "string",
17274        applyScrubbing: {
17275            key: "manual"
17276        },
17277        isInOtel: !1,
17278        visibility: "public",
17279        deprecation: {
17280            replacement: "user.geo.city"
17281        },
17282        aliases: [
17283            "user.geo.city"
17284        ],
17285        changelog: [
17286            {
17287                version: "0.10.0",
17288                prs: [
17289                    406
17290                ]
17291            }
17292        ]
17293    },
17294    "sentry.user.geo.country_code": {
17295        brief: "Two-letter country code (ISO 3166-1 alpha-2).",
17296        type: "string",
17297        applyScrubbing: {
17298            key: "manual"
17299        },
17300        isInOtel: !1,
17301        visibility: "public",
17302        deprecation: {
17303            replacement: "user.geo.country_code"
17304        },
17305        aliases: [
17306            "user.geo.country_code"
17307        ],
17308        changelog: [
17309            {
17310                version: "0.10.0",
17311                prs: [
17312                    406
17313                ]
17314            }
17315        ]
17316    },
17317    "sentry.user.geo.region": {
17318        brief: "Human readable region name or code.",
17319        type: "string",
17320        applyScrubbing: {
17321            key: "manual"
17322        },
17323        isInOtel: !1,
17324        visibility: "public",
17325        deprecation: {
17326            replacement: "user.geo.region"
17327        },
17328        aliases: [
17329            "user.geo.region"
17330        ],
17331        changelog: [
17332            {
17333                version: "0.10.0",
17334                prs: [
17335                    406
17336                ]
17337            }
17338        ]
17339    },
17340    "sentry.user.geo.subdivision": {
17341        brief: "Human readable subdivision name.",
17342        type: "string",
17343        applyScrubbing: {
17344            key: "manual"
17345        },
17346        isInOtel: !1,
17347        visibility: "public",
17348        deprecation: {
17349            replacement: "user.geo.subdivision"
17350        },
17351        aliases: [
17352            "user.geo.subdivision"
17353        ],
17354        changelog: [
17355            {
17356                version: "0.10.0",
17357                prs: [
17358                    406
17359                ]
17360            }
17361        ]
17362    },
17363    "sentry.user.id": {
17364        brief: "Unique identifier of the user.",
17365        type: "string",
17366        applyScrubbing: {
17367            key: "auto"
17368        },
17369        isInOtel: !1,
17370        visibility: "public",
17371        deprecation: {
17372            replacement: "user.id"
17373        },
17374        aliases: [
17375            "user.id"
17376        ],
17377        changelog: [
17378            {
17379                version: "0.10.0",
17380                prs: [
17381                    406
17382                ]
17383            }
17384        ]
17385    },
17386    "sentry.user.ip": {
17387        brief: "The IP address of the user.",
17388        type: "string",
17389        applyScrubbing: {
17390            key: "auto"
17391        },
17392        isInOtel: !1,
17393        visibility: "public",
17394        deprecation: {
17395            replacement: "user.ip_address"
17396        },
17397        aliases: [
17398            "user.ip_address"
17399        ],
17400        changelog: [
17401            {
17402                version: "0.10.0",
17403                prs: [
17404                    406
17405                ]
17406            }
17407        ]
17408    },
17409    "sentry.user.username": {
17410        brief: "Short name or login/username of the user.",
17411        type: "string",
17412        applyScrubbing: {
17413            key: "auto"
17414        },
17415        isInOtel: !1,
17416        visibility: "public",
17417        deprecation: {
17418            replacement: "user.name"
17419        },
17420        aliases: [
17421            "user.name"
17422        ],
17423        changelog: [
17424            {
17425                version: "0.10.0",
17426                prs: [
17427                    406
17428                ]
17429            }
17430        ]
17431    },
17432    "server.address": {
17433        brief: "Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.",
17434        type: "string",
17435        applyScrubbing: {
17436            key: "manual"
17437        },
17438        isInOtel: !0,
17439        visibility: "public",
17440        example: "example.com",
17441        aliases: [
17442            "http.server_name",
17443            "net.host.name",
17444            "http.host",
17445            "server_name"
17446        ],
17447        changelog: [
17448            {
17449                version: "0.1.0",
17450                prs: [
17451                    108,
17452                    127
17453                ]
17454            },
17455            {
17456                version: "0.0.0"
17457            }
17458        ]
17459    },
17460    server_name: {
17461        brief: "Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.",
17462        type: "string",
17463        applyScrubbing: {
17464            key: "manual"
17465        },
17466        isInOtel: !1,
17467        visibility: "public",
17468        example: "example.com",
17469        deprecation: {
17470            replacement: "server.address",
17471            reason: "This attribute is being deprecated in favor of server.address, which is the OTel-aligned replacement."
17472        },
17473        aliases: [
17474            "server.address",
17475            "http.server_name",
17476            "net.host.name",
17477            "http.host"
17478        ],
17479        changelog: [
17480            {
17481                version: "0.16.0",
17482                prs: [
17483                    477
17484                ],
17485                description: "Added server_name attribute, deprecated in favor of server.address"
17486            }
17487        ]
17488    },
17489    "server.port": {
17490        brief: "Server port number.",
17491        type: "integer",
17492        applyScrubbing: {
17493            key: "manual"
17494        },
17495        isInOtel: !0,
17496        visibility: "public",
17497        example: 1337,
17498        aliases: [
17499            "net.host.port"
17500        ],
17501        changelog: [
17502            {
17503                version: "0.4.0",
17504                prs: [
17505                    228
17506                ]
17507            },
17508            {
17509                version: "0.0.0"
17510            }
17511        ]
17512    },
17513    "service.name": {
17514        brief: "Logical name of the service.",
17515        type: "string",
17516        applyScrubbing: {
17517            key: "manual"
17518        },
17519        isInOtel: !0,
17520        visibility: "public",
17521        example: "omegastar",
17522        changelog: [
17523            {
17524                version: "0.1.0",
17525                prs: [
17526                    127
17527                ]
17528            },
17529            {
17530                version: "0.0.0"
17531            }
17532        ]
17533    },
17534    "service.version": {
17535        brief: "The version string of the service API or implementation. The format is not defined by these conventions.",
17536        type: "string",
17537        applyScrubbing: {
17538            key: "manual"
17539        },
17540        isInOtel: !0,
17541        visibility: "public",
17542        example: "5.0.0",
17543        aliases: [
17544            "sentry.release"
17545        ],
17546        changelog: [
17547            {
17548                version: "0.1.0",
17549                prs: [
17550                    127
17551                ]
17552            },
17553            {
17554                version: "0.0.0"
17555            }
17556        ]
17557    },
17558    "session.id": {
17559        brief: "A unique id identifying the active session at the time of setting this attribute",
17560        type: "string",
17561        applyScrubbing: {
17562            key: "manual"
17563        },
17564        isInOtel: !0,
17565        visibility: "public",
17566        example: "00112233-4455-6677-8899-aabbccddeeff",
17567        changelog: [
17568            {
17569                version: "0.11.0",
17570                prs: [
17571                    412
17572                ],
17573                description: "Added session.id attribute"
17574            }
17575        ]
17576    },
17577    stall_percentage: {
17578        brief: "The fraction of time the app was stalled. Only applies to React Native. This is computed by Relay.",
17579        type: "double",
17580        applyScrubbing: {
17581            key: "manual"
17582        },
17583        isInOtel: !1,
17584        visibility: "public",
17585        changelog: [
17586            {
17587                version: "0.7.0",
17588                prs: [
17589                    362
17590                ],
17591                description: "Added stall_percentage attribute"
17592            }
17593        ]
17594    },
17595    stall_total_time: {
17596        brief: "The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay.",
17597        type: "double",
17598        applyScrubbing: {
17599            key: "manual"
17600        },
17601        isInOtel: !1,
17602        visibility: "public",
17603        changelog: [
17604            {
17605                version: "0.7.0",
17606                prs: [
17607                    362
17608                ],
17609                description: "Added stall_total_time attribute"
17610            }
17611        ]
17612    },
17613    "state.type": {
17614        brief: "The type of state management library",
17615        type: "string",
17616        applyScrubbing: {
17617            key: "manual"
17618        },
17619        isInOtel: !1,
17620        visibility: "public",
17621        example: "redux",
17622        changelog: [
17623            {
17624                version: "0.7.0",
17625                prs: [
17626                    365
17627                ],
17628                description: "Added state.type attribute"
17629            }
17630        ]
17631    },
17632    "thread.id": {
17633        brief: "Current \u201Cmanaged\u201D thread ID.",
17634        type: "integer",
17635        applyScrubbing: {
17636            key: "manual"
17637        },
17638        isInOtel: !0,
17639        visibility: "public",
17640        example: 56,
17641        changelog: [
17642            {
17643                version: "0.0.0"
17644            }
17645        ]
17646    },
17647    "thread.name": {
17648        brief: "Current thread name.",
17649        type: "string",
17650        applyScrubbing: {
17651            key: "manual"
17652        },
17653        isInOtel: !0,
17654        visibility: "public",
17655        example: "main",
17656        changelog: [
17657            {
17658                version: "0.1.0",
17659                prs: [
17660                    127
17661                ]
17662            },
17663            {
17664                version: "0.0.0"
17665            }
17666        ]
17667    },
17668    "timber.tag": {
17669        brief: "The log tag provided by the timber logging framework.",
17670        type: "string",
17671        applyScrubbing: {
17672            key: "manual"
17673        },
17674        isInOtel: !1,
17675        visibility: "public",
17676        example: "MyTag",
17677        changelog: [
17678            {
17679                version: "0.3.0",
17680                prs: [
17681                    183
17682                ]
17683            }
17684        ]
17685    },
17686    time_to_full_display: {
17687        brief: "The duration of time to full display in milliseconds",
17688        type: "double",
17689        applyScrubbing: {
17690            key: "manual"
17691        },
17692        isInOtel: !1,
17693        visibility: "public",
17694        example: 1234.56,
17695        deprecation: {
17696            replacement: "app.vitals.ttfd.value",
17697            reason: "Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes"
17698        },
17699        aliases: [
17700            "app.vitals.ttfd.value"
17701        ],
17702        changelog: [
17703            {
17704                version: "0.5.0",
17705                prs: [
17706                    313
17707                ],
17708                description: "Added and deprecated in favor of app.vitals.ttfd.value"
17709            }
17710        ]
17711    },
17712    time_to_initial_display: {
17713        brief: "The duration of time to initial display in milliseconds",
17714        type: "double",
17715        applyScrubbing: {
17716            key: "manual"
17717        },
17718        isInOtel: !1,
17719        visibility: "public",
17720        example: 1234.56,
17721        deprecation: {
17722            replacement: "app.vitals.ttid.value",
17723            reason: "Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes"
17724        },
17725        aliases: [
17726            "app.vitals.ttid.value"
17727        ],
17728        changelog: [
17729            {
17730                version: "0.5.0",
17731                prs: [
17732                    313
17733                ],
17734                description: "Added and deprecated in favor of app.vitals.ttid.value"
17735            }
17736        ]
17737    },
17738    transaction: {
17739        brief: "The sentry transaction (segment name).",
17740        type: "string",
17741        applyScrubbing: {
17742            key: "manual"
17743        },
17744        isInOtel: !1,
17745        visibility: "public",
17746        example: "GET /",
17747        deprecation: {
17748            replacement: "sentry.segment.name"
17749        },
17750        aliases: [
17751            "sentry.segment.name",
17752            "sentry.transaction"
17753        ],
17754        changelog: [
17755            {
17756                version: "0.6.0",
17757                prs: [
17758                    345
17759                ],
17760                description: "Updated transaction deprecation replacement to sentry.segment.name"
17761            },
17762            {
17763                version: "0.1.0",
17764                prs: [
17765                    61,
17766                    127
17767                ]
17768            },
17769            {
17770                version: "0.0.0"
17771            }
17772        ]
17773    },
17774    "trpc.procedure_path": {
17775        brief: "The path of the tRPC procedure being called",
17776        type: "string",
17777        applyScrubbing: {
17778            key: "manual"
17779        },
17780        isInOtel: !1,
17781        visibility: "public",
17782        example: "user.getById",
17783        changelog: [
17784            {
17785                version: "0.7.0",
17786                prs: [
17787                    370
17788                ],
17789                description: "Added trpc.procedure_path attribute"
17790            }
17791        ]
17792    },
17793    "trpc.procedure_type": {
17794        brief: "The type of the tRPC procedure",
17795        type: "string",
17796        applyScrubbing: {
17797            key: "manual"
17798        },
17799        isInOtel: !1,
17800        visibility: "public",
17801        example: "query",
17802        changelog: [
17803            {
17804                version: "0.7.0",
17805                prs: [
17806                    370
17807                ],
17808                description: "Added trpc.procedure_type attribute"
17809            }
17810        ]
17811    },
17812    ttfb: {
17813        brief: "The value of the recorded Time To First Byte (TTFB) web vital in milliseconds",
17814        type: "double",
17815        applyScrubbing: {
17816            key: "manual"
17817        },
17818        isInOtel: !1,
17819        visibility: "public",
17820        example: 194,
17821        deprecation: {
17822            replacement: "browser.web_vital.ttfb.value",
17823            reason: "This attribute is being deprecated in favor of browser.web_vital.ttfb.value"
17824        },
17825        aliases: [
17826            "browser.web_vital.ttfb.value"
17827        ],
17828        changelog: [
17829            {
17830                version: "0.5.0",
17831                prs: [
17832                    235
17833                ]
17834            }
17835        ]
17836    },
17837    "ttfb.requestTime": {
17838        brief: "The time it takes for the server to process the initial request and send the first byte of a response to the user's browser",
17839        type: "double",
17840        applyScrubbing: {
17841            key: "manual"
17842        },
17843        isInOtel: !1,
17844        visibility: "public",
17845        example: 1554.5814,
17846        deprecation: {
17847            replacement: "browser.web_vital.ttfb.request_time",
17848            reason: "This attribute is being deprecated in favor of browser.web_vital.ttfb.request_time"
17849        },
17850        aliases: [
17851            "browser.web_vital.ttfb.request_time"
17852        ],
17853        changelog: [
17854            {
17855                version: "0.5.0",
17856                prs: [
17857                    235
17858                ]
17859            }
17860        ]
17861    },
17862    type: {
17863        brief: "More granular type of the operation happening.",
17864        type: "string",
17865        applyScrubbing: {
17866            key: "manual"
17867        },
17868        isInOtel: !1,
17869        visibility: "public",
17870        example: "fetch",
17871        changelog: [
17872            {
17873                version: "0.0.0"
17874            }
17875        ]
17876    },
17877    "ui.component_name": {
17878        brief: "The name of the associated component.",
17879        type: "string",
17880        applyScrubbing: {
17881            key: "manual"
17882        },
17883        isInOtel: !1,
17884        visibility: "public",
17885        example: "HomeButton",
17886        changelog: [
17887            {
17888                version: "0.1.0",
17889                prs: [
17890                    127
17891                ]
17892            },
17893            {
17894                version: "0.0.0"
17895            }
17896        ]
17897    },
17898    "ui.contributes_to_ttfd": {
17899        brief: "Whether the span execution contributed to the TTFD (time to fully drawn) metric.",
17900        type: "boolean",
17901        applyScrubbing: {
17902            key: "manual"
17903        },
17904        isInOtel: !1,
17905        visibility: "public",
17906        example: !0,
17907        changelog: [
17908            {
17909                version: "0.0.0"
17910            }
17911        ]
17912    },
17913    "ui.contributes_to_ttid": {
17914        brief: "Whether the span execution contributed to the TTID (time to initial display) metric.",
17915        type: "boolean",
17916        applyScrubbing: {
17917            key: "manual"
17918        },
17919        isInOtel: !1,
17920        visibility: "public",
17921        example: !0,
17922        changelog: [
17923            {
17924                version: "0.0.0"
17925            }
17926        ]
17927    },
17928    "ui.element.height": {
17929        brief: "The height of the UI element (for Html in pixels)",
17930        type: "integer",
17931        applyScrubbing: {
17932            key: "manual"
17933        },
17934        isInOtel: !1,
17935        visibility: "public",
17936        example: 256,
17937        changelog: [
17938            {
17939                version: "0.5.0",
17940                prs: [
17941                    284
17942                ],
17943                description: "Added ui.element.height attribute"
17944            }
17945        ]
17946    },
17947    "ui.element.id": {
17948        brief: "The id of the UI element",
17949        type: "string",
17950        applyScrubbing: {
17951            key: "manual"
17952        },
17953        isInOtel: !1,
17954        visibility: "public",
17955        example: "btn-login",
17956        changelog: [
17957            {
17958                version: "0.5.0",
17959                prs: [
17960                    284
17961                ],
17962                description: "Added ui.element.id attribute"
17963            }
17964        ]
17965    },
17966    "ui.element.identifier": {
17967        brief: "The identifier used to measure the UI element timing",
17968        type: "string",
17969        applyScrubbing: {
17970            key: "manual"
17971        },
17972        isInOtel: !1,
17973        visibility: "public",
17974        example: "heroImage",
17975        changelog: [
17976            {
17977                version: "0.5.0",
17978                prs: [
17979                    284
17980                ],
17981                description: "Added ui.element.identifier attribute"
17982            }
17983        ]
17984    },
17985    "ui.element.load_time": {
17986        brief: "The loading time of a UI element (from time origin to finished loading)",
17987        type: "double",
17988        applyScrubbing: {
17989            key: "manual"
17990        },
17991        isInOtel: !1,
17992        visibility: "public",
17993        example: 998.2234,
17994        changelog: [
17995            {
17996                version: "0.5.0",
17997                prs: [
17998                    284
17999                ],
18000                description: "Added ui.element.load_time attribute"
18001            }
18002        ]
18003    },
18004    "ui.element.paint_type": {
18005        brief: "The type of element paint. Can either be 'image-paint' or 'text-paint'",
18006        type: "string",
18007        applyScrubbing: {
18008            key: "manual"
18009        },
18010        isInOtel: !1,
18011        visibility: "public",
18012        example: "image-paint",
18013        changelog: [
18014            {
18015                version: "0.5.0",
18016                prs: [
18017                    284
18018                ],
18019                description: "Added ui.element.paint_type attribute"
18020            }
18021        ]
18022    },
18023    "ui.element.render_time": {
18024        brief: "The rendering time of the UI element (from time origin to finished rendering)",
18025        type: "double",
18026        applyScrubbing: {
18027            key: "manual"
18028        },
18029        isInOtel: !1,
18030        visibility: "public",
18031        example: 1023.1124,
18032        changelog: [
18033            {
18034                version: "0.5.0",
18035                prs: [
18036                    284
18037                ],
18038                description: "Added ui.element.render_time attribute"
18039            }
18040        ]
18041    },
18042    "ui.element.type": {
18043        brief: "type of the UI element",
18044        type: "string",
18045        applyScrubbing: {
18046            key: "manual"
18047        },
18048        isInOtel: !1,
18049        visibility: "public",
18050        example: "img",
18051        changelog: [
18052            {
18053                version: "0.5.0",
18054                prs: [
18055                    284
18056                ],
18057                description: "Added ui.element.type attribute"
18058            }
18059        ]
18060    },
18061    "ui.element.url": {
18062        brief: "The URL of the UI element (e.g. an img src)",
18063        type: "string",
18064        applyScrubbing: {
18065            key: "auto"
18066        },
18067        isInOtel: !1,
18068        visibility: "public",
18069        example: "https://assets.myapp.com/hero.png",
18070        changelog: [
18071            {
18072                version: "0.5.0",
18073                prs: [
18074                    284
18075                ],
18076                description: "Added ui.element.url attribute"
18077            }
18078        ]
18079    },
18080    "ui.element.width": {
18081        brief: "The width of the UI element (for HTML in pixels)",
18082        type: "integer",
18083        applyScrubbing: {
18084            key: "manual"
18085        },
18086        isInOtel: !1,
18087        visibility: "public",
18088        example: 512,
18089        changelog: [
18090            {
18091                version: "0.5.0",
18092                prs: [
18093                    284
18094                ],
18095                description: "Added ui.element.width attribute"
18096            }
18097        ]
18098    },
18099    url: {
18100        brief: "The URL of the resource that was fetched.",
18101        type: "string",
18102        applyScrubbing: {
18103            key: "auto"
18104        },
18105        isInOtel: !1,
18106        visibility: "public",
18107        example: "https://example.com/test?foo=bar#buzz",
18108        deprecation: {
18109            replacement: "url.full"
18110        },
18111        aliases: [
18112            "url.full",
18113            "http.url"
18114        ],
18115        changelog: [
18116            {
18117                version: "0.1.0",
18118                prs: [
18119                    61
18120                ]
18121            },
18122            {
18123                version: "0.0.0"
18124            }
18125        ]
18126    },
18127    "url.domain": {
18128        brief: "Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.",
18129        type: "string",
18130        applyScrubbing: {
18131            key: "manual"
18132        },
18133        isInOtel: !0,
18134        visibility: "public",
18135        example: "example.com",
18136        changelog: [
18137            {
18138                version: "0.1.0",
18139                prs: [
18140                    127
18141                ]
18142            },
18143            {
18144                version: "0.0.0"
18145            }
18146        ]
18147    },
18148    "url.fragment": {
18149        brief: "The fragments present in the URI. Note that this does not contain the leading # character, while the `http.fragment` attribute does.",
18150        type: "string",
18151        applyScrubbing: {
18152            key: "auto"
18153        },
18154        isInOtel: !0,
18155        visibility: "public",
18156        example: "details",
18157        changelog: [
18158            {
18159                version: "0.0.0"
18160            }
18161        ]
18162    },
18163    "url.full": {
18164        brief: "The URL of the resource that was fetched.",
18165        type: "string",
18166        applyScrubbing: {
18167            key: "auto"
18168        },
18169        isInOtel: !0,
18170        visibility: "public",
18171        example: "https://example.com/test?foo=bar#buzz",
18172        aliases: [
18173            "http.url",
18174            "url"
18175        ],
18176        changelog: [
18177            {
18178                version: "0.1.0",
18179                prs: [
18180                    108
18181                ]
18182            },
18183            {
18184                version: "0.0.0"
18185            }
18186        ]
18187    },
18188    "url.path": {
18189        brief: "The URI path component.",
18190        type: "string",
18191        applyScrubbing: {
18192            key: "auto"
18193        },
18194        isInOtel: !0,
18195        visibility: "public",
18196        example: "/foo",
18197        changelog: [
18198            {
18199                version: "0.0.0"
18200            }
18201        ]
18202    },
18203    "url.path.parameter.<key>": {
18204        brief: "Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.",
18205        type: "string",
18206        applyScrubbing: {
18207            key: "auto"
18208        },
18209        isInOtel: !1,
18210        visibility: "public",
18211        hasDynamicSuffix: !0,
18212        example: "url.path.parameter.id='123'",
18213        aliases: [
18214            "params.<key>"
18215        ],
18216        changelog: [
18217            {
18218                version: "0.1.0",
18219                prs: [
18220                    103
18221                ]
18222            }
18223        ]
18224    },
18225    "url.port": {
18226        brief: "Server port number.",
18227        type: "integer",
18228        applyScrubbing: {
18229            key: "manual"
18230        },
18231        isInOtel: !0,
18232        visibility: "public",
18233        example: 1337,
18234        changelog: [
18235            {
18236                version: "0.4.0",
18237                prs: [
18238                    228
18239                ]
18240            },
18241            {
18242                version: "0.0.0"
18243            }
18244        ]
18245    },
18246    "url.query": {
18247        brief: "The query string present in the URL. Note that this does not contain the leading ? character, while the `http.query` attribute does.",
18248        type: "string",
18249        applyScrubbing: {
18250            key: "auto",
18251            reason: "Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information."
18252        },
18253        isInOtel: !0,
18254        visibility: "public",
18255        example: "foo=bar&bar=baz",
18256        changelog: [
18257            {
18258                version: "0.0.0"
18259            }
18260        ]
18261    },
18262    "url.same_origin": {
18263        brief: "Indicates that a URL has the same origin as the current page's origin in the browser.",
18264        type: "boolean",
18265        applyScrubbing: {
18266            key: "manual"
18267        },
18268        isInOtel: !1,
18269        visibility: "public",
18270        example: !0,
18271        deprecation: {
18272            replacement: "http.request.same_origin",
18273            reason: "This attribute is being deprecated in favor of http.request.same_origin."
18274        },
18275        aliases: [
18276            "http.request.same_origin"
18277        ],
18278        changelog: [
18279            {
18280                version: "0.16.0",
18281                prs: [
18282                    456
18283                ],
18284                description: "Added url.same_origin attribute, deprecated in favor of http.request.same_origin"
18285            }
18286        ]
18287    },
18288    "url.scheme": {
18289        brief: "The URI scheme component identifying the used protocol.",
18290        type: "string",
18291        applyScrubbing: {
18292            key: "manual"
18293        },
18294        isInOtel: !0,
18295        visibility: "public",
18296        example: "https",
18297        aliases: [
18298            "http.scheme"
18299        ],
18300        changelog: [
18301            {
18302                version: "0.1.0",
18303                prs: [
18304                    127
18305                ]
18306            },
18307            {
18308                version: "0.0.0"
18309            }
18310        ]
18311    },
18312    "url.template": {
18313        brief: "The low-cardinality template of an absolute path reference.",
18314        type: "string",
18315        applyScrubbing: {
18316            key: "manual"
18317        },
18318        isInOtel: !0,
18319        visibility: "public",
18320        example: "/users/:id",
18321        aliases: [
18322            "http.route"
18323        ],
18324        changelog: [
18325            {
18326                version: "0.1.0",
18327                prs: [
18328                    127
18329                ]
18330            },
18331            {
18332                version: "0.0.0"
18333            }
18334        ]
18335    },
18336    "user_agent.original": {
18337        brief: "Value of the HTTP User-Agent header sent by the client.",
18338        type: "string",
18339        applyScrubbing: {
18340            key: "manual"
18341        },
18342        isInOtel: !0,
18343        visibility: "public",
18344        example: "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1",
18345        aliases: [
18346            "http.user_agent"
18347        ],
18348        changelog: [
18349            {
18350                version: "0.1.0",
18351                prs: [
18352                    127
18353                ]
18354            },
18355            {
18356                version: "0.0.0"
18357            }
18358        ]
18359    },
18360    "user.email": {
18361        brief: "User email address.",
18362        type: "string",
18363        applyScrubbing: {
18364            key: "auto"
18365        },
18366        isInOtel: !0,
18367        visibility: "public",
18368        example: "[email protected]",
18369        aliases: [
18370            "sentry.user.email"
18371        ],
18372        changelog: [
18373            {
18374                version: "0.0.0"
18375            }
18376        ]
18377    },
18378    "user.full_name": {
18379        brief: "User's full name.",
18380        type: "string",
18381        applyScrubbing: {
18382            key: "auto"
18383        },
18384        isInOtel: !0,
18385        visibility: "public",
18386        example: "John Smith",
18387        changelog: [
18388            {
18389                version: "0.0.0"
18390            }
18391        ]
18392    },
18393    "user.geo.city": {
18394        brief: "Human readable city name.",
18395        type: "string",
18396        applyScrubbing: {
18397            key: "manual"
18398        },
18399        isInOtel: !1,
18400        visibility: "public",
18401        example: "Toronto",
18402        aliases: [
18403            "sentry.user.geo.city"
18404        ],
18405        changelog: [
18406            {
18407                version: "0.0.0"
18408            }
18409        ]
18410    },
18411    "user.geo.country_code": {
18412        brief: "Two-letter country code (ISO 3166-1 alpha-2).",
18413        type: "string",
18414        applyScrubbing: {
18415            key: "manual"
18416        },
18417        isInOtel: !1,
18418        visibility: "public",
18419        example: "CA",
18420        aliases: [
18421            "sentry.user.geo.country_code"
18422        ],
18423        changelog: [
18424            {
18425                version: "0.0.0"
18426            }
18427        ]
18428    },
18429    "user.geo.region": {
18430        brief: "Human readable region name or code.",
18431        type: "string",
18432        applyScrubbing: {
18433            key: "manual"
18434        },
18435        isInOtel: !1,
18436        visibility: "public",
18437        example: "Canada",
18438        aliases: [
18439            "sentry.user.geo.region"
18440        ],
18441        changelog: [
18442            {
18443                version: "0.0.0"
18444            }
18445        ]
18446    },
18447    "user.geo.subdivision": {
18448        brief: "Human readable subdivision name.",
18449        type: "string",
18450        applyScrubbing: {
18451            key: "manual"
18452        },
18453        isInOtel: !1,
18454        visibility: "public",
18455        example: "Ontario",
18456        aliases: [
18457            "sentry.user.geo.subdivision"
18458        ],
18459        changelog: [
18460            {
18461                version: "0.0.0"
18462            }
18463        ]
18464    },
18465    "user.hash": {
18466        brief: "Unique user hash to correlate information for a user in anonymized form.",
18467        type: "string",
18468        applyScrubbing: {
18469            key: "auto"
18470        },
18471        isInOtel: !0,
18472        visibility: "public",
18473        example: "8ae4c2993e0f4f3b8b2d1b1f3b5e8f4d",
18474        changelog: [
18475            {
18476                version: "0.0.0"
18477            }
18478        ]
18479    },
18480    "user.id": {
18481        brief: "Unique identifier of the user.",
18482        type: "string",
18483        applyScrubbing: {
18484            key: "auto"
18485        },
18486        isInOtel: !0,
18487        visibility: "public",
18488        example: "S-1-5-21-202424912787-2692429404-2351956786-1000",
18489        aliases: [
18490            "sentry.user.id"
18491        ],
18492        changelog: [
18493            {
18494                version: "0.0.0"
18495            }
18496        ]
18497    },
18498    "user.ip_address": {
18499        brief: "The IP address of the user.",
18500        type: "string",
18501        applyScrubbing: {
18502            key: "auto"
18503        },
18504        isInOtel: !1,
18505        visibility: "public",
18506        example: "192.168.1.1",
18507        aliases: [
18508            "sentry.user.ip"
18509        ],
18510        changelog: [
18511            {
18512                version: "0.1.0",
18513                prs: [
18514                    75
18515                ]
18516            }
18517        ]
18518    },
18519    "user.name": {
18520        brief: "Short name or login/username of the user.",
18521        type: "string",
18522        applyScrubbing: {
18523            key: "auto"
18524        },
18525        isInOtel: !0,
18526        visibility: "public",
18527        example: "j.smith",
18528        aliases: [
18529            "sentry.user.username"
18530        ],
18531        changelog: [
18532            {
18533                version: "0.0.0"
18534            }
18535        ]
18536    },
18537    "user.roles": {
18538        brief: "Array of user roles at the time of the event.",
18539        type: "string[]",
18540        applyScrubbing: {
18541            key: "auto"
18542        },
18543        isInOtel: !0,
18544        visibility: "public",
18545        example: [
18546            "admin",
18547            "editor"
18548        ],
18549        changelog: [
18550            {
18551                version: "0.0.0"
18552            }
18553        ]
18554    },
18555    "vercel.branch": {
18556        brief: "Git branch name for Vercel project",
18557        type: "string",
18558        applyScrubbing: {
18559            key: "manual"
18560        },
18561        isInOtel: !1,
18562        visibility: "public",
18563        example: "main",
18564        changelog: [
18565            {
18566                version: "0.2.0",
18567                prs: [
18568                    163
18569                ]
18570            }
18571        ]
18572    },
18573    "vercel.build_id": {
18574        brief: "Identifier for the Vercel build (only present on build logs)",
18575        type: "string",
18576        applyScrubbing: {
18577            key: "manual"
18578        },
18579        isInOtel: !1,
18580        visibility: "public",
18581        example: "bld_cotnkcr76",
18582        changelog: [
18583            {
18584                version: "0.2.0",
18585                prs: [
18586                    163
18587                ]
18588            }
18589        ]
18590    },
18591    "vercel.deployment_id": {
18592        brief: "Identifier for the Vercel deployment",
18593        type: "string",
18594        applyScrubbing: {
18595            key: "manual"
18596        },
18597        isInOtel: !1,
18598        visibility: "public",
18599        example: "dpl_233NRGRjVZX1caZrXWtz5g1TAksD",
18600        changelog: [
18601            {
18602                version: "0.2.0",
18603                prs: [
18604                    163
18605                ]
18606            }
18607        ]
18608    },
18609    "vercel.destination": {
18610        brief: "Origin of the external content in Vercel (only on external logs)",
18611        type: "string",
18612        applyScrubbing: {
18613            key: "manual"
18614        },
18615        isInOtel: !1,
18616        visibility: "public",
18617        example: "https://vitals.vercel-insights.com/v1",
18618        changelog: [
18619            {
18620                version: "0.2.0",
18621                prs: [
18622                    163
18623                ]
18624            }
18625        ]
18626    },
18627    "vercel.edge_type": {
18628        brief: "Type of edge runtime in Vercel",
18629        type: "string",
18630        applyScrubbing: {
18631            key: "manual"
18632        },
18633        isInOtel: !1,
18634        visibility: "public",
18635        example: "edge-function",
18636        changelog: [
18637            {
18638                version: "0.2.0",
18639                prs: [
18640                    163
18641                ]
18642            }
18643        ]
18644    },
18645    "vercel.entrypoint": {
18646        brief: "Entrypoint for the request in Vercel",
18647        type: "string",
18648        applyScrubbing: {
18649            key: "manual"
18650        },
18651        isInOtel: !1,
18652        visibility: "public",
18653        example: "api/index.js",
18654        changelog: [
18655            {
18656                version: "0.2.0",
18657                prs: [
18658                    163
18659                ]
18660            }
18661        ]
18662    },
18663    "vercel.execution_region": {
18664        brief: "Region where the request is executed",
18665        type: "string",
18666        applyScrubbing: {
18667            key: "manual"
18668        },
18669        isInOtel: !1,
18670        visibility: "public",
18671        example: "sfo1",
18672        changelog: [
18673            {
18674                version: "0.2.0",
18675                prs: [
18676                    163
18677                ]
18678            }
18679        ]
18680    },
18681    "vercel.id": {
18682        brief: "Unique identifier for the log entry in Vercel",
18683        type: "string",
18684        applyScrubbing: {
18685            key: "manual"
18686        },
18687        isInOtel: !1,
18688        visibility: "public",
18689        example: "1573817187330377061717300000",
18690        changelog: [
18691            {
18692                version: "0.2.0",
18693                prs: [
18694                    163
18695                ]
18696            }
18697        ]
18698    },
18699    "vercel.ja3_digest": {
18700        brief: "JA3 fingerprint digest of Vercel request",
18701        type: "string",
18702        applyScrubbing: {
18703            key: "auto"
18704        },
18705        isInOtel: !1,
18706        visibility: "public",
18707        example: "769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0",
18708        changelog: [
18709            {
18710                version: "0.2.0",
18711                prs: [
18712                    163
18713                ]
18714            }
18715        ]
18716    },
18717    "vercel.ja4_digest": {
18718        brief: "JA4 fingerprint digest",
18719        type: "string",
18720        applyScrubbing: {
18721            key: "auto"
18722        },
18723        isInOtel: !1,
18724        visibility: "public",
18725        example: "t13d1516h2_8daaf6152771_02713d6af862",
18726        changelog: [
18727            {
18728                version: "0.2.0",
18729                prs: [
18730                    163
18731                ]
18732            }
18733        ]
18734    },
18735    "vercel.log_type": {
18736        brief: "Vercel log output type",
18737        type: "string",
18738        applyScrubbing: {
18739            key: "manual"
18740        },
18741        isInOtel: !1,
18742        visibility: "public",
18743        example: "stdout",
18744        changelog: [
18745            {
18746                version: "0.2.0",
18747                prs: [
18748                    163
18749                ]
18750            }
18751        ]
18752    },
18753    "vercel.path": {
18754        brief: "Function or dynamic path of the request in Vercel.",
18755        type: "string",
18756        applyScrubbing: {
18757            key: "manual"
18758        },
18759        isInOtel: !1,
18760        visibility: "public",
18761        example: "/dynamic/[route].json",
18762        changelog: [
18763            {
18764                version: "0.6.0",
18765                prs: [
18766                    349
18767                ],
18768                description: "Added vercel.path attribute"
18769            }
18770        ]
18771    },
18772    "vercel.project_id": {
18773        brief: "Identifier for the Vercel project",
18774        type: "string",
18775        applyScrubbing: {
18776            key: "manual"
18777        },
18778        isInOtel: !1,
18779        visibility: "public",
18780        example: "gdufoJxB6b9b1fEqr1jUtFkyavUU",
18781        changelog: [
18782            {
18783                version: "0.2.0",
18784                prs: [
18785                    163
18786                ]
18787            }
18788        ]
18789    },
18790    "vercel.project_name": {
18791        brief: "Name of the Vercel project",
18792        type: "string",
18793        applyScrubbing: {
18794            key: "manual"
18795        },
18796        isInOtel: !1,
18797        visibility: "public",
18798        example: "my-app",
18799        changelog: [
18800            {
18801                version: "0.2.0",
18802                prs: [
18803                    163
18804                ]
18805            }
18806        ]
18807    },
18808    "vercel.proxy.cache_id": {
18809        brief: "Original request ID when request is served from cache",
18810        type: "string",
18811        applyScrubbing: {
18812            key: "manual"
18813        },
18814        isInOtel: !1,
18815        visibility: "public",
18816        example: "pdx1::v8g4b-1744143786684-93dafbc0f70d",
18817        changelog: [
18818            {
18819                version: "0.2.0",
18820                prs: [
18821                    163
18822                ]
18823            }
18824        ]
18825    },
18826    "vercel.proxy.client_ip": {
18827        brief: "Client IP address",
18828        type: "string",
18829        applyScrubbing: {
18830            key: "auto"
18831        },
18832        isInOtel: !1,
18833        visibility: "public",
18834        example: "120.75.16.101",
18835        changelog: [
18836            {
18837                version: "0.2.0",
18838                prs: [
18839                    163
18840                ]
18841            }
18842        ]
18843    },
18844    "vercel.proxy.host": {
18845        brief: "Hostname of the request",
18846        type: "string",
18847        applyScrubbing: {
18848            key: "manual"
18849        },
18850        isInOtel: !1,
18851        visibility: "public",
18852        example: "test.vercel.app",
18853        changelog: [
18854            {
18855                version: "0.2.0",
18856                prs: [
18857                    163
18858                ]
18859            }
18860        ]
18861    },
18862    "vercel.proxy.lambda_region": {
18863        brief: "Region where lambda function executed",
18864        type: "string",
18865        applyScrubbing: {
18866            key: "manual"
18867        },
18868        isInOtel: !1,
18869        visibility: "public",
18870        example: "sfo1",
18871        changelog: [
18872            {
18873                version: "0.2.0",
18874                prs: [
18875                    163
18876                ]
18877            }
18878        ]
18879    },
18880    "vercel.proxy.method": {
18881        brief: "HTTP method of the request",
18882        type: "string",
18883        applyScrubbing: {
18884            key: "manual"
18885        },
18886        isInOtel: !1,
18887        visibility: "public",
18888        example: "GET",
18889        changelog: [
18890            {
18891                version: "0.2.0",
18892                prs: [
18893                    163
18894                ]
18895            }
18896        ]
18897    },
18898    "vercel.proxy.path": {
18899        brief: "Request path with query parameters",
18900        type: "string",
18901        applyScrubbing: {
18902            key: "auto"
18903        },
18904        isInOtel: !1,
18905        visibility: "public",
18906        example: "/dynamic/some-value.json?route=some-value",
18907        changelog: [
18908            {
18909                version: "0.2.0",
18910                prs: [
18911                    163
18912                ]
18913            }
18914        ]
18915    },
18916    "vercel.proxy.path_type": {
18917        brief: "How the request was served based on its path and project configuration",
18918        type: "string",
18919        applyScrubbing: {
18920            key: "manual"
18921        },
18922        isInOtel: !1,
18923        visibility: "public",
18924        example: "func",
18925        changelog: [
18926            {
18927                version: "0.2.0",
18928                prs: [
18929                    163
18930                ]
18931            }
18932        ]
18933    },
18934    "vercel.proxy.path_type_variant": {
18935        brief: "Variant of the path type",
18936        type: "string",
18937        applyScrubbing: {
18938            key: "manual"
18939        },
18940        isInOtel: !1,
18941        visibility: "public",
18942        example: "api",
18943        changelog: [
18944            {
18945                version: "0.2.0",
18946                prs: [
18947                    163
18948                ]
18949            }
18950        ]
18951    },
18952    "vercel.proxy.referer": {
18953        brief: "Referer of the request",
18954        type: "string",
18955        applyScrubbing: {
18956            key: "auto"
18957        },
18958        isInOtel: !1,
18959        visibility: "public",
18960        example: "*.vercel.app",
18961        changelog: [
18962            {
18963                version: "0.2.0",
18964                prs: [
18965                    163
18966                ]
18967            }
18968        ]
18969    },
18970    "vercel.proxy.region": {
18971        brief: "Region where the request is processed",
18972        type: "string",
18973        applyScrubbing: {
18974            key: "manual"
18975        },
18976        isInOtel: !1,
18977        visibility: "public",
18978        example: "sfo1",
18979        changelog: [
18980            {
18981                version: "0.2.0",
18982                prs: [
18983                    163
18984                ]
18985            }
18986        ]
18987    },
18988    "vercel.proxy.response_byte_size": {
18989        brief: "Size of the response in bytes",
18990        type: "integer",
18991        applyScrubbing: {
18992            key: "manual"
18993        },
18994        isInOtel: !1,
18995        visibility: "public",
18996        example: 1024,
18997        changelog: [
18998            {
18999                version: "0.4.0",
19000                prs: [
19001                    228
19002                ]
19003            },
19004            {
19005                version: "0.2.0",
19006                prs: [
19007                    163
19008                ]
19009            }
19010        ]
19011    },
19012    "vercel.proxy.scheme": {
19013        brief: "Protocol of the request",
19014        type: "string",
19015        applyScrubbing: {
19016            key: "manual"
19017        },
19018        isInOtel: !1,
19019        visibility: "public",
19020        example: "https",
19021        changelog: [
19022            {
19023                version: "0.2.0",
19024                prs: [
19025                    163
19026                ]
19027            }
19028        ]
19029    },
19030    "vercel.proxy.status_code": {
19031        brief: "HTTP status code of the proxy request",
19032        type: "integer",
19033        applyScrubbing: {
19034            key: "manual"
19035        },
19036        isInOtel: !1,
19037        visibility: "public",
19038        example: 200,
19039        changelog: [
19040            {
19041                version: "0.4.0",
19042                prs: [
19043                    228
19044                ]
19045            },
19046            {
19047                version: "0.2.0",
19048                prs: [
19049                    163
19050                ]
19051            }
19052        ]
19053    },
19054    "vercel.proxy.timestamp": {
19055        brief: "Unix timestamp when the proxy request was made",
19056        type: "integer",
19057        applyScrubbing: {
19058            key: "manual"
19059        },
19060        isInOtel: !1,
19061        visibility: "public",
19062        example: 1573817250172,
19063        changelog: [
19064            {
19065                version: "0.4.0",
19066                prs: [
19067                    228
19068                ]
19069            },
19070            {
19071                version: "0.2.0",
19072                prs: [
19073                    163
19074                ]
19075            }
19076        ]
19077    },
19078    "vercel.proxy.user_agent": {
19079        brief: "User agent strings of the request",
19080        type: "string[]",
19081        applyScrubbing: {
19082            key: "manual"
19083        },
19084        isInOtel: !1,
19085        visibility: "public",
19086        example: [
19087            "Mozilla/5.0..."
19088        ],
19089        changelog: [
19090            {
19091                version: "0.2.0",
19092                prs: [
19093                    163
19094                ]
19095            }
19096        ]
19097    },
19098    "vercel.proxy.vercel_cache": {
19099        brief: "Cache status sent to the browser",
19100        type: "string",
19101        applyScrubbing: {
19102            key: "manual"
19103        },
19104        isInOtel: !1,
19105        visibility: "public",
19106        example: "REVALIDATED",
19107        changelog: [
19108            {
19109                version: "0.2.0",
19110                prs: [
19111                    163
19112                ]
19113            }
19114        ]
19115    },
19116    "vercel.proxy.vercel_id": {
19117        brief: "Vercel-specific identifier",
19118        type: "string",
19119        applyScrubbing: {
19120            key: "manual"
19121        },
19122        isInOtel: !1,
19123        visibility: "public",
19124        example: "sfo1::abc123",
19125        changelog: [
19126            {
19127                version: "0.2.0",
19128                prs: [
19129                    163
19130                ]
19131            }
19132        ]
19133    },
19134    "vercel.proxy.waf_action": {
19135        brief: "Action taken by firewall rules",
19136        type: "string",
19137        applyScrubbing: {
19138            key: "manual"
19139        },
19140        isInOtel: !1,
19141        visibility: "public",
19142        example: "deny",
19143        changelog: [
19144            {
19145                version: "0.2.0",
19146                prs: [
19147                    163
19148                ]
19149            }
19150        ]
19151    },
19152    "vercel.proxy.waf_rule_id": {
19153        brief: "ID of the firewall rule that matched",
19154        type: "string",
19155        applyScrubbing: {
19156            key: "manual"
19157        },
19158        isInOtel: !1,
19159        visibility: "public",
19160        example: "rule_gAHz8jtSB1Gy",
19161        changelog: [
19162            {
19163                version: "0.2.0",
19164                prs: [
19165                    163
19166                ]
19167            }
19168        ]
19169    },
19170    "vercel.request_id": {
19171        brief: "Identifier of the Vercel request",
19172        type: "string",
19173        applyScrubbing: {
19174            key: "manual"
19175        },
19176        isInOtel: !1,
19177        visibility: "public",
19178        example: "643af4e3-975a-4cc7-9e7a-1eda11539d90",
19179        changelog: [
19180            {
19181                version: "0.2.0",
19182                prs: [
19183                    163
19184                ]
19185            }
19186        ]
19187    },
19188    "vercel.source": {
19189        brief: "Origin of the Vercel log (build, edge, lambda, static, external, or firewall)",
19190        type: "string",
19191        applyScrubbing: {
19192            key: "manual"
19193        },
19194        isInOtel: !1,
19195        visibility: "public",
19196        example: "build",
19197        changelog: [
19198            {
19199                version: "0.2.0",
19200                prs: [
19201                    163
19202                ]
19203            }
19204        ]
19205    },
19206    "vercel.status_code": {
19207        brief: "HTTP status code of the request (-1 means no response returned and the lambda crashed)",
19208        type: "integer",
19209        applyScrubbing: {
19210            key: "manual"
19211        },
19212        isInOtel: !1,
19213        visibility: "public",
19214        example: 200,
19215        changelog: [
19216            {
19217                version: "0.4.0",
19218                prs: [
19219                    228
19220                ]
19221            },
19222            {
19223                version: "0.2.0",
19224                prs: [
19225                    163
19226                ]
19227            }
19228        ]
19229    }
19230};
19231;
19232var __TURBOPACK__imported__module__519988__5 = __TURBOPACK__imported__module__519988__;
19233;
19234;
19235const DEFAULT_BASE_URL = "thismessage:/";
19236function isURLObjectRelative(url) {
19237    return "isRelative" in url;
19238}
19239function parseStringToURLObject(url, urlBase) {
19240    const isRelative = url.indexOf("://") <= 0 && url.indexOf("//") !== 0;
19241    const base = urlBase !== null && urlBase !== void 0 ? urlBase : isRelative ? DEFAULT_BASE_URL : void 0;
19242    try {
19243        if ("canParse" in URL && !URL.canParse(url, base)) {
19244            return void 0;
19245        }
19246        const fullUrlObject = new URL(url, base);
19247        if (isRelative) {
19248            return {
19249                isRelative,
19250                pathname: fullUrlObject.pathname,
19251                search: fullUrlObject.search,
19252                hash: fullUrlObject.hash
19253            };
19254        }
19255        return fullUrlObject;
19256    } catch (unused) {}
19257    return void 0;
19258}
19259function getSanitizedUrlStringFromUrlObject(url) {
19260    if (isURLObjectRelative(url)) {
19261        return url.pathname;
19262    }
19263    const newUrl = new URL(url);
19264    newUrl.search = "";
19265    newUrl.hash = "";
19266    if ([
19267        "80",
19268        "443"
19269    ].includes(newUrl.port)) {
19270        newUrl.port = "";
19271    }
19272    if (newUrl.password) {
19273        newUrl.password = "%filtered%";
19274    }
19275    if (newUrl.username) {
19276        newUrl.username = "%filtered%";
19277    }
19278    return newUrl.toString();
19279}
19280function getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName) {
19281    var _ref;
19282    var _request_method;
19283    const method = (_ref = request === null || request === void 0 ? void 0 : (_request_method = request.method) === null || _request_method === void 0 ? void 0 : _request_method.toUpperCase()) !== null && _ref !== void 0 ? _ref : "GET";
19284    const route = routeName ? routeName : urlObject ? kind === "client" ? getSanitizedUrlStringFromUrlObject(urlObject) : urlObject.pathname : "/";
19285    return "".concat(method, " ").concat(route);
19286}
19287function getHttpSpanDetailsFromUrlObject(urlObject, kind, spanOrigin, request, routeName) {
19288    const attributes = {
19289        [__TURBOPACK__imported__module__519988__5["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: spanOrigin,
19290        [__TURBOPACK__imported__module__519988__5["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: "url"
19291    };
19292    if (routeName) {
19293        attributes[kind === "server" ? "http.route" : "url.template"] = routeName;
19294        attributes[__TURBOPACK__imported__module__519988__5["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]] = "route";
19295    }
19296    if (request === null || request === void 0 ? void 0 : request.method) {
19297        attributes[__TURBOPACK__imported__module__519988__5["SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD"]] = request.method.toUpperCase();
19298    }
19299    if (urlObject) {
19300        if (urlObject.search) {
19301            attributes["url.query"] = urlObject.search;
19302        }
19303        if (urlObject.hash) {
19304            attributes["url.fragment"] = urlObject.hash;
19305        }
19306        if (urlObject.pathname) {
19307            attributes["url.path"] = urlObject.pathname;
19308            if (urlObject.pathname === "/") {
19309                attributes[__TURBOPACK__imported__module__519988__5["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]] = "route";
19310            }
19311        }
19312        if (!isURLObjectRelative(urlObject)) {
19313            attributes[Yu] = urlObject.href;
19314            if (urlObject.port) {
19315                attributes["url.port"] = urlObject.port;
19316            }
19317            if (urlObject.protocol) {
19318                attributes["url.scheme"] = urlObject.protocol;
19319            }
19320            if (urlObject.hostname) {
19321                attributes[kind === "server" ? "server.address" : "url.domain"] = urlObject.hostname;
19322            }
19323        }
19324    }
19325    return [
19326        getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName),
19327        attributes
19328    ];
19329}
19330function parseUrl(url) {
19331    if (!url) {
19332        return {};
19333    }
19334    const match = url.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
19335    if (!match) {
19336        return {};
19337    }
19338    const query = match[6] || "";
19339    const fragment = match[8] || "";
19340    return {
19341        host: match[4],
19342        path: match[5],
19343        protocol: match[2],
19344        search: query,
19345        hash: fragment,
19346        relative: match[5] + query + fragment
19347    };
19348}
19349function stripUrlQueryAndFragment(urlPath) {
19350    return urlPath.split(/[?#]/, 1)[0];
19351}
19352function getSanitizedUrlString(url) {
19353    const { protocol, host, path } = url;
19354    const filteredHost = (host === null || host === void 0 ? void 0 : host.replace(/^.*@/, "[filtered]:[filtered]@").replace(/(:80)$/, "").replace(/(:443)$/, "")) || "";
19355    return "".concat(protocol ? "".concat(protocol, "://") : "").concat(filteredHost).concat(path);
19356}
19357function stripDataUrlContent(url) {
19358    let includeDataPrefix = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
19359    if (url.startsWith("data:")) {
19360        const match = url.match(/^data:([^;,]+)/);
19361        const mimeType = match ? match[1] : "text/plain";
19362        const isBase64 = url.includes(";base64,");
19363        const dataStart = url.indexOf(",");
19364        let dataPrefix = "";
19365        if (includeDataPrefix && dataStart !== -1) {
19366            const data = url.slice(dataStart + 1);
19367            dataPrefix = data.length > 10 ? "".concat(data.slice(0, 10), "... [truncated]") : data;
19368        }
19369        return "data:".concat(mimeType).concat(isBase64 ? ",base64" : "").concat(dataPrefix ? ",".concat(dataPrefix) : "");
19370    }
19371    return url;
19372}
19373;
19374// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/errors.js [app-client] (ecmascript)
19375;
19376var __TURBOPACK__imported__module__901020__7 = __TURBOPACK__imported__module__901020__;
19377// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/instrument/globalError.js [app-client] (ecmascript)
19378;
19379var __TURBOPACK__imported__module__225304__3 = __TURBOPACK__imported__module__225304__;
19380// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/instrument/handlers.js [app-client] (ecmascript)
19381;
19382var __TURBOPACK__imported__module__901020__8 = __TURBOPACK__imported__module__901020__;
19383var __TURBOPACK__imported__module__272598__8 = __TURBOPACK__imported__module__272598__;
19384var __TURBOPACK__imported__module__936032__ = __turbopack_context__.i(936032);
19385;
19386;
19387;
19388const handlers = {};
19389const instrumented = {};
19390function addHandler(type, handler) {
19391    handlers[type] = handlers[type] || [];
19392    handlers[type].push(handler);
19393    return ()=>{
19394        const typeHandlers = handlers[type];
19395        if (typeHandlers) {
19396            const index = typeHandlers.indexOf(handler);
19397            if (index !== -1) {
19398                typeHandlers.splice(index, 1);
19399            }
19400        }
19401    };
19402}
19403function resetInstrumentationHandlers() {
19404    Object.keys(handlers).forEach((key)=>{
19405        handlers[key] = void 0;
19406    });
19407}
19408function maybeInstrument(type, instrumentFn) {
19409    if (!instrumented[type]) {
19410        instrumented[type] = true;
19411        try {
19412            instrumentFn();
19413        } catch (e) {
19414            __TURBOPACK__imported__module__901020__8["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__8["debug"].error("Error while instrumenting ".concat(type), e);
19415        }
19416    }
19417}
19418function triggerHandlers(type, data) {
19419    const typeHandlers = type && handlers[type];
19420    if (!typeHandlers) {
19421        return;
19422    }
19423    for (const handler of typeHandlers){
19424        try {
19425            handler(data);
19426        } catch (e) {
19427            __TURBOPACK__imported__module__901020__8["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__8["debug"].error("Error while triggering instrumentation handler.\nType: ".concat(type, "\nName: ").concat((0, __TURBOPACK__imported__module__936032__["getFunctionName"])(handler), "\nError:"), e);
19428        }
19429    }
19430}
19431;
19432;
19433;
19434let _oldOnErrorHandler = null;
19435function addGlobalErrorInstrumentationHandler(handler) {
19436    const type = "error";
19437    addHandler(type, handler);
19438    maybeInstrument(type, instrumentError);
19439}
19440function instrumentError() {
19441    _oldOnErrorHandler = __TURBOPACK__imported__module__225304__3["GLOBAL_OBJ"].onerror;
19442    __TURBOPACK__imported__module__225304__3["GLOBAL_OBJ"].onerror = function(msg, url, line, column, error) {
19443        const handlerData = {
19444            column,
19445            error,
19446            line,
19447            msg,
19448            url
19449        };
19450        triggerHandlers("error", handlerData);
19451        if (_oldOnErrorHandler) {
19452            return _oldOnErrorHandler.apply(this, arguments);
19453        }
19454        return false;
19455    };
19456    __TURBOPACK__imported__module__225304__3["GLOBAL_OBJ"].onerror.__SENTRY_INSTRUMENTED__ = true;
19457}
19458;
19459// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js [app-client] (ecmascript)
19460;
19461var __TURBOPACK__imported__module__225304__4 = __TURBOPACK__imported__module__225304__;
19462;
19463;
19464let _oldOnUnhandledRejectionHandler = null;
19465function addGlobalUnhandledRejectionInstrumentationHandler(handler) {
19466    const type = "unhandledrejection";
19467    addHandler(type, handler);
19468    maybeInstrument(type, instrumentUnhandledRejection);
19469}
19470function instrumentUnhandledRejection() {
19471    _oldOnUnhandledRejectionHandler = __TURBOPACK__imported__module__225304__4["GLOBAL_OBJ"].onunhandledrejection;
19472    __TURBOPACK__imported__module__225304__4["GLOBAL_OBJ"].onunhandledrejection = function(e) {
19473        const handlerData = e;
19474        triggerHandlers("unhandledrejection", handlerData);
19475        if (_oldOnUnhandledRejectionHandler) {
19476            return _oldOnUnhandledRejectionHandler.apply(this, arguments);
19477        }
19478        return true;
19479    };
19480    __TURBOPACK__imported__module__225304__4["GLOBAL_OBJ"].onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;
19481}
19482;
19483var __TURBOPACK__imported__module__272598__9 = __TURBOPACK__imported__module__272598__;
19484var __TURBOPACK__imported__module__304661__6 = __TURBOPACK__imported__module__304661__;
19485var __TURBOPACK__imported__module__776710__2 = __TURBOPACK__imported__module__776710__;
19486;
19487;
19488;
19489;
19490;
19491;
19492let errorsInstrumented = false;
19493function registerSpanErrorInstrumentation() {
19494    if (errorsInstrumented) {
19495        return;
19496    }
19497    function errorCallback() {
19498        const activeSpan = (0, __TURBOPACK__imported__module__304661__6["getActiveSpan"])();
19499        const rootSpan = activeSpan && (0, __TURBOPACK__imported__module__304661__6["getRootSpan"])(activeSpan);
19500        if (rootSpan) {
19501            const message = "internal_error";
19502            __TURBOPACK__imported__module__901020__7["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__9["debug"].log("[Tracing] Root span: ".concat(message, " -> Global error occurred"));
19503            rootSpan.setStatus({
19504                code: __TURBOPACK__imported__module__776710__2["SPAN_STATUS_ERROR"],
19505                message
19506            });
19507        }
19508    }
19509    errorsInstrumented = true;
19510    addGlobalErrorInstrumentationHandler(errorCallback);
19511    addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);
19512}
19513;
19514var __TURBOPACK__imported__module__225304__5 = __TURBOPACK__imported__module__225304__;
19515var __TURBOPACK__imported__module__250804__4 = __TURBOPACK__imported__module__250804__;
19516var __TURBOPACK__imported__module__10008__3 = __TURBOPACK__imported__module__10008__;
19517var __TURBOPACK__imported__module__373382__2 = __TURBOPACK__imported__module__373382__;
19518var __TURBOPACK__imported__module__132584__1 = __TURBOPACK__imported__module__132584__;
19519var __TURBOPACK__imported__module__304661__7 = __TURBOPACK__imported__module__304661__;
19520var __TURBOPACK__imported__module__519988__6 = __TURBOPACK__imported__module__519988__;
19521var __TURBOPACK__imported__module__473753__3 = __TURBOPACK__imported__module__473753__;
19522var __TURBOPACK__imported__module__951497__2 = __TURBOPACK__imported__module__951497__;
19523// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/instrument/history.js [app-client] (ecmascript)
19524;
19525// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/supports.js [app-client] (ecmascript)
19526;
19527var __TURBOPACK__imported__module__901020__9 = __TURBOPACK__imported__module__901020__;
19528var __TURBOPACK__imported__module__272598__10 = __TURBOPACK__imported__module__272598__;
19529var __TURBOPACK__imported__module__225304__6 = __TURBOPACK__imported__module__225304__;
19530;
19531;
19532;
19533const WINDOW2 = __TURBOPACK__imported__module__225304__6["GLOBAL_OBJ"];
19534function supportsErrorEvent() {
19535    try {
19536        new ErrorEvent("");
19537        return true;
19538    } catch (unused) {
19539        return false;
19540    }
19541}
19542function supportsDOMError() {
19543    try {
19544        new DOMError("");
19545        return true;
19546    } catch (unused) {
19547        return false;
19548    }
19549}
19550function supportsDOMException() {
19551    try {
19552        new DOMException("");
19553        return true;
19554    } catch (unused) {
19555        return false;
19556    }
19557}
19558function supportsHistory() {
19559    return "history" in WINDOW2 && !!WINDOW2.history;
19560}
19561const supportsFetch = _isFetchSupported;
19562function _isFetchSupported() {
19563    if (!("fetch" in WINDOW2)) {
19564        return false;
19565    }
19566    try {
19567        new Headers();
19568        new Request("data:,");
19569        new Response();
19570        return true;
19571    } catch (unused) {
19572        return false;
19573    }
19574}
19575function isNativeFunction(func) {
19576    return func && /^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(func.toString());
19577}
19578function supportsNativeFetch() {
19579    if (typeof EdgeRuntime === "string") {
19580        return true;
19581    }
19582    if (!_isFetchSupported()) {
19583        return false;
19584    }
19585    if (isNativeFunction(WINDOW2.fetch)) {
19586        return true;
19587    }
19588    let result = false;
19589    const doc = WINDOW2.document;
19590    if (doc && typeof doc.createElement === "function") {
19591        try {
19592            var _sandbox_contentWindow;
19593            const sandbox = doc.createElement("iframe");
19594            sandbox.hidden = true;
19595            doc.head.appendChild(sandbox);
19596            if ((_sandbox_contentWindow = sandbox.contentWindow) === null || _sandbox_contentWindow === void 0 ? void 0 : _sandbox_contentWindow.fetch) {
19597                result = isNativeFunction(sandbox.contentWindow.fetch);
19598            }
19599            doc.head.removeChild(sandbox);
19600        } catch (err) {
19601            __TURBOPACK__imported__module__901020__9["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__10["debug"].warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ", err);
19602        }
19603    }
19604    return result;
19605}
19606function supportsReportingObserver() {
19607    return "ReportingObserver" in WINDOW2;
19608}
19609function supportsReferrerPolicy() {
19610    if (!_isFetchSupported()) {
19611        return false;
19612    }
19613    try {
19614        new Request("_", {
19615            referrerPolicy: "origin"
19616        });
19617        return true;
19618    } catch (unused) {
19619        return false;
19620    }
19621}
19622;
19623var __TURBOPACK__imported__module__951497__3 = __TURBOPACK__imported__module__951497__;
19624// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/types.js [app-client] (ecmascript)
19625;
19626var __TURBOPACK__imported__module__225304__7 = __TURBOPACK__imported__module__225304__;
19627;
19628const WINDOW3 = __TURBOPACK__imported__module__225304__7["GLOBAL_OBJ"];
19629;
19630;
19631;
19632let lastHref;
19633function addHistoryInstrumentationHandler(handler) {
19634    const type = "history";
19635    addHandler(type, handler);
19636    maybeInstrument(type, instrumentHistory);
19637}
19638function instrumentHistory() {
19639    WINDOW3.addEventListener("popstate", ()=>{
19640        const to = WINDOW3.location.href;
19641        const from = lastHref;
19642        lastHref = to;
19643        if (from === to) {
19644            return;
19645        }
19646        const handlerData = {
19647            from,
19648            to
19649        };
19650        triggerHandlers("history", handlerData);
19651    });
19652    if (!supportsHistory()) {
19653        return;
19654    }
19655    function historyReplacementFunction(originalHistoryFunction) {
19656        return function() {
19657            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
19658                args[_key] = arguments[_key];
19659            }
19660            const url = args.length > 2 ? args[2] : void 0;
19661            if (url) {
19662                const from = lastHref;
19663                const to = getAbsoluteUrl(String(url));
19664                lastHref = to;
19665                if (from === to) {
19666                    return originalHistoryFunction.apply(this, args);
19667                }
19668                const handlerData = {
19669                    from,
19670                    to
19671                };
19672                triggerHandlers("history", handlerData);
19673            }
19674            return originalHistoryFunction.apply(this, args);
19675        };
19676    }
19677    (0, __TURBOPACK__imported__module__951497__3["fill"])(WINDOW3.history, "pushState", historyReplacementFunction);
19678    (0, __TURBOPACK__imported__module__951497__3["fill"])(WINDOW3.history, "replaceState", historyReplacementFunction);
19679}
19680function getAbsoluteUrl(urlOrPath) {
19681    try {
19682        const url = new URL(urlOrPath, WINDOW3.location.origin);
19683        return url.toString();
19684    } catch (unused) {
19685        return urlOrPath;
19686    }
19687}
19688;
19689// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/browserMetrics.js [app-client] (ecmascript)
19690;
19691var __TURBOPACK__imported__module__605394__4 = __TURBOPACK__imported__module__605394__;
19692var __TURBOPACK__imported__module__304661__8 = __TURBOPACK__imported__module__304661__;
19693var __TURBOPACK__imported__module__821593__1 = __TURBOPACK__imported__module__821593__;
19694var __TURBOPACK__imported__module__272598__11 = __TURBOPACK__imported__module__272598__;
19695var __TURBOPACK__imported__module__519988__7 = __TURBOPACK__imported__module__519988__;
19696var __TURBOPACK__imported__module__453288__2 = __TURBOPACK__imported__module__453288__;
19697// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/htmlTreeAsString.js [a
19697pp-client] (ecmascript)
19698;
19699var __TURBOPACK__imported__module__453288__3 = __TURBOPACK__imported__module__453288__;
19700;
19701const DEFAULT_MAX_STRING_LENGTH1 = 80;
19702const accessors = {};
19703try {
19704    if (typeof Node !== "undefined") {
19705        accessors.parentNode = Object.getOwnPropertyDescriptor(Node.prototype, "parentNode").get;
19706    }
19707    if (typeof Element !== "undefined") {
19708        accessors.tagName = Object.getOwnPropertyDescriptor(Element.prototype, "tagName").get;
19709        accessors.id = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
19710        accessors.className = Object.getOwnPropertyDescriptor(Element.prototype, "className").get;
19711        accessors.getAttribute = Element.prototype.getAttribute;
19712    }
19713    if (typeof HTMLElement !== "undefined") {
19714        accessors.dataset = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "dataset").get;
19715    }
19716} catch (unused) {}
19717function _safeRead(el, prop, arg) {
19718    const fn = accessors[prop];
19719    if (fn) {
19720        try {
19721            return fn.call(el, arg);
19722        } catch (unused) {}
19723    }
19724    const val = el[prop];
19725    return typeof val === "function" ? val.call(el, arg) : val;
19726}
19727function htmlTreeAsString1(elem) {
19728    let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
19729    if (!elem) {
19730        return "<unknown>";
19731    }
19732    try {
19733        let currentElem = elem;
19734        const MAX_TRAVERSE_HEIGHT = 5;
19735        const out = [];
19736        let height = 0;
19737        let len = 0;
19738        const separator = " > ";
19739        const sepLength = separator.length;
19740        let nextStr;
19741        const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;
19742        const maxStringLength = !Array.isArray(options) && options.maxStringLength || DEFAULT_MAX_STRING_LENGTH1;
19743        while(currentElem && height++ < MAX_TRAVERSE_HEIGHT){
19744            nextStr = _htmlElementAsString1(currentElem, keyAttrs);
19745            if (nextStr === "html" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) {
19746                break;
19747            }
19748            out.push(nextStr);
19749            len += nextStr.length;
19750            currentElem = _safeRead(currentElem, "parentNode");
19751        }
19752        return out.reverse().join(separator);
19753    } catch (unused) {
19754        return "<unknown>";
19755    }
19756}
19757function _htmlElementAsString1(el, keyAttrs) {
19758    const out = [];
19759    const tagName = _safeRead(el, "tagName");
19760    if (!tagName) {
19761        return "";
19762    }
19763    if (typeof HTMLElement !== "undefined") {
19764        if (el instanceof HTMLElement) {
19765            const dataset = _safeRead(el, "dataset");
19766            if (dataset) {
19767                if (dataset["sentryComponent"]) {
19768                    return dataset["sentryComponent"];
19769                }
19770                if (dataset["sentryElement"]) {
19771                    return dataset["sentryElement"];
19772                }
19773            }
19774        }
19775    }
19776    out.push(tagName.toLowerCase());
19777    const keyAttrPairs = (keyAttrs === null || keyAttrs === void 0 ? void 0 : keyAttrs.length) ? keyAttrs.filter((keyAttr)=>_safeRead(el, "getAttribute", keyAttr)).map((keyAttr)=>[
19778            keyAttr,
19779            _safeRead(el, "getAttribute", keyAttr)
19780        ]) : null;
19781    if (keyAttrPairs === null || keyAttrPairs === void 0 ? void 0 : keyAttrPairs.length) {
19782        keyAttrPairs.forEach((keyAttrPair)=>{
19783            out.push("[".concat(keyAttrPair[0], '="').concat(keyAttrPair[1], '"]'));
19784        });
19785    } else {
19786        const id = _safeRead(el, "id");
19787        if (id) {
19788            out.push("#".concat(id));
19789        }
19790        const className = _safeRead(el, "className");
19791        if (className && (0, __TURBOPACK__imported__module__453288__3["isString"])(className)) {
19792            const classes = className.split(/\s+/);
19793            for (const c of classes){
19794                out.push(".".concat(c));
19795            }
19796        }
19797    }
19798    for (const k of [
19799        "aria-label",
19800        "type",
19801        "name",
19802        "title",
19803        "alt"
19804    ]){
19805        const attr = _safeRead(el, "getAttribute", k);
19806        if (attr) {
19807            out.push("[".concat(k, '="').concat(attr, '"]'));
19808        }
19809    }
19810    return out.join("");
19811}
19812;
19813// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/cls.js [app-client] (ecmascript)
19814;
19815var __TURBOPACK__imported__module__272598__12 = __TURBOPACK__imported__module__272598__;
19816var __TURBOPACK__imported__module__605394__5 = __TURBOPACK__imported__module__605394__;
19817var __TURBOPACK__imported__module__250804__5 = __TURBOPACK__imported__module__250804__;
19818var __TURBOPACK__imported__module__519988__8 = __TURBOPACK__imported__module__519988__;
19819// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/debug-build.js [app-client] (ecmascript)
19820;
19821const DEBUG_BUILD = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__;
19822;
19823// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/instrument.js [app-client] (ecmascript)
19824;
19825var __TURBOPACK__imported__module__272598__13 = __TURBOPACK__imported__module__272598__;
19826var __TURBOPACK__imported__module__936032__1 = __TURBOPACK__imported__module__936032__;
19827// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/getCLS.js [app-client] (ecmascript)
19828;
19829// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js [app-client] (ecmascript)
19830;
19831const getRating = (value, thresholds)=>{
19832    if (value > thresholds[1]) {
19833        return "poor";
19834    }
19835    if (value > thresholds[0]) {
19836        return "needs-improvement";
19837    }
19838    return "good";
19839};
19840const bindReporter = (callback, metric, thresholds, reportAllChanges)=>{
19841    let prevValue;
19842    let delta;
19843    return (forceReport)=>{
19844        if (metric.value >= 0) {
19845            if (forceReport || reportAllChanges) {
19846                delta = metric.value - (prevValue !== null && prevValue !== void 0 ? prevValue : 0);
19847                if (delta || prevValue === void 0) {
19848                    prevValue = metric.value;
19849                    metric.delta = delta;
19850                    metric.rating = getRating(metric.value, thresholds);
19851                    callback(metric);
19852                }
19853            }
19854        }
19855    };
19856};
19857;
19858// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js [app-client] (ecmascript)
19859;
19860// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js [app-client] (ecmascript)
19861;
19862// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js [app-client] (ecmascript)
19863;
19864;
19865const getNavigationEntry = function() {
19866    let checkResponseStart = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
19867    var _WINDOW_performance_getEntriesByType, _WINDOW_performance;
19868    const navigationEntry = (_WINDOW_performance = WINDOW3.performance) === null || _WINDOW_performance === void 0 ? void 0 : (_WINDOW_performance_getEntriesByType = _WINDOW_performance.getEntriesByType) === null || _WINDOW_performance_getEntriesByType === void 0 ? void 0 : _WINDOW_performance_getEntriesByType.call(_WINDOW_performance, "navigation")[0];
19869    if (// sentry-specific change:
19870    // We don't want to check for responseStart for our own use of `getNavigationEntry`
19871    !checkResponseStart || navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now()) {
19872        return navigationEntry;
19873    }
19874};
19875;
19876;
19877const getActivationStart = ()=>{
19878    var _ref;
19879    const navEntry = getNavigationEntry();
19880    return (_ref = navEntry === null || navEntry === void 0 ? void 0 : navEntry.activationStart) !== null && _ref !== void 0 ? _ref : 0;
19881};
19882;
19883// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/globalListeners.js [app-client] (ecmascript)
19884;
19885;
19886function addPageListener(type, listener, options) {
19887    if (WINDOW3.document) {
19888        WINDOW3.addEventListener(type, listener, options);
19889    }
19890}
19891function removePageListener(type, listener, options) {
19892    if (WINDOW3.document) {
19893        WINDOW3.removeEventListener(type, listener, options);
19894    }
19895}
19896;
19897;
19898;
19899;
19900let firstHiddenTime = -1;
19901const onHiddenFunctions = /* @__PURE__ */ new Set();
19902const initHiddenTime = ()=>{
19903    var _WINDOW_document, _WINDOW_document1;
19904    return ((_WINDOW_document = WINDOW3.document) === null || _WINDOW_document === void 0 ? void 0 : _WINDOW_document.visibilityState) === "hidden" && !((_WINDOW_document1 = WINDOW3.document) === null || _WINDOW_document1 === void 0 ? void 0 : _WINDOW_document1.prerendering) ? 0 : Infinity;
19905};
19906const onVisibilityUpdate = (event)=>{
19907    if (isPageHidden(event) && firstHiddenTime > -1) {
19908        if (event.type === "visibilitychange" || event.type === "pagehide") {
19909            for (const onHiddenFunction of onHiddenFunctions){
19910                onHiddenFunction();
19911            }
19912        }
19913        if (!isFinite(firstHiddenTime)) {
19914            firstHiddenTime = event.type === "visibilitychange" ? event.timeStamp : 0;
19915            removePageListener("prerenderingchange", onVisibilityUpdate, true);
19916        }
19917    }
19918};
19919const getVisibilityWatcher = ()=>{
19920    if (WINDOW3.document && firstHiddenTime < 0) {
19921        var _globalThis_performance_getEntriesByType_filter_;
19922        const activationStart = getActivationStart();
19923        const firstVisibilityStateHiddenTime = !WINDOW3.document.prerendering ? (_globalThis_performance_getEntriesByType_filter_ = globalThis.performance.getEntriesByType("visibility-state").filter((e)=>e.name === "hidden" && e.startTime > activationStart)[0]) === null || _globalThis_performance_getEntriesByType_filter_ === void 0 ? void 0 : _globalThis_performance_getEntriesByType_filter_.startTime : void 0;
19924        firstHiddenTime = firstVisibilityStateHiddenTime !== null && firstVisibilityStateHiddenTime !== void 0 ? firstVisibilityStateHiddenTime : initHiddenTime();
19925        addPageListener("visibilitychange", onVisibilityUpdate, true);
19926        addPageListener("pagehide", onVisibilityUpdate, true);
19927        addPageListener("prerenderingchange", onVisibilityUpdate, true);
19928    }
19929    return {
19930        get firstHiddenTime () {
19931            return firstHiddenTime;
19932        },
19933        onHidden (cb) {
19934            onHiddenFunctions.add(cb);
19935        }
19936    };
19937};
19938function isPageHidden(event) {
19939    var _WINDOW_document;
19940    return event.type === "pagehide" || ((_WINDOW_document = WINDOW3.document) === null || _WINDOW_document === void 0 ? void 0 : _WINDOW_document.visibilityState) === "hidden";
19941}
19942;
19943// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js [app-client] (ecmascript)
19944;
19945// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js [app-client] (ecmascript)
19946;
19947const generateUniqueID = ()=>{
19948    return "v5-".concat(Date.now(), "-").concat(Math.floor(Math.random() * (9e12 - 1)) + 1e12);
19949};
19950;
19951;
19952;
19953;
19954;
19955const initMetric = function(name) {
19956    let value = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : -1;
19957    const navEntry = getNavigationEntry();
19958    let navigationType = "navigate";
19959    if (navEntry) {
19960        var _WINDOW_document, _WINDOW_document1;
19961        if (((_WINDOW_document = WINDOW3.document) === null || _WINDOW_document === void 0 ? void 0 : _WINDOW_document.prerendering) || getActivationStart() > 0) {
19962            navigationType = "prerender";
19963        } else if ((_WINDOW_document1 = WINDOW3.document) === null || _WINDOW_document1 === void 0 ? void 0 : _WINDOW_document1.wasDiscarded) {
19964            navigationType = "restore";
19965        } else if (navEntry.type) {
19966            navigationType = navEntry.type.replace(/_/g, "-");
19967        }
19968    }
19969    const entries = [];
19970    return {
19971        name,
19972        value,
19973        rating: "good",
19974        // If needed, will be updated when reported. `const` to keep the type from widening to `string`.
19975        delta: 0,
19976        entries,
19977        id: generateUniqueID(),
19978        navigationType
19979    };
19980};
19981;
19982// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/initUnique.js [app-client] (ecmascript)
19983;
19984const instanceMap = /* @__PURE__ */ new WeakMap();
19985function initUnique(identityObj, ClassObj) {
19986    try {
19987        if (!instanceMap.get(identityObj)) {
19988            instanceMap.set(identityObj, new ClassObj());
19989        }
19990        return instanceMap.get(identityObj);
19991    } catch (_e) {
19992        return new ClassObj();
19993    }
19994}
19995;
19996// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/LayoutShiftManager.js [app-client] (ecmascript)
19997;
19998class LayoutShiftManager {
19999    // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility
20000    _processEntry(entry) {
20001        var _this__onAfterProcessingUnexpectedShift, _this;
20002        if (entry.hadRecentInput) return;
20003        const firstSessionEntry = this._sessionEntries[0];
20004        const lastSessionEntry = this._sessionEntries[this._sessionEntries.length - 1];
20005        if (this._sessionValue && firstSessionEntry && lastSessionEntry && entry.startTime - lastSessionEntry.startTime < 1e3 && entry.startTime - firstSessionEntry.startTime < 5e3) {
20006            this._sessionValue += entry.value;
20007            this._sessionEntries.push(entry);
20008        } else {
20009            this._sessionValue = entry.value;
20010            this._sessionEntries = [
20011                entry
20012            ];
20013        }
20014        (_this__onAfterProcessingUnexpectedShift = (_this = this)._onAfterProcessingUnexpectedShift) === null || _this__onAfterProcessingUnexpectedShift === void 0 ? void 0 : _this__onAfterProcessingUnexpectedShift.call(_this, entry);
20015    }
20016    constructor(){
20017        // oxlint-disable-next-line sdk/no-class-field-initializers
20018        this._sessionValue = 0;
20019        // oxlint-disable-next-line sdk/no-class-field-initializers
20020        this._sessionEntries = [];
20021    }
20022}
20023;
20024// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/observe.js [app-client] (ecmascript)
20025;
20026const observe = function(type, callback) {
20027    let opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
20028    try {
20029        if (PerformanceObserver.supportedEntryTypes.includes(type)) {
20030            const po = new PerformanceObserver((list)=>{
20031                Promise.resolve().then(()=>{
20032                    callback(list.getEntries());
20033                });
20034            });
20035            po.observe({
20036                type,
20037                buffered: true,
20038                ...opts
20039            });
20040            return po;
20041        }
20042    } catch (unused) {}
20043    return;
20044};
20045;
20046// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js [app-client] (ecmascript)
20047;
20048const runOnce = (cb)=>{
20049    let called = false;
20050    return ()=>{
20051        if (!called) {
20052            cb();
20053            called = true;
20054        }
20055    };
20056};
20057;
20058// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/onFCP.js [app-client] (ecmascript)
20059;
20060// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js [app-client] (ecmascript)
20061;
20062;
20063const whenActivated = (callback)=>{
20064    var _WINDOW_document;
20065    if ((_WINDOW_document = WINDOW3.document) === null || _WINDOW_document === void 0 ? void 0 : _WINDOW_document.prerendering) {
20066        addEventListener("prerenderingchange", ()=>callback(), true);
20067    } else {
20068        callback();
20069    }
20070};
20071;
20072;
20073;
20074;
20075;
20076;
20077;
20078const FCPThresholds = [
20079    1800,
20080    3e3
20081];
20082const onFCP = function(onReport) {
20083    let opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
20084    whenActivated(()=>{
20085        const visibilityWatcher = getVisibilityWatcher();
20086        const metric = initMetric("FCP");
20087        let report;
20088        const handleEntries = (entries)=>{
20089            for (const entry of entries){
20090                if (entry.name === "first-contentful-paint") {
20091                    po.disconnect();
20092                    if (entry.startTime < visibilityWatcher.firstHiddenTime) {
20093                        metric.value = Math.max(entry.startTime - getActivationStart(), 0);
20094                        metric.entries.push(entry);
20095                        report(true);
20096                    }
20097                }
20098            }
20099        };
20100        const po = observe("paint", handleEntries);
20101        if (po) {
20102            report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);
20103        }
20104    });
20105};
20106;
20107;
20108;
20109;
20110;
20111;
20112;
20113;
20114;
20115;
20116const CLSThresholds = [
20117    0.1,
20118    0.25
20119];
20120const onCLS = function(onReport) {
20121    let opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
20122    onFCP(runOnce(()=>{
20123        const metric = initMetric("CLS", 0);
20124        let report;
20125        const visibilityWatcher = getVisibilityWatcher();
20126        const layoutShiftManager = initUnique(opts, LayoutShiftManager);
20127        const handleEntries = (entries)=>{
20128            for (const entry of entries){
20129                layoutShiftManager._processEntry(entry);
20130            }
20131            if (layoutShiftManager._sessionValue > metric.value) {
20132                metric.value = layoutShiftManager._sessionValue;
20133                metric.entries = layoutShiftManager._sessionEntries;
20134                report();
20135            }
20136        };
20137        const po = observe("layout-shift", handleEntries);
20138        if (po) {
20139            var _WINDOW_setTimeout;
20140            report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);
20141            visibilityWatcher.onHidden(()=>{
20142                handleEntries(po.takeRecords());
20143                report(true);
20144            });
20145            WINDOW3 === null || WINDOW3 === void 0 ? void 0 : (_WINDOW_setTimeout = WINDOW3.setTimeout) === null || _WINDOW_setTimeout === void 0 ? void 0 : _WINDOW_setTimeout.call(WINDOW3, report);
20146        }
20147    }));
20148};
20149;
20150// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/getINP.js [app-client] (ecmascript)
20151;
20152// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/InteractionManager.js [app-client] (ecmascript)
20153;
20154// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js [app-client] (ecmascript)
20155;
20156;
20157let interactionCountEstimate = 0;
20158let minKnownInteractionId = Infinity;
20159let maxKnownInteractionId = 0;
20160const updateEstimate = (entries)=>{
20161    entries.forEach((e)=>{
20162        if (e.interactionId) {
20163            minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);
20164            maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);
20165            interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;
20166        }
20167    });
20168};
20169let po1;
20170const getInteractionCount = ()=>{
20171    return po1 ? interactionCountEstimate : performance.interactionCount || 0;
20172};
20173const initInteractionCountPolyfill = ()=>{
20174    if ("interactionCount" in performance || po1) return;
20175    po1 = observe("event", updateEstimate, {
20176        type: "event",
20177        buffered: true,
20178        durationThreshold: 0
20179    });
20180};
20181;
20182;
20183const MAX_INTERACTIONS_TO_CONSIDER = 10;
20184let prevInteractionCount = 0;
20185const getInteractionCountForNavigation = ()=>{
20186    return getInteractionCount() - prevInteractionCount;
20187};
20188class InteractionManager {
20189    // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility, jsdoc/require-jsdoc
20190    _resetInteractions() {
20191        prevInteractionCount = getInteractionCount();
20192        this._longestInteractionList.length = 0;
20193        this._longestInteractionMap.clear();
20194    }
20195    /**
20196   * Returns the estimated p98 longest interaction based on the stored
20197   * interaction candidates and the interaction count for the current page.
20198   */ // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility
20199    _estimateP98LongestInteraction() {
20200        const candidateInteractionIndex = Math.min(this._longestInteractionList.length - 1, Math.floor(getInteractionCountForNavigation() / 50));
20201        return this._longestInteractionList[candidateInteractionIndex];
20202    }
20203    /**
20204   * Takes a performance entry and adds it to the list of worst interactions
20205   * if its duration is long enough to make it among the worst. If the
20206   * entry is part of an existing interaction, it is merged and the latency
20207   * and entries list is updated as needed.
20208   */ // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility
20209    _processEntry(entry) {
20210        var _this__onBeforeProcessingEntry, _this;
20211        (_this__onBeforeProcessingEntry = (_this = this)._onBeforeProcessingEntry) === null || _this__onBeforeProcessingEntry === void 0 ? void 0 : _this__onBeforeProcessingEntry.call(_this, entry);
20212        if (!(entry.interactionId || entry.entryType === "first-input")) return;
20213        const minLongestInteraction = this._longestInteractionList.at(-1);
20214        let interaction = this._longestInteractionMap.get(entry.interactionId);
20215        if (interaction || this._longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER || // If the above conditions are false, `minLongestInteraction` will be set.
20216        entry.duration > minLongestInteraction._latency) {
20217            var _this__onAfterProcessingINPCandidate, _this1;
20218            if (interaction) {
20219                if (entry.duration > interaction._latency) {
20220                    interaction.entries = [
20221                        entry
20222                    ];
20223                    interaction._latency = entry.duration;
20224                } else if (entry.duration === interaction._latency && entry.startTime === interaction.entries[0].startTime) {
20225                    interaction.entries.push(entry);
20226                }
20227            } else {
20228                interaction = {
20229                    id: entry.interactionId,
20230                    entries: [
20231                        entry
20232                    ],
20233                    _latency: entry.duration
20234                };
20235                this._longestInteractionMap.set(interaction.id, interaction);
20236                this._longestInteractionList.push(interaction);
20237            }
20238            this._longestInteractionList.sort((a, b)=>b._latency - a._latency);
20239            if (this._longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) {
20240                const removedInteractions = this._longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER);
20241                for (const interaction2 of removedInteractions){
20242                    this._longestInteractionMap.delete(interaction2.id);
20243                }
20244            }
20245            (_this__onAfterProcessingINPCandidate = (_this1 = this)._onAfterProcessingINPCandidate) === null || _this__onAfterProcessingINPCandidate === void 0 ? void 0 : _this__onAfterProcessingINPCandidate.call(_this1, interaction);
20246        }
20247    }
20248    constructor(){
20249        /**
20250     * A list of longest interactions on the page (by latency) sorted so the
20251     * longest one is first. The list is at most MAX_INTERACTIONS_TO_CONSIDER
20252     * long.
20253     */ // oxlint-disable-next-line sdk/no-class-field-initializers
20254        this._longestInteractionList = [];
20255        /**
20256     * A mapping of longest interactions by their interaction ID.
20257     * This is used for faster lookup.
20258     */ // oxlint-disable-next-line sdk/no-class-field-initializers
20259        this._longestInteractionMap = /* @__PURE__ */ new Map();
20260    }
20261}
20262;
20263// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/whenIdleOrHidden.js [app-client] (ecmascript)
20264;
20265;
20266;
20267;
20268const whenIdleOrHidden = (cb)=>{
20269    var _WINDOW_document;
20270    const rIC = WINDOW3.requestIdleCallback || WINDOW3.setTimeout;
20271    if (((_WINDOW_document = WINDOW3.document) === null || _WINDOW_document === void 0 ? void 0 : _WINDOW_document.visibilityState) === "hidden") {
20272        cb();
20273    } else {
20274        cb = runOnce(cb);
20275        addPageListener("visibilitychange", cb, {
20276            once: true,
20277            capture: true
20278        });
20279        addPageListener("pagehide", cb, {
20280            once: true,
20281            capture: true
20282        });
20283        rIC(()=>{
20284            cb();
20285            removePageListener("visibilitychange", cb, {
20286                capture: true
20287            });
20288            removePageListener("pagehide", cb, {
20289                capture: true
20290            });
20291        });
20292    }
20293};
20294;
20295;
20296;
20297;
20298;
20299;
20300;
20301;
20302;
20303;
20304const INPThresholds = [
20305    200,
20306    500
20307];
20308const DEFAULT_DURATION_THRESHOLD = 40;
20309const onINP = function(onReport) {
20310    let opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
20311    if (!(globalThis.PerformanceEventTiming && "interactionId" in PerformanceEventTiming.prototype)) {
20312        return;
20313    }
20314    const visibilityWatcher = getVisibilityWatcher();
20315    whenActivated(()=>{
20316        var _opts_durationThreshold;
20317        initInteractionCountPolyfill();
20318        const metric = initMetric("INP");
20319        let report;
20320        const interactionManager = initUnique(opts, InteractionManager);
20321        const handleEntries = (entries)=>{
20322            whenIdleOrHidden(()=>{
20323                for (const entry of entries){
20324                    interactionManager._processEntry(entry);
20325                }
20326                const inp = interactionManager._estimateP98LongestInteraction();
20327                if (inp && inp._latency !== metric.value) {
20328                    metric.value = inp._latency;
20329                    metric.entries = inp.entries;
20330                    report();
20331                }
20332            });
20333        };
20334        const po = observe("event", handleEntries, {
20335            // Event Timing entries have their durations rounded to the nearest 8ms,
20336            // so a duration of 40ms would be any event that spans 2.5 or more frames
20337            // at 60Hz. This threshold is chosen to strike a balance between usefulness
20338            // and performance. Running this callback for any interaction that spans
20339            // just one or two frames is likely not worth the insight that could be
20340            // gained.
20341            durationThreshold: (_opts_durationThreshold = opts.durationThreshold) !== null && _opts_durationThreshold !== void 0 ? _opts_durationThreshold : DEFAULT_DURATION_THRESHOLD
20342        });
20343        report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);
20344        if (po) {
20345            po.observe({
20346                type: "first-input",
20347                buffered: true
20348            });
20349            visibilityWatcher.onHidden(()=>{
20350                handleEntries(po.takeRecords());
20351                report(true);
20352            });
20353        }
20354    });
20355};
20356;
20357// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/getLCP.js [app-client] (ecmascript)
20358;
20359// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/LCPEntryManager.js [app-client] (ecmascript)
20360;
20361class LCPEntryManager {
20362    // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility, jsdoc/require-jsdoc
20363    _processEntry(entry) {
20364        var _this__onBeforeProcessingEntry, _this;
20365        (_this__onBeforeProcessingEntry = (_this = this)._onBeforeProcessingEntry) === null || _this__onBeforeProcessingEntry === void 0 ? void 0 : _this__onBeforeProcessingEntry.call(_this, entry);
20366    }
20367}
20368;
20369;
20370;
20371;
20372;
20373;
20374;
20375;
20376;
20377;
20378;
20379;
20380const LCPThresholds = [
20381    2500,
20382    4e3
20383];
20384const onLCP = function(onReport) {
20385    let opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
20386    whenActivated(()=>{
20387        const visibilityWatcher = getVisibilityWatcher();
20388        const metric = initMetric("LCP");
20389        let report;
20390        const lcpEntryManager = initUnique(opts, LCPEntryManager);
20391        const handleEntries = (entries)=>{
20392            if (!opts.reportAllChanges) {
20393                entries = entries.slice(-1);
20394            }
20395            for (const entry of entries){
20396                lcpEntryManager._processEntry(entry);
20397                if (entry.startTime < visibilityWatcher.firstHiddenTime) {
20398                    metric.value = Math.max(entry.startTime - getActivationStart(), 0);
20399                    metric.entries = [
20400                        entry
20401                    ];
20402                    report();
20403                }
20404            }
20405        };
20406        const po = observe("largest-contentful-paint", handleEntries);
20407        if (po) {
20408            report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);
20409            const stopListening = runOnce(()=>{
20410                handleEntries(po.takeRecords());
20411                po.disconnect();
20412                report(true);
20413            });
20414            const stopListeningWrapper = (event)=>{
20415                if (event.isTrusted) {
20416                    whenIdleOrHidden(stopListening);
20417                    removePageListener(event.type, stopListeningWrapper, {
20418                        capture: true
20419                    });
20420                }
20421            };
20422            for (const type of [
20423                "keydown",
20424                "click",
20425                "visibilitychange"
20426            ]){
20427                addPageListener(type, stopListeningWrapper, {
20428                    capture: true
20429                });
20430            }
20431        }
20432    });
20433};
20434;
20435// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/onTTFB.js [app-client] (ecmascript)
20436;
20437;
20438;
20439;
20440;
20441;
20442;
20443const TTFBThresholds = [
20444    800,
20445    1800
20446];
20447const whenReady = (callback)=>{
20448    var _WINDOW_document, _WINDOW_document1;
20449    if ((_WINDOW_document = WINDOW3.document) === null || _WINDOW_document === void 0 ? void 0 : _WINDOW_document.prerendering) {
20450        whenActivated(()=>whenReady(callback));
20451    } else if (((_WINDOW_document1 = WINDOW3.document) === null || _WINDOW_document1 === void 0 ? void 0 : _WINDOW_document1.readyState) !== "complete") {
20452        addEventListener("load", ()=>whenReady(callback), true);
20453    } else {
20454        setTimeout(callback);
20455    }
20456};
20457const onTTFB = function(onReport) {
20458    let opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
20459    const metric = initMetric("TTFB");
20460    const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);
20461    whenReady(()=>{
20462        const navigationEntry = getNavigationEntry();
20463        if (navigationEntry) {
20464            metric.value = Math.max(navigationEntry.responseStart - getActivationStart(), 0);
20465            metric.entries = [
20466                navigationEntry
20467            ];
20468            report(true);
20469        }
20470    });
20471};
20472;
20473;
20474;
20475;
20476;
20477;
20478;
20479;
20480const handlers1 = {};
20481const instrumented1 = {};
20482let _previousCls;
20483let _previousLcp;
20484let _previousTtfb;
20485let _previousInp;
20486function addClsInstrumentationHandler(callback) {
20487    let stopOnCallback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
20488    return addMetricObserver("cls", callback, instrumentCls, _previousCls, stopOnCallback);
20489}
20490function addLcpInstrumentationHandler(callback) {
20491    let stopOnCallback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
20492    return addMetricObserver("lcp", callback, instrumentLcp, _previousLcp, stopOnCallback);
20493}
20494function addTtfbInstrumentationHandler(callback) {
20495    return addMetricObserver("ttfb", callback, instrumentTtfb, _previousTtfb);
20496}
20497function addInpInstrumentationHandler(callback) {
20498    return addMetricObserver("inp", callback, instrumentInp, _previousInp);
20499}
20500function addPerformanceInstrumentationHandler(type, callback) {
20501    addHandler1(type, callback);
20502    if (!instrumented1[type]) {
20503        instrumentPerformanceObserver(type);
20504        instrumented1[type] = true;
20505    }
20506    return getCleanupCallback(type, callback);
20507}
20508function triggerHandlers1(type, data) {
20509    const typeHandlers = handlers1[type];
20510    if (!(typeHandlers === null || typeHandlers === void 0 ? void 0 : typeHandlers.length)) {
20511        return;
20512    }
20513    for (const handler of typeHandlers){
20514        try {
20515            handler(data);
20516        } catch (e) {
20517            DEBUG_BUILD && __TURBOPACK__imported__module__272598__13["debug"].error("Error while triggering instrumentation handler.\nType: ".concat(type, "\nName: ").concat((0, __TURBOPACK__imported__module__936032__1["getFunctionName"])(handler), "\nError:"), e);
20518        }
20519    }
20520}
20521function instrumentCls() {
20522    return onCLS((metric)=>{
20523        triggerHandlers1("cls", {
20524            metric
20525        });
20526        _previousCls = metric;
20527    }, // We want the callback to be called whenever the CLS value updates.
20528    // By default, the callback is only called when the tab goes to the background.
20529    {
20530        reportAllChanges: true
20531    });
20532}
20533function instrumentLcp() {
20534    return onLCP((metric)=>{
20535        triggerHandlers1("lcp", {
20536            metric
20537        });
20538        _previousLcp = metric;
20539    }, // We want the callback to be called whenever the LCP value updates.
20540    // By default, the callback is only called when the tab goes to the background.
20541    {
20542        reportAllChanges: true
20543    });
20544}
20545function instrumentTtfb() {
20546    return onTTFB((metric)=>{
20547        triggerHandlers1("ttfb", {
20548            metric
20549        });
20550        _previousTtfb = metric;
20551    });
20552}
20553function instrumentInp() {
20554    return onINP((metric)=>{
20555        triggerHandlers1("inp", {
20556            metric
20557        });
20558        _previousInp = metric;
20559    });
20560}
20561function addMetricObserver(type, callback, instrumentFn, previousValue) {
20562    let stopOnCallback = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : false;
20563    addHandler1(type, callback);
20564    let stopListening;
20565    if (!instrumented1[type]) {
20566        stopListening = instrumentFn();
20567        instrumented1[type] = true;
20568    }
20569    if (previousValue) {
20570        callback({
20571            metric: previousValue
20572        });
20573    }
20574    return getCleanupCallback(type, callback, stopOnCallback ? stopListening : void 0);
20575}
20576function instrumentPerformanceObserver(type) {
20577    const options = {};
20578    if (type === "event") {
20579        options.durationThreshold = 0;
20580    }
20581    observe(type, (entries)=>{
20582        triggerHandlers1(type, {
20583            entries
20584        });
20585    }, options);
20586}
20587function addHandler1(type, handler) {
20588    handlers1[type] = handlers1[type] || [];
20589    handlers1[type].push(handler);
20590}
20591function getCleanupCallback(type, callback, stopListening) {
20592    return ()=>{
20593        if (stopListening) {
20594            stopListening();
20595        }
20596        const typeHandlers = handlers1[type];
20597        if (!typeHandlers) {
20598            return;
20599        }
20600        const index = typeHandlers.indexOf(callback);
20601        if (index !== -1) {
20602            typeHandlers.splice(index, 1);
20603        }
20604    };
20605}
20606function isPerformanceEventTiming(entry) {
20607    return "duration" in entry;
20608}
20609;
20610// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/utils.js [app-client] (ecmascript)
20611;
20612var __TURBOPACK__imported__module__304661__9 = __TURBOPACK__imported__module__304661__;
20613var __TURBOPACK__imported__module__250804__6 = __TURBOPACK__imported__module__250804__;
20614// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js [app-client] (ecmascript)
20615;
20616;
20617;
20618const onHidden = (cb)=>{
20619    const onHiddenOrPageHide = (event)=>{
20620        var _WINDOW_document;
20621        if (event.type === "pagehide" || ((_WINDOW_document = WINDOW3.document) === null || _WINDOW_document === void 0 ? void 0 : _WINDOW_document.visibilityState) === "hidden") {
20622            cb(event);
20623        }
20624    };
20625    addPageListener("visibilitychange", onHiddenOrPageHide, {
20626        capture: true,
20627        once: true
20628    });
20629    addPageListener("pagehide", onHiddenOrPageHide, {
20630        capture: true,
20631        once: true
20632    });
20633};
20634;
20635;
20636;
20637;
20638function isMeasurementValue(value) {
20639    return typeof value === "number" && isFinite(value);
20640}
20641function startAndEndSpan(parentSpan, startTimeInSeconds, endTime, param) {
20642    let { ...ctx } = param;
20643    const parentStartTime = (0, __TURBOPACK__imported__module__304661__9["spanToJSON"])(parentSpan).start_timestamp;
20644    if (parentStartTime && parentStartTime > startTimeInSeconds) {
20645        if (typeof parentSpan.updateStartTime === "function") {
20646            parentSpan.updateStartTime(startTimeInSeconds);
20647        }
20648    }
20649    return withActiveSpan(parentSpan, ()=>{
20650        const span = startInactiveSpan({
20651            startTime: startTimeInSeconds,
20652            ...ctx
20653        });
20654        if (span) {
20655            span.end(endTime);
20656        }
20657        return span;
20658    });
20659}
20660function startStandaloneWebVitalSpan(options) {
20661    var _WINDOW_navigator;
20662    const client = (0, __TURBOPACK__imported__module__250804__6["getClient"])();
20663    if (!client) {
20664        return;
20665    }
20666    const { name, transaction, attributes: passedAttributes, startTime } = options;
20667    const { release, environment } = client.getOptions();
20668    const { userInfo } = client.getDataCollectionOptions();
20669    const replay = client.getIntegrationByName("Replay");
20670    const replayId = replay === null || replay === void 0 ? void 0 : replay.getReplayId();
20671    const scope = (0, __TURBOPACK__imported__module__250804__6["getCurrentScope"])();
20672    const user = scope.getUser();
20673    const userDisplay = user !== void 0 ? user.email || user.id || user.ip_address : void 0;
20674    let profileId;
20675    try {
20676        profileId = scope.getScopeData().contexts.profile.profile_id;
20677    } catch (unused) {}
20678    const attributes = {
20679        release,
20680        environment,
20681        user: userDisplay || void 0,
20682        profile_id: profileId || void 0,
20683        replay_id: replayId || void 0,
20684        transaction,
20685        // Web vital score calculation relies on the user agent to account for different
20686        // browsers setting different thresholds for what is considered a good/meh/bad value.
20687        // For example: Chrome vs. Chrome Mobile
20688        "user_agent.original": (_WINDOW_navigator = WINDOW3.navigator) === null || _WINDOW_navigator === void 0 ? void 0 : _WINDOW_navigator.userAgent,
20689        // This tells Sentry to infer the IP address from the request
20690        "client.address": userInfo ? "{{auto}}" : void 0,
20691        ...passedAttributes
20692    };
20693    return startInactiveSpan({
20694        name,
20695        attributes,
20696        startTime,
20697        experimental: {
20698            standalone: true
20699        }
20700    });
20701}
20702function getBrowserPerformanceAPI() {
20703    return WINDOW3.addEventListener && WINDOW3.performance;
20704}
20705function msToSec(time) {
20706    return time / 1e3;
20707}
20708function extractNetworkProtocol(nextHopProtocol) {
20709    let name = "unknown";
20710    let version = "unknown";
20711    let _name = "";
20712    for (const char of nextHopProtocol){
20713        if (char === "/") {
20714            [name, version] = nextHopProtocol.split("/");
20715            break;
20716        }
20717        if (!isNaN(Number(char))) {
20718            name = _name === "h" ? "http" : _name;
20719            version = nextHopProtocol.split(_name)[1];
20720            break;
20721        }
20722        _name += char;
20723    }
20724    if (_name === nextHopProtocol) {
20725        name = _name;
20726    }
20727    return {
20728        name,
20729        version
20730    };
20731}
20732function supportsWebVital(entryType) {
20733    try {
20734        return PerformanceObserver.supportedEntryTypes.includes(entryType);
20735    } catch (unused) {
20736        return false;
20737    }
20738}
20739function listenForWebVitalReportEvents(client, collectorCallback) {
20740    let pageloadSpan;
20741    let collected = false;
20742    function _runCollectorCallbackOnce(event) {
20743        if (!collected && pageloadSpan) {
20744            collectorCallback(event, pageloadSpan.spanContext().spanId, pageloadSpan);
20745        }
20746        collected = true;
20747    }
20748    onHidden(()=>{
20749        _runCollectorCallbackOnce("pagehide");
20750    });
20751    const unsubscribeStartNavigation = client.on("beforeStartNavigationSpan", (_, options)=>{
20752        if (!(options === null || options === void 0 ? void 0 : options.isRedirect)) {
20753            _runCollectorCallbackOnce("navigation");
20754            unsubscribeStartNavigation();
20755            unsubscribeAfterStartPageLoadSpan();
20756        }
20757    });
20758    const unsubscribeAfterStartPageLoadSpan = client.on("afterStartPageLoadSpan", (span)=>{
20759        pageloadSpan = span;
20760        unsubscribeAfterStartPageLoadSpan();
20761    });
20762}
20763;
20764;
20765;
20766;
20767;
20768;
20769function trackClsAsStandaloneSpan(client) {
20770    let standaloneCLsValue = 0;
20771    let standaloneClsEntry;
20772    if (!supportsWebVital("layout-shift")) {
20773        return;
20774    }
20775    const cleanupClsHandler = addClsInstrumentationHandler((param)=>{
20776        let { metric } = param;
20777        const entry = metric.entries[metric.entries.length - 1];
20778        if (!entry) {
20779            return;
20780        }
20781        standaloneCLsValue = metric.value;
20782        standaloneClsEntry = entry;
20783    }, true);
20784    listenForWebVitalReportEvents(client, (reportEvent, pageloadSpanId)=>{
20785        _sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId, reportEvent);
20786        cleanupClsHandler();
20787    });
20788}
20789function _sendStandaloneClsSpan(clsValue, entry, pageloadSpanId, reportEvent) {
20790    var _entry_sources_;
20791    DEBUG_BUILD && __TURBOPACK__imported__module__272598__12["debug"].log("Sending CLS span (".concat(clsValue, ")"));
20792    const startTime = entry ? msToSec(((0, __TURBOPACK__imported__module__605394__5["browserPerformanceTimeOrigin"])() || 0) + entry.startTime) : (0, __TURBOPACK__imported__module__605394__5["timestampInSeconds"])();
20793    const routeName = (0, __TURBOPACK__imported__module__250804__5["getCurrentScope"])().getScopeData().transactionName;
20794    const name = entry ? htmlTreeAsString1((_entry_sources_ = entry.sources[0]) === null || _entry_sources_ === void 0 ? void 0 : _entry_sources_.node) : "Layout shift";
20795    const attributes = {
20796        [__TURBOPACK__imported__module__519988__8["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.http.browser.cls",
20797        [__TURBOPACK__imported__module__519988__8["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "ui.webvital.cls",
20798        [__TURBOPACK__imported__module__519988__8["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]]: 0,
20799        // attach the pageload span id to the CLS span so that we can link them in the UI
20800        "sentry.pageload.span_id": pageloadSpanId,
20801        // describes what triggered the web vital to be reported
20802        "sentry.report_event": reportEvent
20803    };
20804    if (entry === null || entry === void 0 ? void 0 : entry.sources) {
20805        entry.sources.forEach((source, index)=>{
20806            attributes["cls.source.".concat(index + 1)] = htmlTreeAsString1(source.node);
20807        });
20808    }
20809    const span = startStandaloneWebVitalSpan({
20810        name,
20811        transaction: routeName,
20812        attributes,
20813        startTime
20814    });
20815    if (span) {
20816        span.addEvent("cls", {
20817            [__TURBOPACK__imported__module__519988__8["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT"]]: "",
20818            [__TURBOPACK__imported__module__519988__8["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE"]]: clsValue
20819        });
20820        span.end(startTime);
20821    }
20822}
20823;
20824// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/lcp.js [app-client] (ecmascript)
20825;
20826var __TURBOPACK__imported__module__272598__14 = __TURBOPACK__imported__module__272598__;
20827var __TURBOPACK__imported__module__605394__6 = __TURBOPACK__imported__module__605394__;
20828var __TURBOPACK__imported__module__250804__7 = __TURBOPACK__imported__module__250804__;
20829var __TURBOPACK__imported__module__519988__9 = __TURBOPACK__imported__module__519988__;
20830;
20831;
20832;
20833;
20834;
20835const MAX_PLAUSIBLE_LCP_DURATION = 6e4;
20836function isValidLcpMetric(lcpValue) {
20837    return lcpValue != null && lcpValue > 0 && lcpValue <= MAX_PLAUSIBLE_LCP_DURATION;
20838}
20839function trackLcpAsStandaloneSpan(client) {
20840    let standaloneLcpValue = 0;
20841    let standaloneLcpEntry;
20842    if (!supportsWebVital("largest-contentful-paint")) {
20843        return;
20844    }
20845    const cleanupLcpHandler = addLcpInstrumentationHandler((param)=>{
20846        let { metric } = param;
20847        const entry = metric.entries[metric.entries.length - 1];
20848        if (!entry || !isValidLcpMetric(metric.value)) {
20849            return;
20850        }
20851        standaloneLcpValue = metric.value;
20852        standaloneLcpEntry = entry;
20853    }, true);
20854    listenForWebVitalReportEvents(client, (reportEvent, pageloadSpanId)=>{
20855        _sendStandaloneLcpSpan(standaloneLcpValue, standaloneLcpEntry, pageloadSpanId, reportEvent);
20856        cleanupLcpHandler();
20857    });
20858}
20859function _sendStandaloneLcpSpan(lcpValue, entry, pageloadSpanId, reportEvent) {
20860    if (!isValidLcpMetric(lcpValue)) {
20861        return;
20862    }
20863    DEBUG_BUILD && __TURBOPACK__imported__module__272598__14["debug"].log("Sending LCP span (".concat(lcpValue, ")"));
20864    const startTime = msToSec(((0, __TURBOPACK__imported__module__605394__6["browserPerformanceTimeOrigin"])() || 0) + ((entry === null || entry === void 0 ? void 0 : entry.startTime) || 0));
20865    const routeName = (0, __TURBOPACK__imported__module__250804__7["getCurrentScope"])().getScopeData().transactionName;
20866    const name = entry ? htmlTreeAsString1(entry.element) : "Largest contentful paint";
20867    const attributes = {
20868        [__TURBOPACK__imported__module__519988__9["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.http.browser.lcp",
20869        [__TURBOPACK__imported__module__519988__9["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "ui.webvital.lcp",
20870        [__TURBOPACK__imported__module__519988__9["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]]: 0,
20871        // LCP is a point-in-time metric
20872        // attach the pageload span id to the LCP span so that we can link them in the UI
20873        "sentry.pageload.span_id": pageloadSpanId,
20874        // describes what triggered the web vital to be reported
20875        "sentry.report_event": reportEvent
20876    };
20877    if (entry) {
20878        entry.element && (attributes["lcp.element"] = htmlTreeAsString1(entry.element));
20879        entry.id && (attributes["lcp.id"] = entry.id);
20880        entry.url && (attributes["lcp.url"] = entry.url);
20881        entry.loadTime != null && (attributes["lcp.loadTime"] = entry.loadTime);
20882        entry.renderTime != null && (attributes["lcp.renderTime"] = entry.renderTime);
20883        entry.size != null && (attributes["lcp.size"] = entry.size);
20884    }
20885    const span = startStandaloneWebVitalSpan({
20886        name,
20887        transaction: routeName,
20888        attributes,
20889        startTime
20890    });
20891    if (span) {
20892        span.addEvent("lcp", {
20893            [__TURBOPACK__imported__module__519988__9["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT"]]: "millisecond",
20894            [__TURBOPACK__imported__module__519988__9["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE"]]: lcpValue
20895        });
20896        span.end(startTime);
20897    }
20898}
20899;
20900// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/resourceTiming.js [a
20900pp-client] (ecmascript)
20901;
20902var __TURBOPACK__imported__module__605394__7 = __TURBOPACK__imported__module__605394__;
20903;
20904;
20905function getAbsoluteTime(time) {
20906    return time ? (((0, __TURBOPACK__imported__module__605394__7["browserPerformanceTimeOrigin"])() || performance.timeOrigin) + time) / 1e3 : time;
20907}
20908function resourceTimingToSpanAttributes(resourceTiming) {
20909    var _getBrowserPerformanceAPI;
20910    const timingSpanData = {};
20911    if (resourceTiming.nextHopProtocol != void 0) {
20912        const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);
20913        timingSpanData["network.protocol.version"] = version;
20914        timingSpanData["network.protocol.name"] = name;
20915    }
20916    if (!((0, __TURBOPACK__imported__module__605394__7["browserPerformanceTimeOrigin"])() || ((_getBrowserPerformanceAPI = getBrowserPerformanceAPI()) === null || _getBrowserPerformanceAPI === void 0 ? void 0 : _getBrowserPerformanceAPI.timeOrigin))) {
20917        return timingSpanData;
20918    }
20919    return dropUndefinedKeysFromObject({
20920        ...timingSpanData,
20921        "http.request.redirect_start": getAbsoluteTime(resourceTiming.redirectStart),
20922        "http.request.redirect_end": getAbsoluteTime(resourceTiming.redirectEnd),
20923        "http.request.worker_start": getAbsoluteTime(resourceTiming.workerStart),
20924        "http.request.fetch_start": getAbsoluteTime(resourceTiming.fetchStart),
20925        "http.request.domain_lookup_start": getAbsoluteTime(resourceTiming.domainLookupStart),
20926        "http.request.domain_lookup_end": getAbsoluteTime(resourceTiming.domainLookupEnd),
20927        "http.request.connect_start": getAbsoluteTime(resourceTiming.connectStart),
20928        "http.request.secure_connection_start": getAbsoluteTime(resourceTiming.secureConnectionStart),
20929        "http.request.connection_end": getAbsoluteTime(resourceTiming.connectEnd),
20930        "http.request.request_start": getAbsoluteTime(resourceTiming.requestStart),
20931        "http.request.response_start": getAbsoluteTime(resourceTiming.responseStart),
20932        "http.request.response_end": getAbsoluteTime(resourceTiming.responseEnd),
20933        // For TTFB we actually want the relative time from timeOrigin to responseStart
20934        // This way, TTFB always measures the "first page load" experience.
20935        // see: https://web.dev/articles/ttfb#measure-resource-requests
20936        "http.request.time_to_first_byte": resourceTiming.responseStart != null ? resourceTiming.responseStart / 1e3 : void 0
20937    });
20938}
20939function dropUndefinedKeysFromObject(attrs) {
20940    return Object.fromEntries(Object.entries(attrs).filter((param)=>{
20941        let [, value] = param;
20942        return value != null;
20943    }));
20944}
20945;
20946;
20947;
20948;
20949;
20950;
20951;
20952;
20953;
20954;
20955;
20956;
20957;
20958;
20959const MAX_INT_AS_BYTES = 2147483647;
20960let _performanceCursor = 0;
20961let _measurements = {};
20962let _lcpEntry;
20963let _clsEntry;
20964function startTrackingWebVitals(param) {
20965    let { recordClsStandaloneSpans, recordLcpStandaloneSpans, client } = param;
20966    const performance1 = getBrowserPerformanceAPI();
20967    if (performance1 && (0, __TURBOPACK__imported__module__605394__4["browserPerformanceTimeOrigin"])()) {
20968        if (performance1.mark) {
20969            WINDOW3.performance.mark("sentry-tracing-init");
20970        }
20971        const lcpCleanupCallback = recordLcpStandaloneSpans ? trackLcpAsStandaloneSpan(client) : recordLcpStandaloneSpans === false ? _trackLCP() : void 0;
20972        const clsCleanupCallback = recordClsStandaloneSpans ? trackClsAsStandaloneSpan(client) : recordClsStandaloneSpans === false ? _trackCLS() : void 0;
20973        const ttfbCleanupCallback = _trackTtfb();
20974        const fpFcpCleanupCallback = _trackFpFcp();
20975        return ()=>{
20976            ttfbCleanupCallback();
20977            fpFcpCleanupCallback();
20978            lcpCleanupCallback === null || lcpCleanupCallback === void 0 ? void 0 : lcpCleanupCallback();
20979            clsCleanupCallback === null || clsCleanupCallback === void 0 ? void 0 : clsCleanupCallback();
20980        };
20981    }
20982    return ()=>void 0;
20983}
20984function startTrackingLongTasks() {
20985    addPerformanceInstrumentationHandler("longtask", (param)=>{
20986        let { entries } = param;
20987        const parent = (0, __TURBOPACK__imported__module__304661__8["getActiveSpan"])();
20988        if (!parent) {
20989            return;
20990        }
20991        const { op: parentOp, start_timestamp: parentStartTimestamp } = (0, __TURBOPACK__imported__module__304661__8["spanToJSON"])(parent);
20992        for (const entry of entries){
20993            const startTime = msToSec((0, __TURBOPACK__imported__module__605394__4["browserPerformanceTimeOrigin"])() + entry.startTime);
20994            const duration = msToSec(entry.duration);
20995            if (parentOp === "navigation" && parentStartTimestamp && startTime < parentStartTimestamp) {
20996                continue;
20997            }
20998            startAndEndSpan(parent, startTime, startTime + duration, {
20999                name: "Main UI thread blocked",
21000                op: "ui.long-task",
21001                attributes: {
21002                    [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.ui.browser.metrics"
21003                }
21004            });
21005        }
21006    });
21007}
21008function startTrackingLongAnimationFrames() {
21009    const observer = new PerformanceObserver((list)=>{
21010        const parent = (0, __TURBOPACK__imported__module__304661__8["getActiveSpan"])();
21011        if (!parent) {
21012            return;
21013        }
21014        for (const entry of list.getEntries()){
21015            if (!entry.scripts[0]) {
21016                continue;
21017            }
21018            const startTime = msToSec((0, __TURBOPACK__imported__module__605394__4["browserPerformanceTimeOrigin"])() + entry.startTime);
21019            const { start_timestamp: parentStartTimestamp, op: parentOp } = (0, __TURBOPACK__imported__module__304661__8["spanToJSON"])(parent);
21020            if (parentOp === "navigation" && parentStartTimestamp && startTime < parentStartTimestamp) {
21021                continue;
21022            }
21023            const duration = msToSec(entry.duration);
21024            const attributes = {
21025                [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.ui.browser.metrics"
21026            };
21027            const initialScript = entry.scripts[0];
21028            const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;
21029            attributes["browser.script.invoker"] = invoker;
21030            attributes["browser.script.invoker_type"] = invokerType;
21031            if (sourceURL) {
21032                attributes["code.filepath"] = sourceURL;
21033            }
21034            if (sourceFunctionName) {
21035                attributes["code.function"] = sourceFunctionName;
21036            }
21037            if (sourceCharPosition !== -1) {
21038                attributes["browser.script.source_char_position"] = sourceCharPosition;
21039            }
21040            startAndEndSpan(parent, startTime, startTime + duration, {
21041                name: "Main UI thread blocked",
21042                op: "ui.long-animation-frame",
21043                attributes
21044            });
21045        }
21046    });
21047    observer.observe({
21048        type: "long-animation-frame",
21049        buffered: true
21050    });
21051}
21052function startTrackingInteractions() {
21053    addPerformanceInstrumentationHandler("event", (param)=>{
21054        let { entries } = param;
21055        const parent = (0, __TURBOPACK__imported__module__304661__8["getActiveSpan"])();
21056        if (!parent) {
21057            return;
21058        }
21059        for (const entry of entries){
21060            if (entry.name === "click") {
21061                const startTime = msToSec((0, __TURBOPACK__imported__module__605394__4["browserPerformanceTimeOrigin"])() + entry.startTime);
21062                const duration = msToSec(entry.duration);
21063                const spanOptions = {
21064                    name: htmlTreeAsString1(entry.target),
21065                    op: "ui.interaction.".concat(entry.name),
21066                    startTime,
21067                    attributes: {
21068                        [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.ui.browser.metrics"
21069                    }
21070                };
21071                const componentName = getComponentName(entry.target);
21072                if (componentName) {
21073                    spanOptions.attributes["ui.component_name"] = componentName;
21074                }
21075                startAndEndSpan(parent, startTime, startTime + duration, spanOptions);
21076            }
21077        }
21078    });
21079}
21080function _trackCLS() {
21081    return addClsInstrumentationHandler((param)=>{
21082        let { metric } = param;
21083        const entry = metric.entries[metric.entries.length - 1];
21084        if (!entry) {
21085            return;
21086        }
21087        _measurements["cls"] = {
21088            value: metric.value,
21089            unit: ""
21090        };
21091        _clsEntry = entry;
21092    }, true);
21093}
21094function _trackLCP() {
21095    return addLcpInstrumentationHandler((param)=>{
21096        let { metric } = param;
21097        const entry = metric.entries[metric.entries.length - 1];
21098        if (!entry || !isValidLcpMetric(metric.value)) {
21099            return;
21100        }
21101        _measurements["lcp"] = {
21102            value: metric.value,
21103            unit: "millisecond"
21104        };
21105        _lcpEntry = entry;
21106    }, true);
21107}
21108function _trackTtfb() {
21109    return addTtfbInstrumentationHandler((param)=>{
21110        let { metric } = param;
21111        const entry = metric.entries[metric.entries.length - 1];
21112        if (!entry) {
21113            return;
21114        }
21115        _measurements["ttfb"] = {
21116            value: metric.value,
21117            unit: "millisecond"
21118        };
21119    });
21120}
21121function _trackFpFcp() {
21122    return addPerformanceInstrumentationHandler("paint", (param)=>{
21123        let { entries } = param;
21124        const firstHidden = getVisibilityWatcher();
21125        for (const entry of entries){
21126            const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;
21127            if (entry.name === "first-paint" && shouldRecord) {
21128                _measurements["fp"] = {
21129                    value: entry.startTime,
21130                    unit: "millisecond"
21131                };
21132            }
21133            if (entry.name === "first-contentful-paint" && shouldRecord) {
21134                _measurements["fcp"] = {
21135                    value: entry.startTime,
21136                    unit: "millisecond"
21137                };
21138            }
21139        }
21140    });
21141}
21142function addPerformanceEntries(span, options) {
21143    const performance1 = getBrowserPerformanceAPI();
21144    const origin = (0, __TURBOPACK__imported__module__605394__4["browserPerformanceTimeOrigin"])();
21145    if (!(performance1 === null || performance1 === void 0 ? void 0 : performance1.getEntries) || !origin) {
21146        return;
21147    }
21148    const { spanStreamingEnabled, ignorePerformanceApiSpans, ignoreResourceSpans } = options;
21149    const timeOrigin = msToSec(origin);
21150    const performanceEntries = performance1.getEntries();
21151    const { op, start_timestamp: transactionStartTime } = (0, __TURBOPACK__imported__module__304661__8["spanToJSON"])(span);
21152    performanceEntries.slice(_performanceCursor).forEach((entry)=>{
21153        const startTime = msToSec(entry.startTime);
21154        const duration = msToSec(// Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.
21155        // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display
21156        // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.
21157        // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.
21158        Math.max(0, entry.duration));
21159        if (op === "navigation" && transactionStartTime && timeOrigin + startTime < transactionStartTime) {
21160            return;
21161        }
21162        switch(entry.entryType){
21163            case "navigation":
21164                {
21165                    _addNavigationSpans(span, entry, timeOrigin);
21166                    break;
21167                }
21168            case "mark":
21169            case "paint":
21170            case "measure":
21171                {
21172                    _addMeasureSpans(span, entry, startTime, duration, timeOrigin, ignorePerformanceApiSpans);
21173                    break;
21174                }
21175            case "resource":
21176                {
21177                    _addResourceSpans(span, entry, entry.name, startTime, duration, timeOrigin, ignoreResourceSpans);
21178                    break;
21179                }
21180        }
21181    });
21182    _performanceCursor = Math.max(performanceEntries.length - 1, 0);
21183    _trackNavigator(span, spanStreamingEnabled);
21184}
21185function addWebVitalsToSpan(span, options) {
21186    var _getBrowserPerformanceAPI;
21187    const origin = (0, __TURBOPACK__imported__module__605394__4["browserPerformanceTimeOrigin"])();
21188    if (!((_getBrowserPerformanceAPI = getBrowserPerformanceAPI()) === null || _getBrowserPerformanceAPI === void 0 ? void 0 : _getBrowserPerformanceAPI.getEntries) || !origin) {
21189        resetWebVitalState();
21190        return;
21191    }
21192    const { spanStreamingEnabled, recordClsOnPageloadSpan, recordLcpOnPageloadSpan } = options;
21193    const timeOrigin = msToSec(origin);
21194    if ((0, __TURBOPACK__imported__module__304661__8["spanToJSON"])(span).op === "pageload") {
21195        _addTtfbRequestTimeToMeasurements(_measurements);
21196        if (spanStreamingEnabled) {
21197            const setAttr = (shortWebVitalName, value, customAttrName)=>{
21198                const attrKey = customAttrName !== null && customAttrName !== void 0 ? customAttrName : "browser.web_vital.".concat(shortWebVitalName, ".value");
21199                span.setAttribute(attrKey, value);
21200                DEBUG_BUILD && __TURBOPACK__imported__module__272598__11["debug"].log("Setting web vital attribute", {
21201                    [attrKey]: value
21202                }, "on pageload span");
21203            };
21204            [
21205                "ttfb",
21206                "fp",
21207                "fcp"
21208            ].forEach((measurementName)=>{
21209                if (_measurements[measurementName]) {
21210                    setAttr(measurementName, _measurements[measurementName].value);
21211                }
21212            });
21213            if (_measurements["ttfb.requestTime"]) {
21214                setAttr("ttfb.requestTime", _measurements["ttfb.requestTime"].value, "browser.web_vital.ttfb.request_time");
21215            }
21216        } else {
21217            if (!recordClsOnPageloadSpan) {
21218                delete _measurements.cls;
21219            }
21220            if (!recordLcpOnPageloadSpan) {
21221                delete _measurements.lcp;
21222            }
21223            Object.entries(_measurements).forEach((param)=>{
21224                let [measurementName, measurement] = param;
21225                setMeasurement(measurementName, measurement.value, measurement.unit, span);
21226            });
21227            _setWebVitalAttributes(span, options);
21228        }
21229        span.setAttribute(spanStreamingEnabled ? "browser.performance.time_origin" : "performance.timeOrigin", timeOrigin);
21230        span.setAttribute(spanStreamingEnabled ? "browser.performance.navigation.activation_start" : "performance.activationStart", getActivationStart());
21231    }
21232    resetWebVitalState();
21233}
21234function resetWebVitalState() {
21235    _lcpEntry = void 0;
21236    _clsEntry = void 0;
21237    _measurements = {};
21238}
21239function isReact19MeasureEntry(entry) {
21240    if ((entry === null || entry === void 0 ? void 0 : entry.entryType) !== "measure") {
21241        return;
21242    }
21243    try {
21244        return entry.detail.devtools.track === "Components \u269B";
21245    } catch (unused) {
21246        return;
21247    }
21248}
21249function _addMeasureSpans(span, entry, startTime, duration, timeOrigin, ignorePerformanceApiSpans) {
21250    if (isReact19MeasureEntry(entry)) {
21251        return;
21252    }
21253    if ([
21254        "mark",
21255        "measure"
21256    ].includes(entry.entryType) && (0, __TURBOPACK__imported__module__821593__1["stringMatchesSomePattern"])(entry.name, ignorePerformanceApiSpans)) {
21257        return;
21258    }
21259    const navEntry = getNavigationEntry(false);
21260    const requestTime = msToSec(navEntry ? navEntry.requestStart : 0);
21261    const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime);
21262    const startTimeStamp = timeOrigin + startTime;
21263    const measureEndTimestamp = startTimeStamp + duration;
21264    const attributes = {
21265        [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.resource.browser.metrics"
21266    };
21267    if (measureStartTimestamp !== startTimeStamp) {
21268        attributes["sentry.browser.measure_happened_before_request"] = true;
21269        attributes["sentry.browser.measure_start_time"] = measureStartTimestamp;
21270    }
21271    _addDetailToSpanAttributes(attributes, entry);
21272    if (measureStartTimestamp <= measureEndTimestamp) {
21273        startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, {
21274            name: entry.name,
21275            op: entry.entryType,
21276            attributes
21277        });
21278    }
21279}
21280function _addDetailToSpanAttributes(attributes, performanceMeasure) {
21281    try {
21282        const detail = performanceMeasure.detail;
21283        if (!detail) {
21284            return;
21285        }
21286        if (typeof detail === "object") {
21287            for (const [key, value] of Object.entries(detail)){
21288                if (value && (0, __TURBOPACK__imported__module__453288__2["isPrimitive"])(value)) {
21289                    attributes["sentry.browser.measure.detail.".concat(key)] = value;
21290                } else if (value !== void 0) {
21291                    try {
21292                        attributes["sentry.browser.measure.detail.".concat(key)] = JSON.stringify(value);
21293                    } catch (unused) {}
21294                }
21295            }
21296            return;
21297        }
21298        if ((0, __TURBOPACK__imported__module__453288__2["isPrimitive"])(detail)) {
21299            attributes["sentry.browser.measure.detail"] = detail;
21300            return;
21301        }
21302        try {
21303            attributes["sentry.browser.measure.detail"] = JSON.stringify(detail);
21304        } catch (unused) {}
21305    } catch (unused) {}
21306}
21307function _addNavigationSpans(span, entry, timeOrigin) {
21308    [
21309        "unloadEvent",
21310        "redirect",
21311        "domContentLoadedEvent",
21312        "loadEvent",
21313        "connect"
21314    ].forEach((event)=>{
21315        _addPerformanceNavigationTiming(span, entry, event, timeOrigin);
21316    });
21317    _addPerformanceNavigationTiming(span, entry, "secureConnection", timeOrigin, "TLS/SSL");
21318    _addPerformanceNavigationTiming(span, entry, "fetch", timeOrigin, "cache");
21319    _addPerformanceNavigationTiming(span, entry, "domainLookup", timeOrigin, "DNS");
21320    _addRequest(span, entry, timeOrigin);
21321}
21322function _addPerformanceNavigationTiming(span, entry, event, timeOrigin) {
21323    let name = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : event;
21324    const eventEnd = _getEndPropertyNameForNavigationTiming(event);
21325    const end = entry[eventEnd];
21326    const start = entry["".concat(event, "Start")];
21327    if (!start || !end) {
21328        return;
21329    }
21330    startAndEndSpan(span, timeOrigin + msToSec(start), timeOrigin + msToSec(end), {
21331        op: "browser.".concat(name),
21332        name: entry.name,
21333        attributes: {
21334            [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.ui.browser.metrics",
21335            ...event === "redirect" && entry.redirectCount != null ? {
21336                "http.redirect_count": entry.redirectCount
21337            } : {}
21338        }
21339    });
21340}
21341function _getEndPropertyNameForNavigationTiming(event) {
21342    if (event === "secureConnection") {
21343        return "connectEnd";
21344    }
21345    if (event === "fetch") {
21346        return "domainLookupStart";
21347    }
21348    return "".concat(event, "End");
21349}
21350function _addRequest(span, entry, timeOrigin) {
21351    const requestStartTimestamp = timeOrigin + msToSec(entry.requestStart);
21352    const responseEndTimestamp = timeOrigin + msToSec(entry.responseEnd);
21353    const responseStartTimestamp = timeOrigin + msToSec(entry.responseStart);
21354    if (entry.responseEnd) {
21355        startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, {
21356            op: "browser.request",
21357            name: entry.name,
21358            attributes: {
21359                [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.ui.browser.metrics"
21360            }
21361        });
21362        startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, {
21363            op: "browser.response",
21364            name: entry.name,
21365            attributes: {
21366                [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.ui.browser.metrics"
21367            }
21368        });
21369    }
21370}
21371function _addResourceSpans(span, entry, resourceUrl, startTime, duration, timeOrigin, ignoredResourceSpanOps) {
21372    if (entry.initiatorType === "xmlhttprequest" || entry.initiatorType === "fetch") {
21373        return;
21374    }
21375    const op = entry.initiatorType ? "resource.".concat(entry.initiatorType) : "resource.other";
21376    if (ignoredResourceSpanOps === null || ignoredResourceSpanOps === void 0 ? void 0 : ignoredResourceSpanOps.includes(op)) {
21377        return;
21378    }
21379    const attributes = {
21380        [__TURBOPACK__imported__module__519988__7["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.resource.browser.metrics"
21381    };
21382    const parsedUrl = parseUrl(resourceUrl);
21383    if (parsedUrl.protocol) {
21384        attributes["url.scheme"] = parsedUrl.protocol.split(":").pop();
21385    }
21386    if (parsedUrl.host) {
21387        attributes["server.address"] = parsedUrl.host;
21388    }
21389    attributes["url.same_origin"] = resourceUrl.includes(WINDOW3.location.origin);
21390    attributes[Yu] = resourceUrl;
21391    _setResourceRequestAttributes(entry, attributes, [
21392        // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/responseStatus
21393        [
21394            "responseStatus",
21395            "http.response.status_code"
21396        ],
21397        [
21398            "transferSize",
21399            "http.response_transfer_size"
21400        ],
21401        [
21402            "encodedBodySize",
21403            "http.response_content_length"
21404        ],
21405        [
21406            "decodedBodySize",
21407            "http.decoded_response_content_length"
21408        ],
21409        // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/renderBlockingStatus
21410        [
21411            "renderBlockingStatus",
21412            "resource.render_blocking_status"
21413        ],
21414        // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/deliveryType
21415        [
21416            "deliveryType",
21417            "http.response_delivery_type"
21418        ]
21419    ]);
21420    const attributesWithResourceTiming = {
21421        ...attributes,
21422        ...resourceTimingToSpanAttributes(entry)
21423    };
21424    const startTimestamp = timeOrigin + startTime;
21425    const endTimestamp = startTimestamp + duration;
21426    startAndEndSpan(span, startTimestamp, endTimestamp, {
21427        name: resourceUrl.replace(WINDOW3.location.origin, ""),
21428        op,
21429        attributes: attributesWithResourceTiming
21430    });
21431}
21432function _trackNavigator(span, spanStreamingEnabled) {
21433    const navigator1 = WINDOW3.navigator;
21434    if (!navigator1) {
21435        return;
21436    }
21437    const connection = navigator1.connection;
21438    if (connection) {
21439        if (connection.effectiveType) {
21440            span.setAttribute(spanStreamingEnabled ? "network.connection.effective_type" : "effectiveConnectionType", connection.effectiveType);
21441        }
21442        if (connection.type) {
21443            span.setAttribute(spanStreamingEnabled ? "network.connection.type" : "connectionType", connection.type);
21444        }
21445        if (isMeasurementValue(connection.rtt)) {
21446            if (spanStreamingEnabled) {
21447                span.setAttribute("network.connection.rtt", connection.rtt);
21448            } else if ((0, __TURBOPACK__imported__module__304661__8["spanToJSON"])(span).op === "pageload") {
21449                setMeasurement("connection.rtt", connection.rtt, "millisecond");
21450            }
21451        }
21452    }
21453    if (isMeasurementValue(navigator1.deviceMemory)) {
21454        if (spanStreamingEnabled) {
21455            span.setAttribute("device.memory.estimated_capacity", navigator1.deviceMemory);
21456        } else {
21457            span.setAttribute("deviceMemory", "".concat(navigator1.deviceMemory, " GB"));
21458        }
21459    }
21460    if (isMeasurementValue(navigator1.hardwareConcurrency)) {
21461        if (spanStreamingEnabled) {
21462            span.setAttribute("device.processor_count", navigator1.hardwareConcurrency);
21463        } else {
21464            span.setAttribute("hardwareConcurrency", String(navigator1.hardwareConcurrency));
21465        }
21466    }
21467}
21468function _setWebVitalAttributes(span, options) {
21469    if (_lcpEntry && options.recordLcpOnPageloadSpan) {
21470        if (_lcpEntry.element) {
21471            span.setAttribute("lcp.element", htmlTreeAsString1(_lcpEntry.element));
21472        }
21473        if (_lcpEntry.id) {
21474            span.setAttribute("lcp.id", _lcpEntry.id);
21475        }
21476        if (_lcpEntry.url) {
21477            span.setAttribute("lcp.url", _lcpEntry.url.trim().slice(0, 200));
21478        }
21479        if (_lcpEntry.loadTime != null) {
21480            span.setAttribute("lcp.loadTime", _lcpEntry.loadTime);
21481        }
21482        if (_lcpEntry.renderTime != null) {
21483            span.setAttribute("lcp.renderTime", _lcpEntry.renderTime);
21484        }
21485        span.setAttribute("lcp.size", _lcpEntry.size);
21486    }
21487    if ((_clsEntry === null || _clsEntry === void 0 ? void 0 : _clsEntry.sources) && options.recordClsOnPageloadSpan) {
21488        _clsEntry.sources.forEach((source, index)=>span.setAttribute("cls.source.".concat(index + 1), htmlTreeAsString1(source.node)));
21489    }
21490}
21491function _setResourceRequestAttributes(entry, attributes, properties) {
21492    properties.forEach((param)=>{
21493        let [entryKey, attributeKey] = param;
21494        const entryVal = entry[entryKey];
21495        if (entryVal != null && (typeof entryVal === "number" && entryVal < MAX_INT_AS_BYTES || typeof entryVal === "string")) {
21496            attributes[attributeKey] = entryVal;
21497        }
21498    });
21499}
21500function _addTtfbRequestTimeToMeasurements(_measurements2) {
21501    const navEntry = getNavigationEntry(false);
21502    if (!navEntry) {
21503        return;
21504    }
21505    const { responseStart, requestStart } = navEntry;
21506    if (requestStart <= responseStart) {
21507        _measurements2["ttfb.requestTime"] = {
21508            value: responseStart - requestStart,
21509            unit: "millisecond"
21510        };
21511    }
21512}
21513;
21514// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/debug-build.js [app-client] (ecmascript)
21515;
21516const DEBUG_BUILD1 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__;
21517;
21518// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/fetchStreamPerformance.js [app-client] (ecmascript)
21519;
21520// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integration.js [app-client] (ecmascript)
21521;
21522var __TURBOPACK__imported__module__250804__8 = __TURBOPACK__imported__module__250804__;
21523var __TURBOPACK__imported__module__901020__10 = __TURBOPACK__imported__module__901020__;
21524var __TURBOPACK__imported__module__272598__15 = __TURBOPACK__imported__module__272598__;
21525;
21526;
21527;
21528const installedIntegrations = [];
21529function filterDuplicates(integrations) {
21530    const integrationsByName = {};
21531    integrations.forEach((currentInstance)=>{
21532        const { name } = currentInstance;
21533        const existingInstance = integrationsByName[name];
21534        if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {
21535            return;
21536        }
21537        integrationsByName[name] = currentInstance;
21538    });
21539    return Object.values(integrationsByName);
21540}
21541function getIntegrationsToSetup(options) {
21542    const defaultIntegrations = options.defaultIntegrations || [];
21543    const userIntegrations = options.integrations;
21544    defaultIntegrations.forEach((integration)=>{
21545        integration.isDefaultInstance = true;
21546    });
21547    let integrations;
21548    if (Array.isArray(userIntegrations)) {
21549        integrations = [
21550            ...defaultIntegrations,
21551            ...userIntegrations
21552        ];
21553    } else if (typeof userIntegrations === "function") {
21554        const resolvedUserIntegrations = userIntegrations(defaultIntegrations);
21555        integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [
21556            resolvedUserIntegrations
21557        ];
21558    } else {
21559        integrations = defaultIntegrations;
21560    }
21561    return filterDuplicates(integrations);
21562}
21563function setupIntegrations(client, integrations) {
21564    const integrationIndex = {};
21565    integrations.forEach((integration)=>{
21566        if (integration === null || integration === void 0 ? void 0 : integration.beforeSetup) {
21567            integration.beforeSetup(client);
21568        }
21569    });
21570    integrations.forEach((integration)=>{
21571        if (integration) {
21572            setupIntegration(client, integration, integrationIndex);
21573        }
21574    });
21575    return integrationIndex;
21576}
21577function afterSetupIntegrations(client, integrations) {
21578    for (const integration of integrations){
21579        if (integration === null || integration === void 0 ? void 0 : integration.afterAllSetup) {
21580            integration.afterAllSetup(client);
21581        }
21582    }
21583}
21584function setupIntegration(client, integration, integrationIndex) {
21585    if (integrationIndex[integration.name]) {
21586        __TURBOPACK__imported__module__901020__10["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__15["debug"].log("Integration skipped because it was already installed: ".concat(integration.name));
21587        return;
21588    }
21589    integrationIndex[integration.name] = integration;
21590    if (!installedIntegrations.includes(integration.name) && typeof integration.setupOnce === "function") {
21591        integration.setupOnce();
21592        installedIntegrations.push(integration.name);
21593    }
21594    if (integration.setup && typeof integration.setup === "function") {
21595        integration.setup(client);
21596    }
21597    if (typeof integration.preprocessEvent === "function") {
21598        const callback = integration.preprocessEvent.bind(integration);
21599        client.on("preprocessEvent", (event, hint)=>callback(event, hint, client));
21600    }
21601    if (typeof integration.processEvent === "function") {
21602        const callback = integration.processEvent.bind(integration);
21603        const processor = Object.assign((event, hint)=>callback(event, hint, client), {
21604            id: integration.name
21605        });
21606        client.addEventProcessor(processor);
21607    }
21608    [
21609        "processSpan",
21610        "processSegmentSpan"
21611    ].forEach((hook)=>{
21612        const callback = integration[hook];
21613        if (typeof callback === "function") {
21614            client.on(hook, (span)=>callback.call(integration, span, client));
21615        }
21616    });
21617    __TURBOPACK__imported__module__901020__10["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__15["debug"].log("Integration installed: ".concat(integration.name));
21618}
21619function addIntegration(integration) {
21620    const client = (0, __TURBOPACK__imported__module__250804__8["getClient"])();
21621    if (!client) {
21622        __TURBOPACK__imported__module__901020__10["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__15["debug"].warn('Cannot add integration "'.concat(integration.name, '" because no SDK Client is available.'));
21623        return;
21624    }
21625    client.addIntegration(integration);
21626}
21627function defineIntegration(fn) {
21628    return fn;
21629}
21630function extendIntegration(integration, extendedIntegration) {
21631    const wrappedIntegration = {
21632        ...integration,
21633        ...extendedIntegration
21634    };
21635    for(const key in extendedIntegration){
21636        const baseValue = integration[key];
21637        const extendedValue = extendedIntegration[key];
21638        if (typeof baseValue === "function" && typeof extendedValue === "function") {
21639            const wrappedFunction = new Proxy(baseValue, {
21640                apply: (target, thisArg, args)=>{
21641                    Reflect.apply(target, thisArg, args);
21642                    return Reflect.apply(extendedValue, thisArg, args);
21643                }
21644            });
21645            wrappedIntegration[key] = wrappedFunction;
21646        }
21647    }
21648    return wrappedIntegration;
21649}
21650;
21651// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/instrument/fetch.js [app-client] (ecmascript)
21652;
21653var __TURBOPACK__imported__module__250804__9 = __TURBOPACK__imported__module__250804__;
21654var __TURBOPACK__imported__module__453288__4 = __TURBOPACK__imported__module__453288__;
21655var __TURBOPACK__imported__module__951497__4 = __TURBOPACK__imported__module__951497__;
21656var __TURBOPACK__imported__module__605394__8 = __TURBOPACK__imported__module__605394__;
21657var __TURBOPACK__imported__module__225304__8 = __TURBOPACK__imported__module__225304__;
21658;
21659;
21660;
21661;
21662;
21663;
21664;
21665function addFetchInstrumentationHandler(handler, skipNativeFetchCheck) {
21666    const type = "fetch";
21667    const removeHandler = addHandler(type, handler);
21668    maybeInstrument(type, ()=>instrumentFetch(void 0, skipNativeFetchCheck));
21669    return removeHandler;
21670}
21671function addFetchEndInstrumentationHandler(handler) {
21672    const type = "fetch-body-resolved";
21673    const removeHandler = addHandler(type, handler);
21674    maybeInstrument(type, ()=>instrumentFetch(streamHandler));
21675    return removeHandler;
21676}
21677function instrumentFetch(onFetchResolved) {
21678    let skipNativeFetchCheck = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
21679    if (skipNativeFetchCheck && !supportsNativeFetch()) {
21680        return;
21681    }
21682    (0, __TURBOPACK__imported__module__951497__4["fill"])(__TURBOPACK__imported__module__225304__8["GLOBAL_OBJ"], "fetch", function(originalFetch) {
21683        return function() {
21684            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
21685                args[_key] = arguments[_key];
21686            }
21687            const virtualError = new Error();
21688            const { method, url } = parseFetchArgs(args);
21689            const handlerData = {
21690                args,
21691                fetchData: {
21692                    method,
21693                    url
21694                },
21695                startTimestamp: (0, __TURBOPACK__imported__module__605394__8["timestampInSeconds"])() * 1e3,
21696                // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation
21697                virtualError,
21698                headers: getHeadersFromFetchArgs(args)
21699            };
21700            if (!onFetchResolved) {
21701                triggerHandlers("fetch", {
21702                    ...handlerData
21703                });
21704            }
21705            return originalFetch.apply(__TURBOPACK__imported__module__225304__8["GLOBAL_OBJ"], args).then(async (response)=>{
21706                if (onFetchResolved) {
21707                    onFetchResolved(response);
21708                } else {
21709                    triggerHandlers("fetch", {
21710                        ...handlerData,
21711                        endTimestamp: (0, __TURBOPACK__imported__module__605394__8["timestampInSeconds"])() * 1e3,
21712                        response
21713                    });
21714                }
21715                return response;
21716            }, (error)=>{
21717                var _ref;
21718                triggerHandlers("fetch", {
21719                    ...handlerData,
21720                    endTimestamp: (0, __TURBOPACK__imported__module__605394__8["timestampInSeconds"])() * 1e3,
21721                    error
21722                });
21723                if ((0, __TURBOPACK__imported__module__453288__4["isError"])(error) && error.stack === void 0) {
21724                    error.stack = virtualError.stack;
21725                    (0, __TURBOPACK__imported__module__951497__4["addNonEnumerableProperty"])(error, "framesToPop", 1);
21726                }
21727                const client = (0, __TURBOPACK__imported__module__250804__9["getClient"])();
21728                const enhanceOption = (_ref = client === null || client === void 0 ? void 0 : client.getOptions().enhanceFetchErrorMessages) !== null && _ref !== void 0 ? _ref : "always";
21729                const shouldEnhance = enhanceOption !== false;
21730                if (shouldEnhance && (0, __TURBOPACK__imported__module__453288__4["isError"])(error) && error.
21730name === "TypeError" && (error.message === "Failed to fetch" || error.message === "Load failed" || error.message === "NetworkError when attempting to fetch resource.")) {
21731                    try {
21732                        const url2 = new URL(handlerData.fetchData.url);
21733                        const hostname = url2.host;
21734                        if (enhanceOption === "always") {
21735                            error.message = "".concat(error.message, " (").concat(hostname, ")");
21736                        } else {
21737                            (0, __TURBOPACK__imported__module__951497__4["addNonEnumerableProperty"])(error, "__sentry_fetch_url_host__", hostname);
21738                        }
21739                    } catch (unused) {}
21740                }
21741                throw error;
21742            });
21743        };
21744    });
21745}
21746async function resolveResponse(res, onFinishedResolving) {
21747    if (res === null || res === void 0 ? void 0 : res.body) {
21748        const body = res.body;
21749        const responseReader = body.getReader();
21750        const maxFetchDurationTimeout = setTimeout(()=>{
21751            body.cancel().then(null, ()=>{});
21752        }, 90 * 1e3);
21753        let readingActive = true;
21754        while(readingActive){
21755            let chunkTimeout;
21756            try {
21757                chunkTimeout = setTimeout(()=>{
21758                    body.cancel().then(null, ()=>{});
21759                }, 5e3);
21760                const { done } = await responseReader.read();
21761                clearTimeout(chunkTimeout);
21762                if (done) {
21763                    onFinishedResolving();
21764                    readingActive = false;
21765                }
21766            } catch (unused) {
21767                readingActive = false;
21768            } finally{
21769                clearTimeout(chunkTimeout);
21770            }
21771        }
21772        clearTimeout(maxFetchDurationTimeout);
21773        responseReader.releaseLock();
21774        body.cancel().then(null, ()=>{});
21775    }
21776}
21777function streamHandler(response) {
21778    let clonedResponseForResolving;
21779    try {
21780        clonedResponseForResolving = response.clone();
21781    } catch (unused) {
21782        return;
21783    }
21784    resolveResponse(clonedResponseForResolving, ()=>{
21785        triggerHandlers("fetch-body-resolved", {
21786            endTimestamp: (0, __TURBOPACK__imported__module__605394__8["timestampInSeconds"])() * 1e3,
21787            response
21788        });
21789    });
21790}
21791function hasProp(obj, prop) {
21792    return (0, __TURBOPACK__imported__module__453288__4["isObjectLike"])(obj) && !!obj[prop];
21793}
21794function getUrlFromResource(resource) {
21795    if (typeof resource === "string") {
21796        return resource;
21797    }
21798    if (!resource) {
21799        return "";
21800    }
21801    if (hasProp(resource, "url")) {
21802        return resource.url;
21803    }
21804    if (resource.toString) {
21805        return resource.toString();
21806    }
21807    return "";
21808}
21809function parseFetchArgs(fetchArgs) {
21810    if (fetchArgs.length === 0) {
21811        return {
21812            method: "GET",
21813            url: ""
21814        };
21815    }
21816    if (fetchArgs.length === 2) {
21817        const [resource, options] = fetchArgs;
21818        return {
21819            url: getUrlFromResource(resource),
21820            method: hasProp(options, "method") ? String(options.method).toUpperCase() : // Request object as first argument
21821            (0, __TURBOPACK__imported__module__453288__4["isRequest"])(resource) && hasProp(resource, "method") ? String(resource.method).toUpperCase() : "GET"
21822        };
21823    }
21824    const arg = fetchArgs[0];
21825    return {
21826        url: getUrlFromResource(arg),
21827        method: hasProp(arg, "method") ? String(arg.method).toUpperCase() : "GET"
21828    };
21829}
21830function getHeadersFromFetchArgs(fetchArgs) {
21831    const [requestArgument, optionsArgument] = fetchArgs;
21832    try {
21833        if (typeof optionsArgument === "object" && optionsArgument !== null && "headers" in optionsArgument && optionsArgument.headers) {
21834            return new Headers(optionsArgument.headers);
21835        }
21836        if ((0, __TURBOPACK__imported__module__453288__4["isRequest"])(requestArgument)) {
21837            return new Headers(requestArgument.headers);
21838        }
21839    } catch (unused) {}
21840    return;
21841}
21842;
21843var __TURBOPACK__imported__module__519988__10 = __TURBOPACK__imported__module__519988__;
21844;
21845const responseToStreamSpan = /* @__PURE__ */ new WeakMap();
21846const responseToFallbackTimeout = /* @__PURE__ */ new WeakMap();
21847const STREAM_RESOLVE_FALLBACK_MS = 9e4;
21848const STREAMING_CONTENT_TYPES = [
21849    "text/event-stream",
21850    "application/x-ndjson",
21851    "application/stream+json"
21852];
21853const fetchStreamPerformanceIntegration = defineIntegration(()=>{
21854    return {
21855        name: "FetchStreamPerformance",
21856        setup () {
21857            addFetchEndInstrumentationHandler((handlerData)=>{
21858                if (handlerData.response) {
21859                    const streamSpan = responseToStreamSpan.get(handlerData.response);
21860                    if (streamSpan && handlerData.endTimestamp) {
21861                        streamSpan.end(handlerData.endTimestamp);
21862                        const fallbackTimeout = responseToFallbackTimeout.get(handlerData.response);
21863                        if (fallbackTimeout) {
21864                            clearTimeout(fallbackTimeout);
21865                        }
21866                    }
21867                }
21868            });
21869            addFetchInstrumentationHandler((handlerData)=>{
21870                if (handlerData.endTimestamp && handlerData.response) {
21871                    var _handlerData_response_headers, _handlerData_response_headers1, _handlerData_fetchData, _handlerData_fetchData1;
21872                    const contentType = ((_handlerData_response_headers = handlerData.response.headers) === null || _handlerData_response_headers === void 0 ? void 0 : _handlerData_response_headers.get("content-type")) || "";
21873                    if (((_handlerData_response_headers1 = handlerData.response.headers) === null || _handlerData_response_headers1 === void 0 ? void 0 : _handlerData_response_headers1.get("content-length")) || !STREAMING_CONTENT_TYPES.some((t)=>contentType.startsWith(t))) {
21874                        return;
21875                    }
21876                    const url = ((_handlerData_fetchData = handlerData.fetchData) === null || _handlerData_fetchData === void 0 ? void 0 : _handlerData_fetchData.url) || "";
21877                    const method = ((_handlerData_fetchData1 = handlerData.fetchData) === null || _handlerData_fetchData1 === void 0 ? void 0 : _handlerData_fetchData1.method) || "GET";
21878                    const parsedUrl = parseStringToURLObject(url);
21879                    const sanitizedUrl = url.startsWith("data:") ? stripDataUrlContent(url) : parsedUrl ? getSanitizedUrlStringFromUrlObject(parsedUrl) : url;
21880                    const streamSpan = startInactiveSpan({
21881                        name: "".concat(method, " ").concat(sanitizedUrl),
21882                        startTime: handlerData.endTimestamp,
21883                        attributes: {
21884                            url: stripDataUrlContent(url),
21885                            "http.method": method,
21886                            type: "fetch",
21887                            [__TURBOPACK__imported__module__519988__10["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "http.client.stream",
21888                            [__TURBOPACK__imported__module__519988__10["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.http.browser.stream"
21889                        }
21890                    });
21891                    responseToStreamSpan.set(handlerData.response, streamSpan);
21892                    const fallbackTimeout = setTimeout(()=>{
21893                        if (streamSpan.isRecording()) {
21894                            streamSpan.end();
21895                        }
21896                    }, STREAM_RESOLVE_FALLBACK_MS);
21897                    responseToFallbackTimeout.set(handlerData.response, fallbackTimeout);
21898                }
21899            });
21900        }
21901    };
21902});
21903;
21904// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/webVitals.js [app-client] (ecmascript)
21905;
21906// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/inp.js [app-client] (ecmascript)
21907;
21908var __TURBOPACK__imported__module__901538__ = __turbopack_context__.i(901538);
21909var __TURBOPACK__imported__module__605394__9 = __TURBOPACK__imported__module__605394__;
21910var __TURBOPACK__imported__module__304661__10 = __TURBOPACK__imported__module__304661__;
21911var __TURBOPACK__imported__module__250804__10 = __TURBOPACK__imported__module__250804__;
21912var __TURBOPACK__imported__module__519988__11 = __TURBOPACK__imported__module__519988__;
21913;
21914;
21915;
21916;
21917;
21918const LAST_INTERACTIONS = [];
21919const INTERACTIONS_SPAN_MAP = /* @__PURE__ */ new Map();
21920const ELEMENT_NAME_TIMESTAMP_MAP = /* @__PURE__ */ new Map();
21921const MAX_PLAUSIBLE_INP_DURATION = 60;
21922function startTrackingINP() {
21923    const performance1 = getBrowserPerformanceAPI();
21924    if (performance1 && (0, __TURBOPACK__imported__module__605394__9["browserPerformanceTimeOrigin"])()) {
21925        const inpCallback = _trackINP();
21926        return ()=>{
21927            inpCallback();
21928        };
21929    }
21930    return ()=>void 0;
21931}
21932const INP_ENTRY_MAP = {
21933    click: "click",
21934    pointerdown: "click",
21935    pointerup: "click",
21936    mousedown: "click",
21937    mouseup: "click",
21938    touchstart: "click",
21939    touchend: "click",
21940    mouseover: "hover",
21941    mouseout: "hover",
21942    mouseenter: "hover",
21943    mouseleave: "hover",
21944    pointerover: "hover",
21945    pointerout: "hover",
21946    pointerenter: "hover",
21947    pointerleave: "hover",
21948    dragstart: "drag",
21949    dragend: "drag",
21950    drag: "drag",
21951    dragenter: "drag",
21952    dragleave: "drag",
21953    dragover: "drag",
21954    drop: "drag",
21955    keydown: "press",
21956    keyup: "press",
21957    keypress: "press",
21958    input: "press"
21959};
21960function _trackINP() {
21961    return addInpInstrumentationHandler(_onInp);
21962}
21963const _onInp = (param)=>{
21964    let { metric } = param;
21965    if (metric.value == void 0) {
21966        return;
21967    }
21968    const duration = msToSec(metric.value);
21969    if (duration > MAX_PLAUSIBLE_INP_DURATION) {
21970        return;
21971    }
21972    const entry = metric.entries.find((entry2)=>entry2.duration === metric.value && INP_ENTRY_MAP[entry2.name]);
21973    if (!entry) {
21974        return;
21975    }
21976    const { interactionId } = entry;
21977    const interactionType = INP_ENTRY_MAP[entry.name];
21978    const startTime = msToSec((0, __TURBOPACK__imported__module__605394__9["browserPerformanceTimeOrigin"])() + entry.startTime);
21979    const activeSpan = (0, __TURBOPACK__imported__module__304661__10["getActiveSpan"])();
21980    const rootSpan = activeSpan ? (0, __TURBOPACK__imported__module__304661__10["getRootSpan"])(activeSpan) : void 0;
21981    const cachedInteractionContext = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : void 0;
21982    const spanToUse = (cachedInteractionContext === null || cachedInteractionContext === void 0 ? void 0 : cachedInteractionContext.span) || rootSpan;
21983    const routeName = spanToUse ? (0, __TURBOPACK__imported__module__304661__10["spanToJSON"])(spanToUse).description : (0, __TURBOPACK__imported__module__250804__10["getCurrentScope"])().getScopeData().transactionName;
21984    const name = (cachedInteractionContext === null || cachedInteractionContext === void 0 ? void 0 : cachedInteractionContext.elementName) || htmlTreeAsString1(e
21984ntry.target);
21985    const attributes = {
21986        [__TURBOPACK__imported__module__519988__11["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.http.browser.inp",
21987        [__TURBOPACK__imported__module__519988__11["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "ui.interaction.".concat(interactionType),
21988        [__TURBOPACK__imported__module__519988__11["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]]: entry.duration
21989    };
21990    const span = startStandaloneWebVitalSpan({
21991        name,
21992        transaction: routeName,
21993        attributes,
21994        startTime
21995    });
21996    if (span) {
21997        span.addEvent("inp", {
21998            [__TURBOPACK__imported__module__519988__11["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT"]]: "millisecond",
21999            [__TURBOPACK__imported__module__519988__11["SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE"]]: metric.value
22000        });
22001        span.end(startTime + duration);
22002    }
22003};
22004function getCachedInteractionContext(interactionId) {
22005    return interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : void 0;
22006}
22007function registerInpInteractionListener() {
22008    const interactionEvents = Object.keys(INP_ENTRY_MAP);
22009    if ((0, __TURBOPACK__imported__module__901538__["isBrowser"])()) {
22010        interactionEvents.forEach((eventType)=>{
22011            WINDOW3.addEventListener(eventType, captureElementFromEvent, {
22012                capture: true,
22013                passive: true
22014            });
22015        });
22016    }
22017    function captureElementFromEvent(event) {
22018        const target = event.target;
22019        if (!target) {
22020            return;
22021        }
22022        const elementName = htmlTreeAsString1(target);
22023        const timestamp = Math.round(event.timeStamp);
22024        ELEMENT_NAME_TIMESTAMP_MAP.set(timestamp, elementName);
22025        if (ELEMENT_NAME_TIMESTAMP_MAP.size > 50) {
22026            const firstKey = ELEMENT_NAME_TIMESTAMP_MAP.keys().next().value;
22027            if (firstKey !== void 0) {
22028                ELEMENT_NAME_TIMESTAMP_MAP.delete(firstKey);
22029            }
22030        }
22031    }
22032    function resolveElementNameFromEntry(entry) {
22033        const timestamp = Math.round(entry.startTime);
22034        let elementName = ELEMENT_NAME_TIMESTAMP_MAP.get(timestamp);
22035        if (!elementName) {
22036            for(let offset = -5; offset <= 5; offset++){
22037                const nearbyName = ELEMENT_NAME_TIMESTAMP_MAP.get(timestamp + offset);
22038                if (nearbyName) {
22039                    elementName = nearbyName;
22040                    break;
22041                }
22042            }
22043        }
22044        return elementName || "<unknown>";
22045    }
22046    const handleEntries = (param)=>{
22047        let { entries } = param;
22048        const activeSpan = (0, __TURBOPACK__imported__module__304661__10["getActiveSpan"])();
22049        const activeRootSpan = activeSpan && (0, __TURBOPACK__imported__module__304661__10["getRootSpan"])(activeSpan);
22050        entries.forEach((entry)=>{
22051            if (!isPerformanceEventTiming(entry)) {
22052                return;
22053            }
22054            const interactionId = entry.interactionId;
22055            if (interactionId == null) {
22056                return;
22057            }
22058            if (INTERACTIONS_SPAN_MAP.has(interactionId)) {
22059                return;
22060            }
22061            const elementName = entry.target ? htmlTreeAsString1(entry.target) : resolveElementNameFromEntry(entry);
22062            if (LAST_INTERACTIONS.length > 10) {
22063                const last = LAST_INTERACTIONS.shift();
22064                INTERACTIONS_SPAN_MAP.delete(last);
22065            }
22066            LAST_INTERACTIONS.push(interactionId);
22067            INTERACTIONS_SPAN_MAP.set(interactionId, {
22068                span: activeRootSpan,
22069                elementName
22070            });
22071        });
22072    };
22073    addPerformanceInstrumentationHandler("event", handleEntries);
22074    addPerformanceInstrumentationHandler("first-input", handleEntries);
22075}
22076;
22077// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/metrics/webVitalSpans.js [app-client] (ecmascript)
22078;
22079var __TURBOPACK__imported__module__605394__10 = __TURBOPACK__imported__module__605394__;
22080var __TURBOPACK__imported__module__272598__16 = __TURBOPACK__imported__module__272598__;
22081var __TURBOPACK__imported__module__250804__11 = __TURBOPACK__imported__module__250804__;
22082var __TURBOPACK__imported__module__304661__11 = __TURBOPACK__imported__module__304661__;
22083var __TURBOPACK__imported__module__519988__12 = __TURBOPACK__imported__module__519988__;
22084;
22085;
22086;
22087;
22088;
22089;
22090;
22091;
22092;
22093function _emitWebVitalSpan(options) {
22094    var _WINDOW_navigator, _spanToStreamedSpanJSON_attributes;
22095    const { name, op, origin, metricName, value, attributes: passedAttributes, parentSpan, reportEvent, startTime, endTime } = options;
22096    const routeName = (0, __TURBOPACK__imported__module__250804__11["getCurrentScope"])().getScopeData().transactionName;
22097    const attributes = {
22098        [__TURBOPACK__imported__module__519988__12["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: origin,
22099        [__TURBOPACK__imported__module__519988__12["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: op,
22100        [__TURBOPACK__imported__module__519988__12["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]]: 0,
22101        ["browser.web_vital.".concat(metricName, ".value")]: value,
22102        // oxlint-disable-next-line typescript-eslint/no-deprecated
22103        [Xc]: routeName,
22104        [Lc]: routeName,
22105        // Web vital score calculation relies on the user agent
22106        "user_agent.original": (_WINDOW_navigator = WINDOW3.navigator) === null || _WINDOW_navigator === void 0 ? void 0 : _WINDOW_navigator.userAgent,
22107        ...passedAttributes
22108    };
22109    if (parentSpan && ((_spanToStreamedSpanJSON_attributes = (0, __TURBOPACK__imported__module__304661__11["spanToStreamedSpanJSON"])(parentSpan).attributes) === null || _spanToStreamedSpanJSON_attributes === void 0 ? void 0 : _spanToStreamedSpanJSON_attributes[__TURBOPACK__imported__module__519988__12["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]) === "pageload") {
22110        attributes["sentry.pageload.span_id"] = parentSpan.spanContext().spanId;
22111    }
22112    if (reportEvent) {
22113        attributes["browser.web_vital.".concat(metricName, ".report_event")] = reportEvent;
22114    }
22115    const span = startInactiveSpan({
22116        name,
22117        attributes,
22118        startTime,
22119        // if we have a pageload span, we let the web vital span start as its parent. This ensures that
22120        // it is not started as a segment span, without having to manually set it to a "standalone" v2 span
22121        // that has `segment: false` but no actual parent span.
22122        parentSpan
22123    });
22124    if (span) {
22125        span.end(endTime !== null && endTime !== void 0 ? endTime : startTime);
22126    }
22127}
22128function trackLcpAsSpan(client) {
22129    let lcpValue = 0;
22130    let lcpEntry;
22131    if (!supportsWebVital("largest-contentful-paint")) {
22132        return;
22133    }
22134    const cleanupLcpHandler = addLcpInstrumentationHandler((param)=>{
22135        let { metric } = param;
22136        const entry = metric.entries[metric.entries.length - 1];
22137        if (!entry || !isValidLcpMetric(metric.value)) {
22138            return;
22139        }
22140        lcpValue = metric.value;
22141        lcpEntry = entry;
22142    }, true);
22143    listenForWebVitalReportEvents(client, (reportEvent, _, pageloadSpan)=>{
22144        _sendLcpSpan(lcpValue, lcpEntry, pageloadSpan, reportEvent);
22145        cleanupLcpHandler();
22146    });
22147}
22148function _sendLcpSpan(lcpValue, entry, pageloadSpan, reportEvent) {
22149    if (!isValidLcpMetric(lcpValue)) {
22150        return;
22151    }
22152    DEBUG_BUILD && __TURBOPACK__imported__module__272598__16["debug"].log("Sending LCP span (".concat(lcpValue, ")"));
22153    const performanceTimeOrigin = (0, __TURBOPACK__imported__module__605394__10["browserPerformanceTimeOrigin"])() || 0;
22154    const timeOrigin = msToSec(performanceTimeOrigin);
22155    const endTime = msToSec(performanceTimeOrigin + ((entry === null || entry === void 0 ? void 0 : entry.startTime) || 0));
22156    const name = entry ? htmlTreeAsString1(entry.element) : "Largest contentful paint";
22157    const attributes = {};
22158    (entry === null || entry === void 0 ? void 0 : entry.element) && (attributes["browser.web_vital.lcp.element"] = htmlTreeAsString1(entry.element));
22159    (entry === null || entry === void 0 ? void 0 : entry.id) && (attributes["browser.web_vital.lcp.id"] = entry.id);
22160    (entry === null || entry === void 0 ? void 0 : entry.url) && (attributes["browser.web_vital.lcp.url"] = entry.url);
22161    (entry === null || entry === void 0 ? void 0 : entry.loadTime) != null && (attributes["browser.web_vital.lcp.load_time"] = entry.loadTime);
22162    (entry === null || entry === void 0 ? void 0 : entry.renderTime) != null && (attributes["browser.web_vital.lcp.render_time"] = entry.renderTime);
22163    (entry === null || entry === void 0 ? void 0 : entry.size) != null && (attributes["browser.web_vital.lcp.size"] = entry.size);
22164    _emitWebVitalSpan({
22165        name,
22166        op: "ui.webvital.lcp",
22167        origin: "auto.http.browser.lcp",
22168        metricName: "lcp",
22169        value: lcpValue,
22170        attributes,
22171        parentSpan: pageloadSpan,
22172        reportEvent,
22173        startTime: timeOrigin,
22174        endTime
22175    });
22176}
22177function trackClsAsSpan(client) {
22178    let clsValue = 0;
22179    let clsEntry;
22180    if (!supportsWebVital("layout-shift")) {
22181        return;
22182    }
22183    const cleanupClsHandler = addClsInstrumentationHandler((param)=>{
22184        let { metric } = param;
22185        const entry = metric.entries[metric.entries.length - 1];
22186        if (!entry) {
22187            return;
22188        }
22189        clsValue = metric.value;
22190        clsEntry = entry;
22191    }, true);
22192    listenForWebVitalReportEvents(client, (reportEvent, _, pageloadSpan)=>{
22193        _sendClsSpan(clsValue, clsEntry, pageloadSpan, reportEvent);
22194        cleanupClsHandler();
22195    });
22196}
22197function _sendClsSpan(clsValue, entry, pageloadSpan, reportEvent) {
22198    var _entry_sources_;
22199    DEBUG_BUILD && __TURBOPACK__imported__module__272598__16["debug"].log("Sending CLS span (".concat(clsValue, ")"));
22200    const startTime = entry ? msToSec(((0, __TURBOPACK__imported__module__605394__10["browserPerformanceTimeOrigin"])() || 0) + entry.startTime) : (0, __TURBOPACK__imported__module__605394__10["timestampInSeconds"])();
22201    const name = entry ? htmlTreeAsString1((_entry_sources_ = entry.sources[0]) === null || _entry_sources_ === void 0 ? void 0 : _entry_sources_.node) : "Layout shift";
22202    const attributes = {};
22203    if (entry === null || entry === void 0 ? void 0 : entry.sources) {
22204        entry.sources.forEach((source, index)=>{
22205            attributes["browser.web_vital.cls.source.".concat(index + 1)] = htmlTreeAsString1(source.node);
22206        });
22207    }
22208    _emitWebVitalSpan({
22209        name,
22210        op: "ui.webvital.cls",
22211        origin: "auto.http.browser.cls",
22212        metricName: "cls",
22213        value: clsValue,
22214        attributes,
22215        parentSpan: pageloadSpan,
22216        reportEvent,
22217        startTime
22218    });
22219}
22220function trackInpAsSpan() {
22221    const performance1 = getBrowserPerformanceAPI();
22222    if (!performance1 || !(0, __TURBOPACK__imported__module__605394__10["browserPerformanceTimeOrigin"])()) {
22223        return;
22224    }
22225    const onInp = (param)=>{
22226        let { metric } = param;
22227        if (metric.value == null) {
22228            return;
22229        }
22230        const duration = msToSec(metric.value);
22231        if (duration > MAX_PLAUSIBLE_INP_DURATION) {
22232            return;
22233        }
22234        const entry = metric.entries.find((e)=>e.duration === metric.value && INP_ENTRY_MAP[e.name]);
22235        if (!entry) {
22236            return;
22237        }
22238        _sendInpSpan(metric.value, entry);
22239    };
22240    addInpInstrumentationHandler(onInp);
22241}
22242function _sendInpSpan(inpValue, entry) {
22243    DEBUG_BUILD && __TURBOPACK__imported__module__272598__16["debug"].log("Sending INP span (".concat(inpValue, ")"));
22244    const startTime = msToSec((0, __TURBOPACK__imported__module__605394__10["browserPerformanceTimeOrigin"])() + entry.startTime);
22245    const duration = msToSec(inpValue);
22246    const interactionType = INP_ENTRY_MAP[entry.name];
22247    const cachedContext = getCachedInteractionContext(entry.interactionId);
22248    const activeSpan = (0, __TURBOPACK__imported__module__304661__11["getActiveSpan"])();
22249    const rootSpan = activeSpan ? (0, __TURBOPACK__imported__module__304661__11["getRootSpan"])(activeSpan) : void 0;
22250    const spanToUse = (cachedContext === null || cachedContext === void 0 ? void 0 : cachedContext.span) || rootSpan;
22251    const routeName = spanToUse ? (0, __TURBOPACK__imported__module__304661__11["spanToStreamedSpanJSON"])(spanToUse).name : (0, __TURBOPACK__imported__module__250804__11["getCurrentScope"])().getScopeData().transactionName;
22252    const name = (cachedContext === null || cachedContext === void 0 ? void 0 : cachedContext.elementName) || htmlTreeAsString1(e
22252ntry.target);
22253    _emitWebVitalSpan({
22254        name,
22255        op: "ui.interaction.".concat(interactionType),
22256        origin: "auto.http.browser.inp",
22257        metricName: "inp",
22258        value: inpValue,
22259        attributes: {
22260            [__TURBOPACK__imported__module__519988__12["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]]: entry.duration,
22261            // oxlint-disable-next-line typescript-eslint/no-deprecated
22262            [Xc]: routeName,
22263            [Lc]: routeName
22264        },
22265        startTime,
22266        endTime: startTime + duration,
22267        parentSpan: spanToUse
22268    });
22269}
22270;
22271;
22272;
22273const WEB_VITALS_INTEGRATION_NAME = "WebVitals";
22274const webVitalsIntegration = defineIntegration(function() {
22275    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
22276    var _options_ignore;
22277    const ignored = new Set((_options_ignore = options.ignore) !== null && _options_ignore !== void 0 ? _options_ignore : []);
22278    return {
22279        name: WEB_VITALS_INTEGRATION_NAME,
22280        setup (client) {
22281            var _options__experiments;
22282            const spanStreamingEnabled = hasSpanStreamingEnabled(client);
22283            const { enableStandaloneClsSpans, enableStandaloneLcpSpans } = (_options__experiments = options._experiments) !== null && _options__experiments !== void 0 ? _options__experiments : {};
22284            const recordClsStandaloneSpans = spanStreamingEnabled || ignored.has("cls") ? void 0 : enableStandaloneClsSpans || false;
22285            const recordLcpStandaloneSpans = spanStreamingEnabled || ignored.has("lcp") ? void 0 : enableStandaloneLcpSpans || false;
22286            const finalizeWebVitals = startTrackingWebVitals({
22287                recordClsStandaloneSpans,
22288                recordLcpStandaloneSpans,
22289                client
22290            });
22291            const pageloadSpans = /* @__PURE__ */ new WeakSet();
22292            client.on("afterStartPageLoadSpan", (span)=>{
22293                pageloadSpans.add(span);
22294            });
22295            client.on("spanEnd", (span)=>{
22296                if (!pageloadSpans.delete(span)) {
22297                    return;
22298                }
22299                finalizeWebVitals();
22300                addWebVitalsToSpan(span, {
22301                    // CLS/LCP are recorded as pageload span measurements only when they're neither
22302                    // tracked as standalone spans nor handled by span streaming (and not ignored).
22303                    recordClsOnPageloadSpan: recordClsStandaloneSpans === false,
22304                    recordLcpOnPageloadSpan: recordLcpStandaloneSpans === false,
22305                    spanStreamingEnabled
22306                });
22307            });
22308            if (spanStreamingEnabled) {
22309                if (!ignored.has("lcp")) {
22310                    trackLcpAsSpan(client);
22311                }
22312                if (!ignored.has("cls")) {
22313                    trackClsAsSpan(client);
22314                }
22315                if (!ignored.has("inp")) {
22316                    trackInpAsSpan();
22317                }
22318            } else if (!ignored.has("inp")) {
22319                startTrackingINP();
22320            }
22321        },
22322        afterAllSetup () {
22323            if (!ignored.has("inp")) {
22324                registerInpInteractionListener();
22325            }
22326        }
22327    };
22328});
22329;
22330// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/tracing/backgroundtab.js [app-client] (ecmascript)
22331;
22332var __TURBOPACK__imported__module__304661__12 = __TURBOPACK__imported__module__304661__;
22333var __TURBOPACK__imported__module__272598__17 = __TURBOPACK__imported__module__272598__;
22334var __TURBOPACK__imported__module__776710__3 = __TURBOPACK__imported__module__776710__;
22335;
22336;
22337;
22338function registerBackgroundTabDetection() {
22339    if (WINDOW1.document) {
22340        WINDOW1.document.addEventListener("visibilitychange", ()=>{
22341            const activeSpan = (0, __TURBOPACK__imported__module__304661__12["getActiveSpan"])();
22342            if (!activeSpan) {
22343                return;
22344            }
22345            const rootSpan = (0, __TURBOPACK__imported__module__304661__12["getRootSpan"])(activeSpan);
22346            if (WINDOW1.document.hidden && rootSpan) {
22347                const cancelledStatus = "cancelled";
22348                const { op, status } = (0, __TURBOPACK__imported__module__304661__12["spanToJSON"])(rootSpan);
22349                if (DEBUG_BUILD1) {
22350                    __TURBOPACK__imported__module__272598__17["debug"].log("[Tracing] Transaction: ".concat(cancelledStatus, " -> since tab moved to the background, op: ").concat(op));
22351                }
22352                if (!status) {
22353                    rootSpan.setStatus({
22354                        code: __TURBOPACK__imported__module__776710__3["SPAN_STATUS_ERROR"],
22355                        message: cancelledStatus
22356                    });
22357                }
22358                rootSpan.setAttribute("sentry.cancellation_reason", "document.hidden");
22359                rootSpan.end();
22360            }
22361        });
22362    } else {
22363        DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__17["debug"].warn("[Tracing] Could not set up background tab detection due to lack of global document");
22364    }
22365}
22366;
22367// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/tracing/linkedTraces.js [app-client] (ecmascript)
22368;
22369var __TURBOPACK__imported__module__304661__13 = __TURBOPACK__imported__module__304661__;
22370var __TURBOPACK__imported__module__250804__12 = __TURBOPACK__imported__module__250804__;
22371var __TURBOPACK__imported__module__519988__13 = __TURBOPACK__imported__module__519988__;
22372var __TURBOPACK__imported__module__272598__18 = __TURBOPACK__imported__module__272598__;
22373;
22374;
22375;
22376;
22377;
22378;
22379;
22380;
22381;
22382;
22383;
22384;
22385const PREVIOUS_TRACE_MAX_DURATION = 3600;
22386const PREVIOUS_TRACE_KEY = "sentry_previous_trace";
22387const PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE = "sentry.previous_trace";
22388function linkTraces(client, param) {
22389    let { linkPreviousTrace, consistentTraceSampling } = param;
22390    const useSessionStorage = linkPreviousTrace === "session-storage";
22391    let inMemoryPreviousTraceInfo = useSessionStorage ? getPreviousTraceFromSessionStorage() : void 0;
22392    client.on("spanStart", (span)=>{
22393        if ((0, __TURBOPACK__imported__module__304661__13["getRootSpan"])(span) !== span) {
22394            return;
22395        }
22396        const oldPropagationContext = (0, __TURBOPACK__imported__module__250804__12["getCurrentScope"])().getPropagationContext();
22397        inMemoryPreviousTraceInfo = addPreviousTraceSpanLink(inMemoryPreviousTraceInfo, span, oldPropagationContext);
22398        if (useSessionStorage) {
22399            storePreviousTraceInSessionStorage(inMemoryPreviousTraceInfo);
22400        }
22401    });
22402    let isFirstTraceOnPageload = true;
22403    if (consistentTraceSampling) {
22404        client.on("beforeSampling", (mutableSamplingContextData)=>{
22405            if (!inMemoryPreviousTraceInfo) {
22406                return;
22407            }
22408            const scope = (0, __TURBOPACK__imported__module__250804__12["getCurrentScope"])();
22409            const currentPropagationContext = scope.getPropagationContext();
22410            if (isFirstTraceOnPageload && currentPropagationContext.parentSpanId) {
22411                isFirstTraceOnPageload = false;
22412                return;
22413            }
22414            scope.setPropagationContext({
22415                ...currentPropagationContext,
22416                dsc: {
22417                    ...currentPropagationContext.dsc,
22418                    sample_rate: String(inMemoryPreviousTraceInfo.sampleRate),
22419                    sampled: String(spanContextSampled(inMemoryPreviousTraceInfo.spanContext))
22420                },
22421                sampleRand: inMemoryPreviousTraceInfo.sampleRand
22422            });
22423            mutableSamplingContextData.parentSampled = spanContextSampled(inMemoryPreviousTraceInfo.spanContext);
22424            mutableSamplingContextData.parentSampleRate = inMemoryPreviousTraceInfo.sampleRate;
22425            mutableSamplingContextData.spanAttributes = {
22426                ...mutableSamplingContextData.spanAttributes,
22427                [__TURBOPACK__imported__module__519988__13["SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE"]]: inMemoryPreviousTraceInfo.sampleRate
22428            };
22429        });
22430    }
22431}
22432function addPreviousTraceSpanLink(previousTraceInfo, span, oldPropagationContext) {
22433    const spanJson = (0, __TURBOPACK__imported__module__304661__13["spanToJSON"])(span);
22434    function getSampleRate() {
22435        try {
22436            var _ref;
22437            var _spanJson_data, _oldPropagationContext_dsc;
22438            const oldSampleRate = Number((_ref = (_spanJson_data = spanJson.data) === null || _spanJson_data === void 0 ? void 0 : _spanJson_data[__TURBOPACK__imported__module__519988__13["SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE"]]) !== null && _ref !== void 0 ? _ref : (_oldPropagationContext_dsc = oldPropagationContext.dsc) === null || _oldPropagationContext_dsc === void 0 ? void 0 : _oldPropagationContext_dsc.sample_rate);
22439            return Number.isNaN(oldSampleRate) ? 0 : oldSampleRate;
22440        } catch (unused) {
22441            return 0;
22442        }
22443    }
22444    const updatedPreviousTraceInfo = {
22445        spanContext: span.spanContext(),
22446        startTimestamp: spanJson.start_timestamp,
22447        sampleRate: getSampleRate(),
22448        sampleRand: oldPropagationContext.sampleRand
22449    };
22450    if (!previousTraceInfo) {
22451        return updatedPreviousTraceInfo;
22452    }
22453    const previousTraceSpanCtx = previousTraceInfo.spanContext;
22454    if (previousTraceSpanCtx.traceId === spanJson.trace_id) {
22455        return previousTraceInfo;
22456    }
22457    if (Date.now() / 1e3 - previousTraceInfo.startTimestamp <= PREVIOUS_TRACE_MAX_DURATION) {
22458        if (DEBUG_BUILD1) {
22459            __TURBOPACK__imported__module__272598__18["debug"].log("Adding previous_trace `".concat(JSON.stringify(previousTraceSpanCtx), "` link to span `").concat(JSON.stringify({
22460                op: spanJson.op,
22461                ...span.spanContext()
22462            }), "`"));
22463        }
22464        span.addLink({
22465            context: previousTraceSpanCtx,
22466            attributes: {
22467                [__TURBOPACK__imported__module__519988__13["SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE"]]: "previous_trace"
22468            }
22469        });
22470        span.setAttribute(PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE, "".concat(previousTraceSpanCtx.traceId, "-").concat(previousTraceSpanCtx.spanId, "-").concat(spanContextSampled(previousTraceSpanCtx) ? 1 : 0));
22471    }
22472    return updatedPreviousTraceInfo;
22473}
22474function storePreviousTraceInSessionStorage(previousTraceInfo) {
22475    try {
22476        WINDOW1.sessionStorage.setItem(PREVIOUS_TRACE_KEY, JSON.stringify(previousTraceInfo));
22477    } catch (e) {
22478        DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__18["debug"].warn("Could not store previous trace in sessionStorage", e);
22479    }
22480}
22481function getPreviousTraceFromSessionStorage() {
22482    try {
22483        var _WINDOW_sessionStorage;
22484        const previousTraceInfo = (_WINDOW_sessionStorage = WINDOW1.sessionStorage) === null || _WINDOW_sessionStorage === void 0 ? void 0 : _WINDOW_sessionStorage.getItem(PREVIOUS_TRACE_KEY);
22485        return JSON.parse(previousTraceInfo);
22486    } catch (unused) {
22487        return void 0;
22488    }
22489}
22490function spanContextSampled(ctx) {
22491    return ctx.traceFlags === 1;
22492}
22493;
22494// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/tracing/request.js [app-client] (ecmascript)
22495;
22496// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/fetch.js [app-client] (ecmascript)
22497;
22498var __TURBOPACK__imported__module__250804__13 = __TURBOPACK__imported__module__250804__;
22499var __TURBOPACK__imported__module__519988__14 = __TURBOPACK__imported__module__519988__;
22500var __TURBOPACK__imported__module__304661__14 = __TURBOPACK__imported__module__304661__;
22501var __TURBOPACK__imported__module__776710__4 = __TURBOPACK__imported__module__776710__;
22502var __TURBOPACK__imported__module__453288__5 = __TURBOPACK__imported__module__453288__;
22503var __TURBOPACK__imported__module__10008__4 = __TURBOPACK__imported__module__10008__;
22504var __TURBOPACK__imported__module__728469__2 = __TURBOPACK__imported__module__728469__;
22505var __TURBOPACK__imported__module__602309__1 = __TURBOPACK__imported__module__602309__;
22506// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/traceData.js [app-client] (ecmascript)
22507;
22508var __TURBOPACK__imported__module__301263__1 = __TURBOPACK__imported__module__301263__;
22509var __TURBOPACK__imported__module__923288__2 = __TURBOPACK__imported__module__923288__;
22510var __TURBOPACK__imported__module__250804__14 = __TURBOPACK__imported__module__250804__;
22511var __TURBOPACK__imported__module__662537__1 = __TURBOPACK__imported__module__662537__;
22512var __TURBOPACK__imported__module__272598__19 = __TURBOPACK__imported__module__272598__;
22513var __TURBOPACK__imported__module__304661__15 = __TURBOPACK__imported__module__304661__;
22514var __TURBOPACK__imported__module__10008__5 = __TURBOPACK__imported__module__10008__;
22515var __TURBOPACK__imported__module__728469__3 = __TURBOPACK__imported__module__728469__;
22516var __TURBOPACK__imported__module__473753__4 = __TURBOPACK__imported__module__473753__;
22517var __TURBOPACK__imported__module__602309__2 = __TURBOPACK__imported__module__602309__;
22518var __TURBOPACK__imported__module__132584__2 = __TURBOPACK__imported__module__132584__;
22519;
22520;
22521;
22522;
22523;
22524;
22525;
22526;
22527;
22528;
22529;
22530function getTraceData() {
22531    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
22532    const client = options.client || (0, __TURBOPACK__imported__module__250804__14["getClient"])();
22533    if (!(0, __TURBOPACK__imported__module__662537__1["isEnabled"])() || !client) {
22534        return {};
22535    }
22536    const carrier = (0, __TURBOPACK__imported__module__923288__2["getMainCarrier"])();
22537    const acs = (0, __TURBOPACK__imported__module__301263__1["getAsyncContextStrategy"])(carrier);
22538    if (acs.getTraceData) {
22539        return acs.getTraceData(options);
22540    }
22541    const scope = options.scope || (0, __TURBOPACK__imported__module__250804__14["getCurrentScope"])();
22542    const span = options.span || (0, __TURBOPACK__imported__module__304661__15["getActiveSpan"])();
22543    const isTwpPlaceholder = (0, __TURBOPACK__imported__module__728469__3["spanIsNonRecordingSpan"])(span) && !(0, __TURBOPACK__imported__module__10008__5["hasSpansEnabled"])(client.getOptions());
22544    if (!span && (0, __TURBOPACK__imported__module__250804__14["hasExternalPropagationContext"])()) {
22545        return {};
22546    }
22547    const sentryTrace = span && !isTwpPlaceholder ? (0, __TURBOPACK__imported__module__304661__15["spanToTraceHeader"])(span) : scopeToTraceHeader(scope);
22548    const dsc = span ? (0, __TURBOPACK__imported__module__473753__4["getDynamicSamplingContextFromSpan"])(span) : (0, __TURBOPACK__imported__module__473753__4["getDynamicSamplingContextFromScope"])(client, scope);
22549    const baggage = (0, __TURBOPACK__imported__module__602309__2["dynamicSamplingContextToSentryBaggageHeader"])(dsc);
22550    const isValidSentryTraceHeader = __TURBOPACK__imported__module__132584__2["TRACEPARENT_REGEXP"].test(sentryTrace);
22551    if (!isValidSentryTraceHeader) {
22552        __TURBOPACK__imported__module__272598__19["debug"].warn("Invalid sentry-trace data. Cannot generate trace data");
22553        return {};
22554    }
22555    const traceData = {
22556        "sentry-trace": sentryTrace,
22557        baggage
22558    };
22559    if (options.propagateTraceparent) {
22560        traceData.traceparent = span && !isTwpPlaceholder ? (0, __TURBOPACK__imported__module__304661__15["spanToTraceparentHeader"])(span) : scopeToTraceparentHeader(scope);
22561    }
22562    return traceData;
22563}
22564function scopeToTraceHeader(scope) {
22565    const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();
22566    return (0, __TURBOPACK__imported__module__132584__2["generateSentryTraceHeader"])(traceId, propagationSpanId, sampled);
22567}
22568function scopeToTraceparentHeader(scope) {
22569    const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();
22570    return (0, __TURBOPACK__imported__module__132584__2["generateTraceparentHeader"])(traceId, propagationSpanId, sampled);
22571}
22572;
22573;
22574;
22575;
22576;
22577;
22578;
22579;
22580;
22581;
22582;
22583;
22584;
22585;
22586function instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeaders, spans, spanOriginOrOptions) {
22587    if (!handlerData.fetchData) {
22588        return void 0;
22589    }
22590    const { method, url } = handlerData.fetchData;
22591    const shouldCreateSpanResult = (0, __TURBOPACK__imported__module__10008__4["hasSpansEnabled"])() && shouldCreateSpan(url);
22592    if (handlerData.endTimestamp) {
22593        const spanId = handlerData.fetchData.__span;
22594        if (!spanId) return;
22595        const span2 = spans[spanId];
22596        if (span2) {
22597            if (shouldCreateSpanResult) {
22598                endSpan(span2, handlerData);
22599                _callOnRequestSpanEnd(span2, handlerData, spanOriginOrOptions);
22600            }
22601            delete spans[spanId];
22602        }
22603        return void 0;
22604    }
22605    const { spanOrigin = "auto.http.browser", propagateTraceparent = false } = typeof spanOriginOrOptions === "object" ? spanOriginOrOptions : {
22606        spanOrigin: spanOriginOrOptions
22607    };
22608    const client = (0, __TURBOPACK__imported__module__250804__13["getClient"])();
22609    const hasParent = !!(0, __TURBOPACK__imported__module__304661__14["getActiveSpan"])();
22610    const shouldEmitSpan = hasParent || !!client && hasSpanStreamingEnabled(client);
22611    const span = shouldCreateSpanResult && shouldEmitSpan ? startInactiveSpan(getSpanStartOptions(url, method, spanOrigin)) : new __TURBOPACK__imported__module__728469__2["SentryNonRecordingSpan"]();
22612    const spanForTraceHeaders = spanIsIgnored(span) && hasParent ? void 0 : span;
22613    if (shouldCreateSpanResult && !shouldEmitSpan) {
22614        client === null || client === void 0 ? void 0 : client.re
22614cordDroppedEvent("no_parent_span", "span");
22615    }
22616    handlerData.fetchData.__span = span.spanContext().spanId;
22617    spans[span.spanContext().spanId] = span;
22618    if (shouldAttachHeaders(handlerData.fetchData.url)) {
22619        const request = handlerData.args[0];
22620        const options = {
22621            ...handlerData.args[1] || {}
22622        };
22623        const headers = _INTERNAL_getTracingHeadersForFetchRequest(request, options, // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),
22624        // we do not want to use the span as base for the trace headers,
22625        // which means that the headers will be generated from the scope and the sampling decision is deferred
22626        (0, __TURBOPACK__imported__module__10008__4["hasSpansEnabled"])() && shouldEmitSpan ? spanForTraceHeaders : void 0, propagateTraceparent);
22627        if (headers) {
22628            handlerData.args[1] = options;
22629            options.headers = headers;
22630        }
22631    }
22632    if (client) {
22633        const fetchHint = {
22634            input: handlerData.args,
22635            response: handlerData.response,
22636            startTimestamp: handlerData.startTimestamp,
22637            endTimestamp: handlerData.endTimestamp
22638        };
22639        client.emit("beforeOutgoingRequestSpan", span, fetchHint);
22640    }
22641    return span;
22642}
22643function _callOnRequestSpanEnd(span, handlerData, spanOriginOrOptions) {
22644    var _handlerData_response;
22645    const onRequestSpanEnd = typeof spanOriginOrOptions === "object" && spanOriginOrOptions !== null ? spanOriginOrOptions.onRequestSpanEnd : void 0;
22646    onRequestSpanEnd === null || onRequestSpanEnd === void 0 ? void 0 : onRequestSpanEnd(span, {
22647        headers: (_handlerData_response = handlerData.response) === null || _handlerData_response === void 0 ? void 0 : _handlerData_response.headers,
22648        error: handlerData.error
22649    });
22650}
22651function _INTERNAL_getTracingHeadersForFetchRequest(request, fetchOptionsObj, span, propagateTraceparent) {
22652    const traceHeaders = getTraceData({
22653        span,
22654        propagateTraceparent
22655    });
22656    const sentryTrace = traceHeaders["sentry-trace"];
22657    const baggage = traceHeaders.baggage;
22658    const traceparent = traceHeaders.traceparent;
22659    if (!sentryTrace) {
22660        return void 0;
22661    }
22662    const originalHeaders = fetchOptionsObj.headers || ((0, __TURBOPACK__imported__module__453288__5["isRequest"])(request) ? request.headers : void 0);
22663    if (!originalHeaders) {
22664        return {
22665            "sentry-trace": sentryTrace,
22666            ...baggage && {
22667                baggage
22668            },
22669            ...traceparent && {
22670                traceparent
22671            }
22672        };
22673    } else if (isHeaders(originalHeaders)) {
22674        const newHeaders = new Headers(originalHeaders);
22675        if (!newHeaders.get("sentry-trace")) {
22676            newHeaders.set("sentry-trace", sentryTrace);
22677        }
22678        if (propagateTraceparent && traceparent && !newHeaders.get("traceparent")) {
22679            newHeaders.set("traceparent", traceparent);
22680        }
22681        if (baggage) {
22682            const prevBaggageHeader = newHeaders.get("baggage");
22683            if (!prevBaggageHeader) {
22684                newHeaders.set("baggage", baggage);
22685            } else if (!baggageHeaderHasSentryBaggageValues(prevBaggageHeader)) {
22686                newHeaders.set("baggage", "".concat(prevBaggageHeader, ",").concat(baggage));
22687            }
22688        }
22689        return newHeaders;
22690    } else if (isHeadersInitTupleArray(originalHeaders)) {
22691        const newHeaders = [
22692            ...originalHeaders
22693        ];
22694        if (!newHeaders.find((header)=>header[0] === "sentry-trace")) {
22695            newHeaders.push([
22696                "sentry-trace",
22697                sentryTrace
22698            ]);
22699        }
22700        if (propagateTraceparent && traceparent && !newHeaders.find((header)=>header[0] === "traceparent")) {
22701            newHeaders.push([
22702                "traceparent",
22703                traceparent
22704            ]);
22705        }
22706        const prevBaggageHeaderWithSentryValues = originalHeaders.find((header)=>header[0] === "baggage" && typeof header[1] === "string" && baggageHeaderHasSentryBaggageValues(header[1]));
22707        if (baggage && !prevBaggageHeaderWithSentryValues) {
22708            newHeaders.push([
22709                "baggage",
22710                baggage
22711            ]);
22712        }
22713        return newHeaders;
22714    } else {
22715        const existingSentryTraceHeader = "sentry-trace" in originalHeaders ? originalHeaders["sentry-trace"] : void 0;
22716        const existingTraceparentHeader = "traceparent" in originalHeaders ? originalHeaders.traceparent : void 0;
22717        const existingBaggageHeader = "baggage" in originalHeaders ? originalHeaders.baggage : void 0;
22718        const newBaggageHeaders = existingBaggageHeader ? Array.isArray(existingBaggageHeader) ? [
22719            ...existingBaggageHeader
22720        ] : [
22721            existingBaggageHeader
22722        ] : [];
22723        const prevBaggageHeaderWithSentryValues = existingBaggageHeader && (Array.isArray(existingBaggageHeader) ? existingBaggageHeader.find((headerItem)=>baggageHeaderHasSentryBaggageValues(headerItem)) : baggageHeaderHasSentryBaggageValues(existingBaggageHeader));
22724        if (baggage && !prevBaggageHeaderWithSentryValues) {
22725            newBaggageHeaders.push(baggage);
22726        }
22727        const newHeaders = Object.assign({}, originalHeaders, {
22728            "sentry-trace": existingSentryTraceHeader !== null && existingSentryTraceHeader !== void 0 ? existingSentryTraceHeader : sentryTrace,
22729            ...newBaggageHeaders.length > 0 && {
22730                baggage: newBaggageHeaders.join(",")
22731            }
22732        });
22733        if (propagateTraceparent && traceparent && !existingTraceparentHeader) {
22734            newHeaders.traceparent = traceparent;
22735        }
22736        return newHeaders;
22737    }
22738}
22739function endSpan(span, handlerData) {
22740    if (handlerData.response) {
22741        var _handlerData_response_headers, _handlerData_response;
22742        (0, __TURBOPACK__imported__module__776710__4["setHttpStatus"])(span, handlerData.response.status);
22743        const contentLength = (_handlerData_response = handlerData.response) === null || _handlerData_response === void 0 ? void 0 : (_handlerData_response_headers = _handlerData_response.headers) === null || _handlerData_response_headers === void 0 ? void 0 : _handlerData_response_headers.get("content-length");
22744        if (contentLength) {
22745            const contentLengthNum = parseInt(contentLength);
22746            if (contentLengthNum > 0) {
22747                span.setAttribute("http.response_content_length", contentLengthNum);
22748            }
22749        }
22750    } else if (handlerData.error) {
22751        span.setStatus({
22752            code: __TURBOPACK__imported__module__776710__4["SPAN_STATUS_ERROR"],
22753            message: "internal_error"
22754        });
22755    }
22756    span.end();
22757}
22758function baggageHeaderHasSentryBaggageValues(baggageHeader) {
22759    if (typeof baggageHeader !== "string") {
22760        return false;
22761    }
22762    return baggageHeader.split(",").some((baggageEntry)=>baggageEntry.trim().startsWith(__TURBOPACK__imported__module__602309__1["SENTRY_BAGGAGE_KEY_PREFIX"]));
22763}
22764function isHeaders(headers) {
22765    return typeof Headers !== "undefined" && (0, __TURBOPACK__imported__module__453288__5["isInstanceOf"])(headers, Headers);
22766}
22767function isHeadersInitTupleArray(headers) {
22768    if (!Array.isArray(headers)) {
22769        return false;
22770    }
22771    return headers.every((item)=>Array.isArray(item) && item.length === 2 && typeof item[0] === "string");
22772}
22773function getSpanStartOptions(url, method, spanOrigin) {
22774    if (url.startsWith("data:")) {
22775        const sanitizedUrl2 = stripDataUrlContent(url);
22776        return {
22777            name: "".concat(method, " ").concat(sanitizedUrl2),
22778            attributes: getFetchSpanAttributes(url, void 0, method, spanOrigin)
22779        };
22780    }
22781    const parsedUrl = parseStringToURLObject(url);
22782    const sanitizedUrl = parsedUrl ? getSanitizedUrlStringFromUrlObject(parsedUrl) : url;
22783    return {
22784        name: "".concat(method, " ").concat(sanitizedUrl),
22785        attributes: getFetchSpanAttributes(url, parsedUrl, method, spanOrigin)
22786    };
22787}
22788function getFetchSpanAttributes(url, parsedUrl, method, spanOrigin) {
22789    const attributes = {
22790        url: stripDataUrlContent(url),
22791        type: "fetch",
22792        "http.method": method,
22793        [__TURBOPACK__imported__module__519988__14["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: spanOrigin,
22794        [__TURBOPACK__imported__module__519988__14["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "http.client"
22795    };
22796    if (parsedUrl) {
22797        if (!isURLObjectRelative(parsedUrl)) {
22798            attributes[ws] = stripDataUrlContent(parsedUrl.href);
22799            attributes[Yu] = stripDataUrlContent(parsedUrl.href);
22800            attributes["server.address"] = parsedUrl.host;
22801        }
22802        if (parsedUrl.search) {
22803            attributes["http.query"] = parsedUrl.search;
22804        }
22805        if (parsedUrl.hash) {
22806            attributes["http.fragment"] = parsedUrl.hash;
22807        }
22808    }
22809    return attributes;
22810}
22811;
22812var __TURBOPACK__imported__module__304661__16 = __TURBOPACK__imported__module__304661__;
22813var __TURBOPACK__imported__module__605394__11 = __TURBOPACK__imported__module__605394__;
22814var __TURBOPACK__imported__module__10008__6 = __TURBOPACK__imported__module__10008__;
22815var __TURBOPACK__imported__module__776710__5 = __TURBOPACK__imported__module__776710__;
22816var __TURBOPACK__imported__module__250804__15 = __TURBOPACK__imported__module__250804__;
22817var __TURBOPACK__imported__module__519988__15 = __TURBOPACK__imported__module__519988__;
22818var __TURBOPACK__imported__module__728469__4 = __TURBOPACK__imported__module__728469__;
22819var __TURBOPACK__imported__module__821593__2 = __TURBOPACK__imported__module__821593__;
22820// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/instrument/xhr.js [app-client] (ecmascript)
22821;
22822var __TURBOPACK__imported__module__605394__12 = __TURBOPACK__imported__module__605394__;
22823var __TURBOPACK__imported__module__453288__6 = __TURBOPACK__imported__module__453288__;
22824;
22825;
22826const SENTRY_XHR_DATA_KEY = "__sentry_xhr_v3__";
22827function addXhrInstrumentationHandler(handler) {
22828    const type = "xhr";
22829    addHandler(type, handler);
22830    maybeInstrument(type, instrumentXHR);
22831}
22832function instrumentXHR() {
22833    if (!WINDOW3.XMLHttpRequest) {
22834        return;
22835    }
22836    const xhrproto = XMLHttpRequest.prototype;
22837    xhrproto.open = new Proxy(xhrproto.open, {
22838        apply (originalOpen, xhrOpenThisArg, xhrOpenArgArray) {
22839            const virtualError = new Error();
22840            const startTimestamp = (0, __TURBOPACK__imported__module__605394__12["timestampInSeconds"])() * 1e3;
22841            const method = (0, __TURBOPACK__imported__module__453288__6["isString"])(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : void 0;
22842            const url = parseXhrUrlArg(xhrOpenArgArray[1]);
22843            if (!method || !url) {
22844                return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);
22845            }
22846            xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {
22847                method,
22848                url,
22849                request_headers: {}
22850            };
22851            if (method === "POST" && url.match(/sentry_key/)) {
22852                xhrOpenThisArg.__sentry_own_request__ = true;
22853            }
22854            const onreadystatechangeHandler = ()=>{
22855                const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];
22856                if (!xhrInfo) {
22857                    return;
22858                }
22859                if (xhrOpenThisArg.readyState === 4) {
22860                    try {
22861                        xhrInfo.status_code = xhrOpenThisArg.status;
22862                    } catch (unused) {}
22863                    const handlerData = {
22864                        endTimestamp: (0, __TURBOPACK__imported__module__605394__12["timestampInSeconds"])() * 1e3,
22865                        startTimestamp,
22866                        xhr: xhrOpenThisArg,
22867                        virtualError
22868                    };
22869                    triggerHandlers("xhr", handlerData);
22870                    xhrOpenThisArg.removeEventListener("readystatechange", onreadystatechangeHandler);
22871                }
22872            };
22873            if ("onreadystatechange" in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === "function") {
22874                xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {
22875                    apply (originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {
22876                        onreadystatechangeHandler();
22877                        return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);
22878                    }
22879                });
22880            } else {
22881                xhrOpenThisArg.addEventListener("readystatechange", onreadystatechangeHandler);
22882            }
22883            xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {
22884                apply (originalSetRequestHeader, setRequestHeaderThisArg, setRequestHeaderArgArray) {
22885                    const [header, value] = setRequestHeaderArgArray;
22886                    const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];
22887                    if (xhrInfo && (0, __TURBOPACK__imported__module__453288__6["isString"])(header) && (0, __TURBOPACK__imported__module__453288__6["isString"])(value)) {
22888                        xhrInfo.request_headers[header.toLowerCase()] = value;
22889                    }
22890                    return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);
22891                }
22892            });
22893            return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);
22894        }
22895    });
22896    xhrproto.send = new Proxy(xhrproto.send, {
22897        apply (originalSend, sendThisArg, sendArgArray) {
22898            const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];
22899            if (!sentryXhrData) {
22900                return originalSend.apply(sendThisArg, sendArgArray);
22901            }
22902            if (sendArgArray[0] !== void 0) {
22903                sentryXhrData.body = sendArgArray[0];
22904            }
22905            const handlerData = {
22906                startTimestamp: (0, __TURBOPACK__imported__module__605394__12["timestampInSeconds"])() * 1e3,
22907                xhr: sendThisArg
22908            };
22909            triggerHandlers("xhr", handlerData);
22910            return originalSend.apply(sendThisArg, sendArgArray);
22911        }
22912    });
22913}
22914function parseXhrUrlArg(url) {
22915    if ((0, __TURBOPACK__imported__module__453288__6["isString"])(url)) {
22916        return url;
22917    }
22918    try {
22919        return url.toString();
22920    } catch (unused) {}
22921    return void 0;
22922}
22923;
22924// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/networkUtils.js [app-client] (ecmascript)
22925;
22926var __TURBOPACK__imported__module__272598__20 = __TURBOPACK__imported__module__272598__;
22927;
22928;
22929const ORIGINAL_REQ_BODY = /* @__PURE__ */ Symbol.for("sentry__originalRequestBody");
22930function serializeFormData(formData) {
22931    return new URLSearchParams(formData).toString();
22932}
22933function getBodyString(body) {
22934    let _debug = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : __TURBOPACK__imported__module__272598__20["debug"];
22935    try {
22936        if (typeof body === "string") {
22937            return [
22938                body
22939            ];
22940        }
22941        if (body instanceof URLSearchParams) {
22942            return [
22943                body.toString()
22944            ];
22945        }
22946        if (body instanceof FormData) {
22947            return [
22948                serializeFormData(body)
22949            ];
22950        }
22951        if (!body) {
22952            return [
22953                void 0
22954            ];
22955        }
22956    } catch (error) {
22957        DEBUG_BUILD && _debug.error(error, "Failed to serialize body", body);
22958        return [
22959            void 0,
22960            "BODY_PARSE_ERROR"
22961        ];
22962    }
22963    DEBUG_BUILD && _debug.log("Skipping network body because of body type", body);
22964    return [
22965        void 0,
22966        "UNPARSEABLE_BODY_TYPE"
22967    ];
22968}
22969function getFetchRequestArgBody() {
22970    let fetchArgs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
22971    if (fetchArgs.length >= 2 && fetchArgs[1] && typeof fetchArgs[1] === "object" && "body" in fetchArgs[1]) {
22972        return fetchArgs[1].body;
22973    }
22974    if (fetchArgs.length >= 1 && fetchArgs[0] instanceof Request) {
22975        const request = fetchArgs[0];
22976        const originalBody = request[ORIGINAL_REQ_BODY];
22977        if (originalBody !== void 0) {
22978            return originalBody;
22979        }
22980        return void 0;
22981    }
22982    return void 0;
22983}
22984function parseXhrResponseHeaders(xhr) {
22985    let headers;
22986    try {
22987        headers = xhr.getAllResponseHeaders();
22988    } catch (error) {
22989        DEBUG_BUILD && __TURBOPACK__imported__module__272598__20["debug"].error(error, "Failed to get xhr response headers", xhr);
22990        return {};
22991    }
22992    if (!headers) {
22993        return {};
22994    }
22995    return headers.split("\r\n").reduce((acc, line)=>{
22996        const [key, value] = line.split(": ");
22997        if (value) {
22998            acc[key.toLowerCase()] = value;
22999        }
23000        return acc;
23001    }, {});
23002}
23003;
23004// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/tracing/utils.js [app-client] (ecmascript)
23005;
23006;
23007function baggageHeaderHasSentryValues(baggageHeader) {
23008    return baggageHeader.split(",").some((value)=>value.trim().startsWith("sentry-"));
23009}
23010function getFullURL(url) {
23011    try {
23012        const parsed = new URL(url, WINDOW1.location.origin);
23013        return parsed.href;
23014    } catch (unused) {
23015        return void 0;
23016    }
23017}
23018function isPerformanceResourceTiming(entry) {
23019    return entry.entryType === "resource" && "initiatorType" in entry && typeof entry.nextHopProtocol === "string" && (entry.initiatorType === "fetch" || entry.initiatorType === "xmlhttprequest");
23020}
23021function createHeadersSafely(headers) {
23022    try {
23023        return new Headers(headers);
23024    } catch (unused) {
23025        return void 0;
23026    }
23027}
23028;
23029;
23030;
23031;
23032;
23033const defaultRequestInstrumentationOptions = {
23034    traceFetch: true,
23035    traceXHR: true,
23036    enableHTTPTimings: true,
23037    trackFetchStreamPerformance: false
23038};
23039function instrumentOutgoingRequests(client, _options) {
23040    const { traceFetch, traceXHR, shouldCreateSpanForRequest, enableHTTPTimings, tracePropagationTargets, onRequestSpanStart, onRequestSpanEnd } = {
23041        ...defaultRequestInstrumentationOptions,
23042        ..._options
23043    };
23044    const shouldCreateSpan = typeof shouldCreateSpanForRequest === "function" ? shouldCreateSpanForRequest : (_)=>true;
23045    const shouldAttachHeadersWithTargets = (url)=>shouldAttachHeaders(url, tracePropagationTargets);
23046    const spans = {};
23047    const propagateTraceparent = client.getOptions().propagateTraceparent;
23048    if (traceFetch) {
23049        addFetchInstrumentationHandler((handlerData)=>{
23050            const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans, {
23051                propagateTraceparent,
23052                onRequestSpanEnd
23053            });
23054            if (createdSpan) {
23055                const fullUrl = getFullURL(handlerData.fetchData.url);
23056                const host = fullUrl ? parseUrl(fullUrl).host : void 0;
23057                const sanitizedFullUrl = fullUrl ? stripDataUrlContent(fullUrl) : void 0;
23058                createdSpan.setAttributes({
23059                    // oxlint-disable-next-line typescript/no-deprecated
23060                    [ws]: sanitizedFullUrl,
23061                    // `url.full` must match `http.url`. Setting it here ensures parentless `http.client`
23062                    // segment spans don't get `url.full` backfilled with the host page URL (see httpContextIntegration).
23063                    [Yu]: sanitizedFullUrl,
23064                    "server.address": host
23065                });
23066                if (enableHTTPTimings) {
23067                    addHTTPTimings(createdSpan, client);
23068                }
23069                onRequestSpanStart === null || onRequestSpanStart === void 0 ? void 0 : onRequestSpanStart(createdSpan, {
23070                    headers: handlerData.headers
23071                });
23072            }
23073        });
23074    }
23075    if (traceXHR) {
23076        addXhrInstrumentationHandler((handlerData)=>{
23077            const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans, propagateTraceparent, onRequestSpanEnd);
23078            if (createdSpan) {
23079                var _handlerData_xhr___sentry_xhr_v3__;
23080                if (enableHTTPTimings) {
23081                    addHTTPTimings(createdSpan, client);
23082                }
23083                onRequestSpanStart === null || onRequestSpanStart === void 0 ? void 0 : onRequestSpanStart(createdSpan, {
23084                    headers: createHeadersSafely((_handlerData_xhr___sentry_xhr_v3__ = handlerData.xhr.__sentry_xhr_v3__) === null || _handlerData_xhr___sentry_xhr_v3__ === void 0 ? void 0 : _handlerData_xhr___sentry_xhr_v3__.request_headers)
23085                });
23086            }
23087        });
23088    }
23089}
23090const HTTP_TIMING_WAIT_MS = 300;
23091function addHTTPTimings(span, client) {
23092    const { url } = (0, __TURBOPACK__imported__module__304661__16["spanToJSON"])(span).data;
23093    if (!url || typeof url !== "string") {
23094        return;
23095    }
23096    let onEntryFound = ()=>void setTimeout(unsubscribePerformanceObsever);
23097    if (hasSpanStreamingEnabled(client)) {
23098        const originalEnd = span.end.bind(span);
23099        span.end = (endTimestamp)=>{
23100            const capturedEndTimestamp = endTimestamp !== null && endTimestamp !== void 0 ? endTimestamp : (0, __TURBOPACK__imported__module__605394__11["timestampInSeconds"])();
23101            let isEnded = false;
23102            const endSpanAndCleanup = ()=>{
23103                if (isEnded) {
23104                    return;
23105                }
23106                isEnded = true;
23107                setTimeout(unsubscribePerformanceObsever);
23108                originalEnd(capturedEndTimestamp);
23109                clearTimeout(fallbackTimeout);
23110            };
23111            onEntryFound = endSpanAndCleanup;
23112            const fallbackTimeout = setTimeout(endSpanAndCleanup, HTTP_TIMING_WAIT_MS);
23113        };
23114    }
23115    const unsubscribePerformanceObsever = addPerformanceInstrumentationHandler("resource", (param)=>{
23116        let { entries } = param;
23117        entries.forEach((entry)=>{
23118            if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {
23119                span.setAttributes(resourceTimingToSpanAttributes(entry));
23120                onEntryFound();
23121            }
23122        });
23123    });
23124}
23125function shouldAttachHeaders(targetUrl, tracePropagationTargets) {
23126    const href = getLocationHref();
23127    if (!href) {
23128        const isRelativeSameOriginRequest = !!targetUrl.match(/^\/(?!\/)/);
23129        if (!tracePropagationTargets) {
23130            return isRelativeSameOriginRequest;
23131        } else {
23132            return (0, __TURBOPACK__imported__module__821593__2["stringMatchesSomePattern"])(targetUrl, tracePropagationTargets);
23133        }
23134    } else {
23135        let resolvedUrl;
23136        let currentOrigin;
23137        try {
23138            resolvedUrl = new URL(targetUrl, href);
23139            currentOrigin = new URL(href).origin;
23140        } catch (unused) {
23141            return false;
23142        }
23143        const isSameOriginRequest = resolvedUrl.origin === currentOrigin;
23144        if (!tracePropagationTargets) {
23145            return isSameOriginRequest;
23146        } else {
23147            return (0, __TURBOPACK__imported__module__821593__2["stringMatchesSomePattern"])(resolvedUrl.toString(), tracePropagationTargets) || isSameOriginRequest && (0, __TURBOPACK__imported__module__821593__2["stringMatchesSomePattern"])(resolvedUrl.pathname, tracePropagationTargets);
23148        }
23149    }
23150}
23151function xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeaders2, spans, propagateTraceparent, onRequestSpanEnd) {
23152    const xhr = handlerData.xhr;
23153    const sentryXhrData = xhr === null || xhr === void 0 ? void 0 : xhr[SENTRY_XHR_DATA_KEY];
23154    if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {
23155        return void 0;
23156    }
23157    const { url, method } = sentryXhrData;
23158    const shouldCreateSpanResult = (0, __TURBOPACK__imported__module__10008__6["hasSpansEnabled"])() && shouldCreateSpan(url);
23159    if (handlerData.endTimestamp) {
23160        const spanId = xhr.__sentry_xhr_span_id__;
23161        if (!spanId) return;
23162        const span2 = spans[spanId];
23163        if (span2) {
23164            if (shouldCreateSpanResult && sentryXhrData.status_code !== void 0) {
23165                (0, __TURBOPACK__imported__module__776710__5["setHttpStatus"])(span2, sentryXhrData.status_code);
23166                span2.end();
23167                onRequestSpanEnd === null || onRequestSpanEnd === void 0 ? void 0 : onRequestSpanEnd(span2, {
23168                    headers: createHeadersSafely(parseXhrResponseHeaders(xhr)),
23169                    error: handlerData.error
23170                });
23171            }
23172            delete spans[spanId];
23173        }
23174        return void 0;
23175    }
23176    const fullUrl = getFullURL(url);
23177    const parsedUrl = fullUrl ? parseUrl(fullUrl) : parseUrl(url);
23178    const sanitizedFullUrl = fullUrl ? stripDataUrlContent(fullUrl) : void 0;
23179    const urlForSpanName = stripDataUrlContent(stripUrlQueryAndFragment(url));
23180    const client = (0, __TURBOPACK__imported__module__250804__15["getClient"])();
23181    const hasParent = !!(0, __TURBOPACK__imported__module__304661__16["getActiveSpan"])();
23182    const shouldEmitSpan = hasParent || !!client && hasSpanStreamingEnabled(client);
23183    const span = shouldCreateSpanResult && shouldEmitSpan ? startInactiveSpan({
23184        name: "".concat(method, " ").concat(urlForSpanName),
23185        attributes: {
23186            url: stripDataUrlContent(url),
23187            type: "xhr",
23188            "http.method": method,
23189            "http.url": sanitizedFullUrl,
23190            // `url.full` must match `http.url`. Setting it here ensures parentless `http.client`
23191            // segment spans don't get `url.full` backfilled with the host page URL (see httpContextIntegration).
23192            [Yu]: sanitizedFullUrl,
23193            "server.address": parsedUrl === null || parsedUrl === void 0 ? void 0 : parsedUrl.host,
23194            [__TURBOPACK__imported__module__519988__15["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.http.browser",
23195            [__TURBOPACK__imported__module__519988__15["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "http.client",
23196            ...(parsedUrl === null || parsedUrl === void 0 ? void 0 : parsedUrl.search) && {
23197                "http.query": parsedUrl === null || parsedUrl === void 0 ? void 0 : parsedUrl.search
23198            },
23199            ...(parsedUrl === null || parsedUrl === void 0 ? void 0 : parsedUrl.hash) && {
23200                "http.fragment": parsedUrl === null || parsedUrl === void 0 ? void 0 : parsedUrl.hash
23201            }
23202        }
23203    }) : new __TURBOPACK__imported__module__728469__4["SentryNonRecordingSpan"]();
23204    const spanForTraceHeaders = spanIsIgnored(span) && hasParent ? void 0 : span;
23205    if (shouldCreateSpanResult && !shouldEmitSpan) {
23206        client === null || client === void 0 ? void 0 : client.recordDroppedEvent("no_parent_span", "span");
23207    }
23208    xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;
23209    spans[xhr.__sentry_xhr_span_id__] = span;
23210    if (shouldAttachHeaders2(url)) {
23211        addTracingHeadersToXhrRequest(xhr, // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),
23212        // we do not want to use the span as base for the trace headers,
23213        // which means that the headers will be generated from the scope and the sampling decision is deferred
23214        (0, __TURBOPACK__imported__module__10008__6["hasSpansEnabled"])() && shouldEmitSpan ? spanForTraceHeaders : void 0, propagateTraceparent);
23215    }
23216    if (client) {
23217        client.emit("beforeOutgoingRequestSpan", span, handlerData);
23218    }
23219    return span;
23220}
23221function addTracingHeadersToXhrRequest(xhr, span, propagateTraceparent) {
23222    const { "sentry-trace": sentryTrace, baggage, traceparent } = getTraceData({
23223        span,
23224        propagateTraceparent
23225    });
23226    if (sentryTrace) {
23227        setHeaderOnXhr(xhr, sentryTrace, baggage, traceparent);
23228    }
23229}
23230function setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader, traceparentHeader) {
23231    var _xhr___sentry_xhr_v3__;
23232    const originalHeaders = (_xhr___sentry_xhr_v3__ = xhr.__sentry_xhr_v3__) === null || _xhr___sentry_xhr_v3__ === void 0 ? void 0 : _xhr___sentry_xhr_v3__.request_headers;
23233    if ((originalHeaders === null || originalHeaders === void 0 ? void 0 : originalHeaders["sentry-trace"]) || !xhr.setRequestHeader) {
23234        return;
23235    }
23236    try {
23237        xhr.setRequestHeader("sentry-trace", sentryTraceHeader);
23238        if (traceparentHeader && !(originalHeaders === null || originalHeaders === void 0 ? void 0 : originalHeaders["traceparent"])) {
23239            xhr.setRequestHeader("traceparent", traceparentHeader);
23240        }
23241        if (sentryBaggageHeader) {
23242            const originalBaggageHeader = originalHeaders === null || originalHeaders === void 0 ? void 0 : originalHeaders["baggage"];
23243            if (!originalBaggageHeader || !baggageHeaderHasSentryValues(originalBaggageHeader)) {
23244                xhr.setRequestHeader("baggage", sentryBaggageHeader);
23245            }
23246        }
23247    } catch (unused) {}
23248}
23249;
23250;
23251;
23252;
23253;
23254;
23255;
23256;
23257;
23258;
23259;
23260const BROWSER_TRACING_INTEGRATION_ID = "BrowserTracing";
23261const BOT_USER_AGENT_RE = /Googlebot|Google-InspectionTool|Storebot-Google|Bingbot|Slurp|DuckDuckBot|Baiduspider|YandexBot|Facebot|facebookexternalhit|LinkedInBot|Twitterbot|Applebot/i;
23262function isBotUserAgent() {
23263    const nav = WINDOW1.navigator;
23264    if (!(nav === null || nav === void 0 ? void 0 : nav.userAgent)) {
23265        return false;
23266    }
23267    return BOT_USER_AGENT_RE.test(nav.userAgent);
23268}
23269const DEFAULT_BROWSER_TRACING_OPTIONS = {
23270    ...TRACING_DEFAULTS,
23271    instrumentNavigation: true,
23272    instrumentPageLoad: true,
23273    markBackgroundSpan: true,
23274    enableLongTask: true,
23275    enableLongAnimationFrame: true,
23276    enableInp: true,
23277    ignoreResourceSpans: [],
23278    ignorePerformanceApiSpans: [],
23279    detectRedirects: true,
23280    linkPreviousTrace: "in-memory",
23281    consistentTraceSampling: false,
23282    enableReportPageLoaded: false,
23283    _experiments: {},
23284    ...defaultRequestInstrumentationOptions
23285};
23286const browserTracingIntegration = function() {
23287    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
23288    if ("enableElementTiming" in options) {
23289        (0, __TURBOPACK__imported__module__272598__7["consoleSandbox"])(()=>{
23290            console.warn("[Sentry] `enableElementTiming` is deprecated and no longer has any effect. Use the standalone `elementTimingIntegration` instead.");
23291        });
23292    }
23293    const latestRoute = {
23294        name: void 0,
23295        source: void 0
23296    };
23297    const optionalWindowDocument = WINDOW1.document;
23298    const { enableInp, enableLongTask, enableLongAnimationFrame, _experiments: { enableInteractions, enableStandaloneClsSpans, enableStandaloneLcpSpans }, beforeStartSpan, idleTimeout, finalTimeout, childSpanTimeout, markBackgroundSpan, traceFetch, traceXHR, // eslint-disable-next-line typescript/no-deprecated
23299    trackFetchStreamPerformance, shouldCreateSpanForRequest, enableHTTPTimings, ignoreResourceSpans, ignorePerformanceApiSpans, instrumentPageLoad, instrumentNavigation, detectRedirects, linkPreviousTrace, consistentTraceSampling, enableReportPageLoaded, onRequestSpanStart, onRequestSpanEnd } = {
23300        ...DEFAULT_BROWSER_TRACING_OPTIONS,
23301        ...options
23302    };
23303    const _isBot = isBotUserAgent();
23304    let lastInteractionTimestamp;
23305    let _pageloadSpan;
23306    function _createRouteSpan(client, startSpanOptions) {
23307        let makeActive = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, url = arguments.length > 3 ? arguments[3] : void 0;
23308        const isPageloadSpan = startSpanOptions.op === "pageload";
23309        const initialSpanName = startSpanOptions.name;
23310        const finalStartSpanOptions = beforeStartSpan ? beforeStartSpan(startSpanOptions) : startSpanOptions;
23311        const urlObject = parseStringToURLObject(url || getLocationHref());
23312        const attributes = {
23313            ...(urlObject === null || urlObject === void 0 ? void 0 : urlObject.pathname) && {
23314                [Vu]: urlObject.pathname
23315            },
23316            ...urlObject && !isURLObjectRelative(urlObject) && {
23317                [Yu]: urlObject.href
23318            },
23319            ...finalStartSpanOptions.attributes
23320        };
23321        if (initialSpanName !== finalStartSpanOptions.name) {
23322            attributes[__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]] = "custom";
23323        }
23324        finalStartSpanOptions.attributes = attributes;
23325        if (!makeActive) {
23326            const now = (0, __TURBOPACK__imported__module__605394__3["dateTimestampInSeconds"])();
23327            startInactiveSpan({
23328                ...finalStartSpanOptions,
23329                startTime: now
23330            }).end(now);
23331            return;
23332        }
23333        latestRoute.name = finalStartSpanOptions.name;
23334        latestRoute.source = attributes[__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]];
23335        const idleSpan = startIdleSpan(finalStartSpanOptions, {
23336            idleTimeout,
23337            finalTimeout,
23338            childSpanTimeout,
23339            // should wait for finish signal if it's a pageload transaction
23340            disableAutoFinish: isPageloadSpan,
23341            beforeSpanEnd: (span)=>{
23342                addPerformanceEntries(span, {
23343                    ignoreResourceSpans,
23344                    ignorePerformanceApiSpans,
23345                    spanStreamingEnabled: hasSpanStreamingEnabled(client)
23346                });
23347                setActiveIdleSpan(client, void 0);
23348                const scope = (0, __TURBOPACK__imported__module__250804__4["getCurrentScope"])();
23349                const oldPropagationContext = scope.getPropagationContext();
23350                scope.setPropagationContext({
23351                    ...oldPropagationContext,
23352                    traceId: idleSpan.spanContext().traceId,
23353                    sampled: (0, __TURBOPACK__imported__module__304661__7["spanIsSampled"])(idleSpan),
23354                    dsc: (0, __TURBOPACK__imported__module__473753__3["getDynamicSamplingContextFromSpan"])(span)
23355                });
23356                if (isPageloadSpan) {
23357                    _pageloadSpan = void 0;
23358                }
23359            },
23360            trimIdleSpanEndTimestamp: !enableReportPageLoaded
23361        });
23362        if (isPageloadSpan && enableReportPageLoaded) {
23363            _pageloadSpan = idleSpan;
23364        }
23365        setActiveIdleSpan(client, idleSpan);
23366        function emitFinish() {
23367            if (optionalWindowDocument && [
23368                "interactive",
23369                "complete"
23370            ].includes(optionalWindowDocument.readyState)) {
23371                client.emit("idleSpanEnableAutoFinish", idleSpan);
23372                optionalWindowDocument.removeEventListener("readystatechange", emitFinish);
23373            }
23374        }
23375        if (isPageloadSpan && !enableReportPageLoaded && optionalWindowDocument) {
23376            optionalWindowDocument.addEventListener("readystatechange", emitFinish);
23377            emitFinish();
23378        }
23379    }
23380    return {
23381        name: BROWSER_TRACING_INTEGRATION_ID,
23382        setup (client) {
23383            var _PerformanceObserver_supportedEntryTypes;
23384            if (_isBot) {
23385                DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__7["debug"].log("[Tracing] Skipping browserTracingIntegration setup for bot user agent.");
23386                return;
23387            }
23388            registerSpanErrorInstrumentation();
23389            if (enableLongAnimationFrame && __TURBOPACK__imported__module__225304__5["GLOBAL_OBJ"].PerformanceObserver && ((_PerformanceObserver_supportedEntryTypes = PerformanceObserver.supportedEntryTypes) === null || _PerformanceObserver_supportedEntryTypes === void 0 ? void 0 : _PerformanceObserver_supportedEntryTypes.includes("long-animation-frame"))) {
23390                startTrackingLongAnimationFrames();
23391            } else if (enableLongTask) {
23392                startTrackingLongTasks();
23393            }
23394            if (enableInteractions) {
23395                startTrackingInteractions();
23396            }
23397            if (detectRedirects && optionalWindowDocument) {
23398                const interactionHandler = ()=>{
23399                    lastInteractionTimestamp = (0, __TURBOPACK__imported__module__605394__3["timestampInSeconds"])();
23400                };
23401                addEventListener("click", interactionHandler, {
23402                    capture: true
23403                });
23404                addEventListener("keydown", interactionHandler, {
23405                    capture: true,
23406                    passive: true
23407                });
23408            }
23409            function maybeEndActiveSpan() {
23410                const activeSpan = getActiveIdleSpan(client);
23411                if (activeSpan && !(0, __TURBOPACK__imported__module__304661__7["spanToJSON"])(activeSpan).timestamp) {
23412                    DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__7["debug"].log("[Tracing] Finishing current active span with op: ".concat((0, __TURBOPACK__imported__module__304661__7["spanToJSON"])(activeSpan).op));
23413                    activeSpan.setAttribute(__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON"], "cancelled");
23414                    activeSpan.end();
23415                }
23416            }
23417            client.on("startNavigationSpan", (startSpanOptions, navigationOptions)=>{
23418                if ((0, __TURBOPACK__imported__module__250804__4["getClient"])() !== client) {
23419                    return;
23420                }
23421                if (navigationOptions === null || navigationOptions === void 0 ? void 0 : navigationOptions.isRedirect) {
23422                    DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__7["debug"].warn("[Tracing] Detected redirect, navigation span will not be the root span, but a child span.");
23423                    _createRouteSpan(client, {
23424                        op: "navigation.redirect",
23425                        ...startSpanOptions
23426                    }, false, navigationOptions.url);
23427                    return;
23428                }
23429                lastInteractionTimestamp = void 0;
23430                maybeEndActiveSpan();
23431                const scope = (0, __TURBOPACK__imported__module__250804__4["getCurrentScope"])();
23432                scope.setPropagationContext({
23433                    traceId: (0, __TURBOPACK__imported__module__373382__2["generateTraceId"])(),
23434                    sampleRand: Math.random(),
23435                    propagationSpanId: (0, __TURBOPACK__imported__module__10008__3["hasSpansEnabled"])() ? void 0 : (0, __TURBOPACK__imported__module__373382__2["generateSpanId"])()
23436                });
23437                scope.setSDKProcessingMetadata({
23438                    normalizedRequest: void 0
23439                });
23440                _createRouteSpan(client, {
23441                    op: "navigation",
23442                    ...startSpanOptions,
23443                    // Navigation starts a new trace and is NOT parented under any active interaction (e.g. ui.action.click)
23444                    parentSpan: null,
23445                    forceTransaction: true
23446                }, true, navigationOptions === null || navigationOptions === void 0 ? void 0 : navigationOptions.url);
23447            });
23448            client.on("startPageLoadSpan", function(startSpanOptions) {
23449                let traceOptions = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
23450                if ((0, __TURBOPACK__imported__module__250804__4["getClient"])() !== client) {
23451                    return;
23452                }
23453                maybeEndActiveSpan();
23454                const sentryTrace = traceOptions.sentryTrace || getMetaContent("sentry-trace") || getServerTiming("sentry-trace");
23455                const baggage = traceOptions.baggage || getMetaContent("baggage") || getServerTiming("baggage");
23456                const propagationContext = (0, __TURBOPACK__imported__module__132584__1["propagationContextFromHeaders"])(sentryTrace, baggage);
23457                const scope = (0, __TURBOPACK__imported__module__250804__4["getCurrentScope"])();
23458                scope.setPropagationContext(propagationContext);
23459                if (!(0, __TURBOPACK__imported__module__10008__3["hasSpansEnabled"])()) {
23460                    scope.getPropagationContext().propagationSpanId = (0, __TURBOPACK__imported__module__373382__2["generateSpanId"])();
23461                }
23462                scope.setSDKProcessingMetadata({
23463                    normalizedRequest: getHttpRequestData()
23464                });
23465                _createRouteSpan(client, {
23466                    op: "pageload",
23467                    ...startSpanOptions
23468                });
23469            });
23470            client.on("endPageloadSpan", ()=>{
23471                if (enableReportPageLoaded && _pageloadSpan) {
23472                    _pageloadSpan.setAttribute(__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON"], "reportPageLoaded");
23473                    _pageloadSpan.end();
23474                }
23475            });
23476        },
23477        afterAllSetup (client) {
23478            var _client_getIntegrationByName;
23479            if (_isBot) {
23480                return;
23481            }
23482            if (client.addIntegration && !((_client_getIntegrationByName = client.getIntegrationByName) === null || _client_getIntegrationByName === void 0 ? void 0 : _client_getIntegrationByName.call(client, WEB_VITALS_INTEGRATION_NAME))) {
23483                client.addIntegration(webVitalsIntegration({
23484                    ignore: enableInp ? [] : [
23485                        "inp"
23486                    ],
23487                    _experiments: {
23488                        enableStandaloneClsSpans,
23489                        enableStandaloneLcpSpans
23490                    }
23491                }));
23492            }
23493            let startingUrl = getLocationHref();
23494            if (linkPreviousTrace !== "off") {
23495                linkTraces(client, {
23496                    linkPreviousTrace,
23497                    consistentTraceSampling
23498                });
23499            }
23500            if (WINDOW1.location) {
23501                if (instrumentPageLoad) {
23502                    const origin = (0, __TURBOPACK__imported__module__605394__3["browserPerformanceTimeOrigin"])();
23503                    startBrowserTracingPageLoadSpan(client, {
23504                        name: WINDOW1.location.pathname,
23505                        // pageload should always start at timeOrigin (and needs to be in s, not ms)
23506                        startTime: origin ? origin / 1e3 : void 0,
23507                        attributes: {
23508                            [__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: "url",
23509                            [__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.pageload.browser"
23510                        }
23511                    });
23512                }
23513                if (instrumentNavigation) {
23514                    addHistoryInstrumentationHandler((param)=>{
23515                        let { to, from } = param;
23516                        if (from === void 0 && (startingUrl === null || startingUrl === void 0 ? void 0 : startingUrl.indexOf(to)) !== -1) {
23517                            startingUrl = void 0;
23518                            return;
23519                        }
23520                        startingUrl = void 0;
23521                        const parsed = parseStringToURLObject(to);
23522                        const activeSpan = getActiveIdleSpan(client);
23523                        const navigationIsRedirect = activeSpan && detectRedirects && isRedirect(activeSpan, lastInteractionTimestamp);
23524                        startBrowserTracingNavigationSpan(client, {
23525                            name: (parsed === null || parsed === void 0 ? void 0 : parsed.pathname) || WINDOW1.location.pathname,
23526                            attributes: {
23527                                [__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: "url",
23528                                [__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.navigation.browser"
23529                            }
23530                        }, {
23531                            url: to,
23532                            isRedirect: navigationIsRedirect
23533                        });
23534                    });
23535                }
23536            }
23537            if (markBackgroundSpan) {
23538                registerBackgroundTabDetection();
23539            }
23540            if (enableInteractions) {
23541                registerInteractionListener(client, idleTimeout, finalTimeout, childSpanTimeout, latestRoute);
23542            }
23543            instrumentOutgoingRequests(client, {
23544                traceFetch,
23545                traceXHR,
23546                tracePropagationTargets: client.getOptions().tracePropagationTargets,
23547                shouldCreateSpanForRequest,
23548                enableHTTPTimings,
23549                onRequestSpanStart,
23550                onRequestSpanEnd
23551            });
23552            if (trackFetchStreamPerformance) {
23553                client.addIntegration(fetchStreamPerformanceIntegration());
23554            }
23555        }
23556    };
23557};
23558function startBrowserTracingPageLoadSpan(client, spanOptions, traceOptions) {
23559    client.emit("startPageLoadSpan", spanOptions, traceOptions);
23560    (0, __TURBOPACK__imported__module__250804__4["getCurrentScope"])().setTransactionName(spanOptions.name);
23561    const pageloadSpan = getActiveIdleSpan(client);
23562    if (pageloadSpan) {
23563        client.emit("afterStartPageLoadSpan", pageloadSpan);
23564    }
23565    return pageloadSpan;
23566}
23567function startBrowserTracingNavigationSpan(client, spanOptions, options) {
23568    const { url, isRedirect: isRedirect2 } = options || {};
23569    client.emit("beforeStartNavigationSpan", spanOptions, {
23570        isRedirect: isRedirect2,
23571        url
23572    });
23573    client.emit("startNavigationSpan", spanOptions, {
23574        isRedirect: isRedirect2,
23575        url
23576    });
23577    const scope = (0, __TURBOPACK__imported__module__250804__4["getCurrentScope"])();
23578    scope.setTransactionName(spanOptions.name);
23579    if (url && !isRedirect2) {
23580        scope.setSDKProcessingMetadata({
23581            normalizedRequest: {
23582                ...getHttpRequestData(),
23583                url
23584            }
23585        });
23586    }
23587    return getActiveIdleSpan(client);
23588}
23589function getMetaContent(metaName) {
23590    const optionalWindowDocument = WINDOW1.document;
23591    const metaTag = optionalWindowDocument === null || optionalWindowDocument === void 0 ? void 0 : optionalWindowDocument.querySelector("meta[name=".concat(metaName, "]"));
23592    return (metaTag === null || metaTag === void 0 ? void 0 : metaTag.getAttribute("content")) || void 0;
23593}
23594function getServerTiming(name) {
23595    var _WINDOW_performance_getEntriesByType, _WINDOW_performance, _navigation_serverTiming;
23596    const navigation = (_WINDOW_performance = WINDOW1.performance) === null || _WINDOW_performance === void 0 ? void 0 : (_WINDOW_performance_getEntriesByType = _WINDOW_performance.getEntriesByType) === null || _WINDOW_performance_getEntriesByType === void 0 ? void 0 : _WINDOW_performance_getEntriesByType.call(_WINDOW_performance, "navigation")[0];
23597    const entry = navigation === null || navigation === void 0 ? void 0 : (_navigation_serverTiming = navigation.serverTiming) === null || _navigation_serverTiming === void 0 ? void 0 : _navigation_serverTiming.find((entry2)=>entry2.name === name);
23598    return entry === null || entry === void 0 ? void 0 : entry.description;
23599}
23600function registerInteractionListener(client, idleTimeout, finalTimeout, childSpanTimeout, latestRoute) {
23601    const optionalWindowDocument = WINDOW1.document;
23602    let inflightInteractionSpan;
23603    const registerInteractionTransaction = ()=>{
23604        const op = "ui.action.click";
23605        const activeIdleSpan = getActiveIdleSpan(client);
23606        if (activeIdleSpan) {
23607            const currentRootSpanOp = (0, __TURBOPACK__imported__module__304661__7["spanToJSON"])(activeIdleSpan).op;
23608            if ([
23609                "navigation",
23610                "pageload"
23611            ].includes(currentRootSpanOp)) {
23612                DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__7["debug"].warn("[Tracing] Did not create ".concat(op, " span because a pageload or navigation span is in progress."));
23613                return void 0;
23614            }
23615        }
23616        if (inflightInteractionSpan) {
23617            inflightInteractionSpan.setAttribute(__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON"], "interactionInterrupted");
23618            inflightInteractionSpan.end();
23619            inflightInteractionSpan = void 0;
23620        }
23621        if (!latestRoute.name) {
23622            DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__7["debug"].warn("[Tracing] Did not create ".concat(op, " transaction because _latestRouteName is missing."));
23623            return void 0;
23624        }
23625        inflightInteractionSpan = startIdleSpan({
23626            name: latestRoute.name,
23627            op,
23628            attributes: {
23629                [__TURBOPACK__imported__module__519988__6["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: latestRoute.source || "url"
23630            }
23631        }, {
23632            idleTimeout,
23633            finalTimeout,
23634            childSpanTimeout
23635        });
23636    };
23637    if (optionalWindowDocument) {
23638        addEventListener("click", registerInteractionTransaction, {
23639            capture: true
23640        });
23641    }
23642}
23643const ACTIVE_IDLE_SPAN_PROPERTY = "_sentry_idleSpan";
23644function getActiveIdleSpan(client) {
23645    return client[ACTIVE_IDLE_SPAN_PROPERTY];
23646}
23647function setActiveIdleSpan(client, span) {
23648    (0, __TURBOPACK__imported__module__951497__2["addNonEnumerableProperty"])(client, ACTIVE_IDLE_SPAN_PROPERTY, span);
23649}
23650const REDIRECT_THRESHOLD = 1.5;
23651function isRedirect(activeSpan, lastInteractionTimestamp) {
23652    const spanData = (0, __TURBOPACK__imported__module__304661__7["spanToJSON"])(activeSpan);
23653    const now = (0, __TURBOPACK__imported__module__605394__3["dateTimestampInSeconds"])();
23654    const startTimestamp = spanData.start_timestamp;
23655    if (now - startTimestamp > REDIRECT_THRESHOLD) {
23656        return false;
23657    }
23658    if (lastInteractionTimestamp && now - lastInteractionTimestamp <= REDIRECT_THRESHOLD) {
23659        return false;
23660    }
23661    return true;
23662}
23663;
23664// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/instrument/location.js [app-client] (ecmascript)
23665;
23666;
23667function getAbsoluteUrl1(urlOrPath) {
23668    try {
23669        const url = new URL(urlOrPath, WINDOW3.location.origin);
23670        return url.toString();
23671    } catch (unused) {
23672        return urlOrPath;
23673    }
23674}
23675;
23676// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/routing/parameterization.js [app-client] (ecmascript)
23677;
23678var __TURBOPACK__imported__module__225304__9 = __TURBOPACK__imported__module__225304__;
23679var __TURBOPACK__imported__module__272598__21 = __TURBOPACK__imported__module__272598__;
23680// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/common/debug-build.js [app-client] (ecmascript)
23681;
23682const DEBUG_BUILD2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__;
23683;
23684;
23685;
23686const globalWithInjectedManifest = __TURBOPACK__imported__module__225304__9["GLOBAL_OBJ"];
23687let cachedManifest = null;
23688let cachedManifestString = void 0;
23689const compiledRegexCache = /* @__PURE__ */ new Map();
23690const routeResultCache = /* @__PURE__ */ new Map();
23691function getRouteSpecificity(routePath) {
23692    const segments = routePath.split("/").filter(Boolean);
23693    let score = 0;
23694    for (const segment of segments){
23695        if (segment.startsWith(":")) {
23696            const paramName = segment.substring(1);
23697            if (paramName.endsWith("*?")) {
23698                score += 1e3;
23699            } else if (paramName.endsWith("*")) {
23700                score += 100;
23701            } else {
23702                score += 10;
23703            }
23704        }
23705    }
23706    if (segments.length > 0) {
23707        const segmentCountPenalty = 1 / segments.length;
23708        score += segmentCountPenalty;
23709    }
23710    return score;
23711}
23712function getCompiledRegex(regexString) {
23713    if (compiledRegexCache.has(regexString)) {
23714        var _compiledRegexCache_get;
23715        return (_compiledRegexCache_get = compiledRegexCache.get(regexString)) !== null && _compiledRegexCache_get !== void 0 ? _compiledRegexCache_get : null;
23716    }
23717    try {
23718        const regex = new RegExp(regexString);
23719        compiledRegexCache.set(regexString, regex);
23720        return regex;
23721    } catch (error) {
23722        DEBUG_BUILD2 && __TURBOPACK__imported__module__272598__21["debug"].warn("Could not compile regex", {
23723            regexString,
23724            error
23725        });
23726        return null;
23727    }
23728}
23729function getManifest() {
23730    if (!(globalWithInjectedManifest === null || globalWithInjectedManifest === void 0 ? void 0 : globalWithInjectedManifest._sentryRouteManifest) || typeof globalWithInjectedManifest._sentryRouteManifest !== "string") {
23731        return null;
23732    }
23733    const currentManifestString = globalWithInjectedManifest._sentryRouteManifest;
23734    if (cachedManifest && cachedManifestString === currentManifestString) {
23735        return cachedManifest;
23736    }
23737    compiledRegexCache.clear();
23738    routeResultCache.clear();
23739    let manifest = {
23740        staticRoutes: [],
23741        dynamicRoutes: [],
23742        isrRoutes: []
23743    };
23744    try {
23745        manifest = JSON.parse(currentManifestString);
23746        if (!Array.isArray(manifest.staticRoutes) || !Array.isArray(manifest.dynamicRoutes)) {
23747            return null;
23748        }
23749        cachedManifest = manifest;
23750        cachedManifestString = currentManifestString;
23751        return manifest;
23752    } catch (unused) {
23753        DEBUG_BUILD2 && __TURBOPACK__imported__module__272598__21["debug"].warn("Could not extract route manifest");
23754        return null;
23755    }
23756}
23757function findMatchingRoutes(route, staticRoutes, dynamicRoutes) {
23758    const matches = [];
23759    if (staticRoutes.some((r)=>r.path === route)) {
23760        return matches;
23761    }
23762    for (const dynamicRoute of dynamicRoutes){
23763        if (dynamicRoute.regex) {
23764            const regex = getCompiledRegex(dynamicRoute.regex);
23765            if (regex === null || regex === void 0 ? void 0 : regex.test(route)) {
23766                matches.push(dynamicRoute.path);
23767            }
23768        }
23769    }
23770    if (!route.startsWith("/:")) {
23771        for (const dynamicRoute of dynamicRoutes){
23772            if (dynamicRoute.hasOptionalPrefix && dynamicRoute.regex) {
23773                const routeWithPrefix = route === "/" ? "/SENTRY_OPTIONAL_PREFIX" : "/SENTRY_OPTIONAL_PREFIX".concat(route);
23774                const regex = getCompiledRegex(dynamicRoute.regex);
23775                if (regex === null || regex === void 0 ? void 0 : regex.test(routeWithPrefix)) {
23776                    matches.push(dynamicRoute.path);
23777                }
23778            }
23779        }
23780    }
23781    return matches;
23782}
23783const maybeParameterizeRoute = (route)=>{
23784    const manifest = getManifest();
23785    if (!manifest) {
23786        return void 0;
23787    }
23788    const normalizedRoute = route.length > 1 && route.endsWith("/") ? route.slice(0, -1) : route;
23789    if (routeResultCache.has(normalizedRoute)) {
23790        return routeResultCache.get(normalizedRoute);
23791    }
23792    const { staticRoutes, dynamicRoutes } = manifest;
23793    if (!Array.isArray(staticRoutes) || !Array.isArray(dynamicRoutes)) {
23794        return void 0;
23795    }
23796    const matches = findMatchingRoutes(normalizedRoute, staticRoutes, dynamicRoutes);
23797    const result = matches.sort((a, b)=>getRouteSpecificity(a) - getRouteSpecificity(b))[0];
23798    routeResultCache.set(normalizedRoute, result);
23799    return result;
23800};
23801;
23802;
23803;
23804;
23805;
23806function stripTrailingSlash(pathname) {
23807    return pathname.length > 1 && pathname.endsWith("/") ? pathname.slice(0, -1) : pathname;
23808}
23809function setNavigationSpanUrlAttributes(span, urlPath, urlOrPath) {
23810    span.setAttributes({
23811        [Vu]: urlPath,
23812        [Yu]: getAbsoluteUrl1(urlOrPath)
23813    });
23814}
23815const INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME = "incomplete-app-router-transaction";
23816let navigationRoutingMode = "router-patch";
23817const currentRouterPatchingNavigationSpanRef = {
23818    current: void 0
23819};
23820function appRouterInstrumentPageLoad(client) {
23821    const pathname = stripTrailingSlash(WINDOW1.location.pathname);
23822    const parameterizedPathname = maybeParameterizeRoute(pathname);
23823    const origin = (0, __TURBOPACK__imported__module__605394__["browserPerformanceTimeOrigin"])();
23824    startBrowserTracingPageLoadSpan(client, {
23825        name: parameterizedPathname !== null && parameterizedPathname !== void 0 ? parameterizedPathname : pathname,
23826        // pageload should always start at timeOrigin (and needs to be in s, not ms)
23827        startTime: origin ? origin / 1e3 : void 0,
23828        attributes: {
23829            [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "pageload",
23830            [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.pageload.nextjs.app_router_instrumentation",
23831            [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: parameterizedPathname ? "route" : "url",
23832            ...parameterizedPathname && {
23833                [ju]: parameterizedPathname
23834            }
23835        }
23836    });
23837}
23838const GLOBAL_OBJ_WITH_NEXT_ROUTER = __TURBOPACK__imported__module__225304__["GLOBAL_OBJ"];
23839const globalWithInjectedBasePath = __TURBOPACK__imported__module__225304__["GLOBAL_OBJ"];
23840function appRouterInstrumentNavigation(client) {
23841    routerTransitionHandler = (href, navigationType)=>{
23842        var _process_env__sentryBasePath;
23843        const basePath = (_process_env__sentryBasePath = __TURBOPACK__imported__module__247167__1["default"].env._sentryBasePath) !== null && _process_env__sentryBasePath !== void 0 ? _process_env__sentryBasePath : globalWithInjectedBasePath._sentryBasePath;
23844        const normalizedHref = basePath && !href.startsWith(basePath) ? "".concat(basePath).concat(href) : href;
23845        const unparameterizedPathname = stripTrailingSlash(new URL(normalizedHref, WINDOW1.location.href).pathname);
23846        const parameterizedPathname = maybeParameterizeRoute(unparameterizedPathname);
23847        const pathname = parameterizedPathname !== null && parameterizedPathname !== void 0 ? parameterizedPathname : unparameterizedPathname;
23848        if (navigationRoutingMode === "router-patch") {
23849            navigationRoutingMode = "transition-start-hook";
23850        }
23851        const currentNavigationSpan = currentRouterPatchingNavigationSpanRef.current;
23852        if (currentNavigationSpan) {
23853            currentNavigationSpan.updateName(pathname);
23854            currentNavigationSpan.setAttributes({
23855                "navigation.type": "router.".concat(navigationType),
23856                [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: parameterizedPathname ? "route" : "url",
23857                ...parameterizedPathname && {
23858                    [ju]: parameterizedPathname
23859                }
23860            });
23861            setNavigationSpanUrlAttributes(currentNavigationSpan, unparameterizedPathname, normalizedHref);
23862            currentRouterPatchingNavigationSpanRef.current = void 0;
23863        } else {
23864            startBrowserTracingNavigationSpan(client, {
23865                name: pathname,
23866                attributes: {
23867                    [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "navigation",
23868                    [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.navigation.nextjs.app_router_instrumentation",
23869                    [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: parameterizedPathname ? "route" : "url",
23870                    "navigation.type": "router.".concat(navigationType),
23871                    ...parameterizedPathname && {
23872                        [ju]: parameterizedPathname
23873                    }
23874                }
23875            }, {
23876                url: getAbsoluteUrl1(normalizedHref)
23877            });
23878        }
23879    };
23880    WINDOW1.addEventListener("popstate", ()=>{
23881        var _currentRouterPatchingNavigationSpanRef_current;
23882        const pathname = stripTrailingSlash(WINDOW1.location.pathname);
23883        const parameterizedPathname = maybeParameterizeRoute(pathname);
23884        if ((_currentRouterPatchingNavigationSpanRef_current = currentRouterPatchingNavigationSpanRef.current) === null || _currentRouterPatchingNavigationSpanRef_current === void 0 ? void 0 : _currentRouterPatchingNavigationSpanRef_current.isRecording()) {
23885            currentRouterPatchingNavigationSpanRef.current.updateName(parameterizedPathname !== null && parameterizedPathname !== void 0 ? parameterizedPathname : pathname);
23886            currentRouterPatchingNavigationSpanRef.current.setAttribute(__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"], parameterizedPathname ? "route" : "url");
23887            if (parameterizedPathname) {
23888                currentRouterPatchingNavigationSpanRef.current.setAttribute(ju, parameterizedPathname);
23889            }
23890            setNavigationSpanUrlAttributes(currentRouterPatchingNavigationSpanRef.current, pathname, WINDOW1.location.href);
23891        } else {
23892            currentRouterPatchingNavigationSpanRef.current = startBrowserTracingNavigationSpan(client, {
23893                name: parameterizedPathname !== null && parameterizedPathname !== void 0 ? parameterizedPathname : pathname,
23894                attributes: {
23895                    [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.navigation.nextjs.app_router_instrumentation",
23896                    [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: parameterizedPathname ? "route" : "url",
23897                    "navigation.type": "browser.popstate",
23898                    ...parameterizedPathname && {
23899                        [ju]: parameterizedPathname
23900                    }
23901                }
23902            }, {
23903                url: getAbsoluteUrl1(pathname)
23904            });
23905        }
23906    });
23907    let routerPatched = false;
23908    let triesToFindRouter = 0;
23909    const MAX_TRIES_TO_FIND_ROUTER = 500;
23910    const ROUTER_AVAILABILITY_CHECK_INTERVAL_MS = 20;
23911    const checkForRouterAvailabilityInterval = setInterval(()=>{
23912        var _ref;
23913        var _GLOBAL_OBJ_WITH_NEXT_ROUTER_next, _GLOBAL_OBJ_WITH_NEXT_ROUTER_nd;
23914        triesToFindRouter++;
23915        const router = (_ref = GLOBAL_OBJ_WITH_NEXT_ROUTER === null || GLOBAL_OBJ_WITH_NEXT_ROUTER === void 0 ? void 0 : (_GLOBAL_OBJ_WITH_NEXT_ROUTER_next = GLOBAL_OBJ_WITH_NEXT_ROUTER.next) === null || _GLOBAL_OBJ_WITH_NEXT_ROUTER_next === void 0 ? void 0 : _GLOBAL_OBJ_WITH_NEXT_ROUTER_next.router) !== null && _ref !== void 0 ? _ref : GLOBAL_OBJ_WITH_NEXT_ROUTER === null || GLOBAL_OBJ_WITH_NEXT_ROUTER === void 0 ? void 0 : (_GLOBAL_OBJ_WITH_NEXT_ROUTER_nd = GLOBAL_OBJ_WITH_NEXT_ROUTER.nd) === null || _GLOBAL_OBJ_WITH_NEXT_ROUTER_nd === void 0 ? void 0 : _GLOBAL_OBJ_WITH_NEXT_ROUTER_nd.router;
23916        if (routerPatched || triesToFindRouter > MAX_TRIES_TO_FIND_ROUTER) {
23917            clearInterval(checkForRouterAvailabilityInterval);
23918        } else if (router) {
23919            clearInterval(checkForRouterAvailabilityInterval);
23920            routerPatched = true;
23921            patchRouter(client, router, currentRouterPatchingNavigationSpanRef);
23922            [
23923                "nd",
23924                "next"
23925            ].forEach((globalValueName)=>{
23926                const globalValue = GLOBAL_OBJ_WITH_NEXT_ROUTER[globalValueName];
23927                if (globalValue) {
23928                    GLOBAL_OBJ_WITH_NEXT_ROUTER[globalValueName] = new Proxy(globalValue, {
23929                        set (target, p, newValue) {
23930                            if (p === "router" && typeof newValue === "object" && newValue !== null) {
23931                                patchRouter(client, newValue, currentRouterPatchingNavigationSpanRef);
23932                            }
23933                            target[p] = newValue;
23934                            return true;
23935                        }
23936                    });
23937                }
23938            });
23939        }
23940    }, ROUTER_AVAILABILITY_CHECK_INTERVAL_MS);
23941}
23942function transactionNameifyRouterArgument(target) {
23943    try {
23944        return new URL(target, "http://example.com/").pathname;
23945    } catch (unused) {
23946        return "/";
23947    }
23948}
23949const patchedRouters = /* @__PURE__ */ new WeakSet();
23950function patchRouter(client, router, currentNavigationSpanRef) {
23951    if (patchedRouters.has(router)) {
23952        return;
23953    }
23954    patchedRouters.add(router);
23955    [
23956        "back",
23957        "forward",
23958        "push",
23959        "replace"
23960    ].forEach((routerFunctionName)=>{
23961        if (router === null || router === void 0 ? void 0 : router[routerFunctionName]) {
23962            router[routerFunctionName] = new Proxy(router[routerFunctionName], {
23963                apply (target, thisArg, argArray) {
23964                    var _process_env__sentryBasePath;
23965                    if (navigationRoutingMode !== "router-patch") {
23966                        return target.apply(thisArg, argArray);
23967                    }
23968                    let transactionName = INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME;
23969                    const transactionAttributes = {
23970                        [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "navigation",
23971                        [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.navigation.nextjs.app_router_instrumentation",
23972                        [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: "url"
23973                    };
23974                    const href = argArray[0];
23975                    const basePath = (_process_env__sentryBasePath = __TURBOPACK__imported__module__247167__1["default"].env._sentryBasePath) !== null && _process_env__sentryBasePath !== void 0 ? _process_env__sentryBasePath : globalWithInjectedBasePath._sentryBasePath;
23976                    const normalizedHref = basePath && typeof href === "string" && !href.startsWith(basePath) ? "".concat(basePath).concat(href) : href;
23977                    if (routerFunctionName === "push") {
23978                        transactionName = stripTrailingSlash(transactionNameifyRouterArgument(normalizedHref));
23979                        transactionAttributes["navigation.type"] = "router.push";
23980                    } else if (routerFunctionName === "replace") {
23981                        transactionName = stripTrailingSlash(transactionNameifyRouterArgument(normalizedHref));
23982                        transactionAttributes["navigation.type"] = "router.replace";
23983                    } else if (routerFunctionName === "back") {
23984                        transactionAttributes["navigation.type"] = "router.back";
23985                    } else if (routerFunctionName === "forward") {
23986                        transactionAttributes["navigation.type"] = "router.forward";
23987                    }
23988                    const parameterizedPathname = maybeParameterizeRoute(transactionName);
23989                    const navigationUrl = routerFunctionName === "back" || routerFunctionName === "forward" ? void 0 : getAbsoluteUrl1(normalizedHref);
23990                    currentNavigationSpanRef.current = startBrowserTracingNavigationSpan(client, {
23991                        name: parameterizedPathname !== null && parameterizedPathname !== void 0 ? parameterizedPathname : transactionName,
23992                        attributes: {
23993                            ...transactionAttributes,
23994                            [__TURBOPACK__imported__module__519988__["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: parameterizedPathname ? "route" : "url",
23995                            ...parameterizedPathname && {
23996                                [ju]: parameterizedPathname
23997                            }
23998                        }
23999                    }, navigationUrl ? {
24000                        url: navigationUrl
24001                    } : void 0);
24002                    return target.apply(thisArg, argArray);
24003                }
24004            });
24005        }
24006    });
24007}
24008let routerTransitionHandler = void 0;
24009function captureRouterTransitionStart(href, navigationType) {
24010    if (routerTransitionHandler) {
24011        routerTransitionHandler(href, navigationType);
24012    }
24013}
24014;
24015// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/index.js [app-client] (ecmascript) <locals>
24016;
24017var __TURBOPACK__imported__module__247167__2 = __TURBOPACK__imported__module__247167__;
24018var __TURBOPACK__imported__module__272598__22 = __TURBOPACK__imported__module__272598__;
24019var __TURBOPACK__imported__module__225304__10 = __TURBOPACK__imported__module__225304__;
24020// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js [app-client] (ecmascript)
24021;
24022var __TURBOPACK__imported__module__591401__ = __turbopack_context__.i(591401);
24023;
24024function applySdkMetadata(options, name) {
24025    let names = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [
24026        name
24027    ], source = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "npm";
24028    const sdk = (options._metadata = options._metadata || {}).sdk = options._metadata.sdk || {};
24029    if (!sdk.name) {
24030        sdk.name = "sentry.javascript.".concat(name);
24031        sdk.packages = names.map((name2)=>({
24032                name: "".concat(source, ":@sentry/").concat(name2),
24033                version: __TURBOPACK__imported__module__591401__["SDK_VERSION"]
24034            }));
24035        sdk.version = __TURBOPACK__imported__module__591401__["SDK_VERSION"];
24036    }
24037}
24038;
24039var __TURBOPACK__imported__module__662537__2 = __TURBOPACK__imported__module__662537__;
24040var __TURBOPACK__imported__module__250804__16 = __TURBOPACK__imported__module__250804__;
24041// MERGED MODULE: [project]/node_modules/@sentry/nextjs/node_modules/@sentry/react/build/esm/sdk.js [app-client] (ecmascript)
24042;
24043var __TURBOPACK__imported__module__662537__3 = __TURBOPACK__imported__module__662537__;
24044// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/sdk.js [app-client] (ecmascript)
24045;
24046// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integrations/eventFilters.js [app-client] (ecmascript)
24047;
24048var __TURBOPACK__imported__module__901020__11 = __TURBOPACK__imported__module__901020__;
24049var __TURBOPACK__imported__module__272598__23 = __TURBOPACK__imported__module__272598__;
24050// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/eventUtils.js [app-client] (ecmascript)
24051;
24052function getPossibleEventMessages(event) {
24053    const possibleMessages = [];
24054    if (event.message) {
24055        possibleMessages.push(event.message);
24056    }
24057    try {
24058        const lastException = event.exception.values[event.exception.values.length - 1];
24059        if (lastException === null || lastException === void 0 ? void 0 : lastException.value) {
24060            possibleMessages.push(lastException.value);
24061            if (lastException.type) {
24062                possibleMessages.push("".concat(lastException.type, ": ").concat(lastException.value));
24063            }
24064        }
24065    } catch (unused) {}
24066    return possibleMessages;
24067}
24068;
24069var __TURBOPACK__imported__module__682564__1 = __TURBOPACK__imported__module__682564__;
24070var __TURBOPACK__imported__module__821593__3 = __TURBOPACK__imported__module__821593__;
24071;
24072;
24073;
24074;
24075;
24076;
24077const DEFAULT_IGNORE_ERRORS = [
24078    /^Script error\.?$/,
24079    /^Javascript error: Script error\.? on line 0$/,
24080    /^ResizeObserver loop completed with undelivered notifications.$/,
24081    // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.
24082    /^Cannot redefine property: googletag$/,
24083    // This is thrown when google tag manager is used in combination with an ad blocker
24084    /^Can't find variable: gmo$/,
24085    // Error from Google Search App https://issuetracker.google.com/issues/396043331
24086    /^undefined is not an object \(evaluating 'a\.[A-Z]'\)$/,
24087    // Random error that happens but not actionable or noticeable to end-users.
24088    /can't redefine non-configurable property "solana"/,
24089    // Probably a browser extension or custom browser (Brave) throwing this error
24090    /vv\(\)\.getRestrictions is not a function/,
24091    // Error thrown by GTM, seemingly not affecting end-users
24092    /Can't find variable: _AutofillCallbackHandler/,
24093    // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/
24094    /Object Not Found Matching Id:\d+, MethodName:simulateEvent/,
24095    // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps
24096    /Java exception was raised during method invocation$/,
24097    // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)
24098    /Java object is gone$/
24099];
24100const INTEGRATION_NAME = "EventFilters";
24101const eventFiltersIntegration = defineIntegration(function() {
24102    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
24103    let mergedOptions;
24104    return {
24105        name: INTEGRATION_NAME,
24106        setup (client) {
24107            const clientOptions = client.getOptions();
24108            mergedOptions = _mergeOptions(options, clientOptions);
24109        },
24110        processEvent (event, _hint, client) {
24111            if (!mergedOptions) {
24112                const clientOptions = client.getOptions();
24113                mergedOptions = _mergeOptions(options, clientOptions);
24114            }
24115            return _shouldDropEvent(event, mergedOptions) ? null : event;
24116        }
24117    };
24118});
24119const inboundFiltersIntegration = defineIntegration(function() {
24120    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
24121    return {
24122        ...eventFiltersIntegration(options),
24123        name: "InboundFilters"
24124    };
24125});
24126function _mergeOptions() {
24127    let internalOptions = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, clientOptions = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
24128    return {
24129        allowUrls: [
24130            ...internalOptions.allowUrls || [],
24131            ...clientOptions.allowUrls || []
24132        ],
24133        denyUrls: [
24134            ...internalOptions.denyUrls || [],
24135            ...clientOptions.denyUrls || []
24136        ],
24137        ignoreErrors: [
24138            ...internalOptions.ignoreErrors || [],
24139            ...clientOptions.ignoreErrors || [],
24140            ...internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS
24141        ],
24142        ignoreTransactions: [
24143            ...internalOptions.ignoreTransactions || [],
24144            ...clientOptions.ignoreTransactions || []
24145        ]
24146    };
24147}
24148function _shouldDropEvent(event, options) {
24149    if (!event.type) {
24150        if (_isIgnoredError(event, options.ignoreErrors)) {
24151            __TURBOPACK__imported__module__901020__11["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__23["debug"].warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: ".concat((0, __TURBOPACK__imported__module__682564__1["getEventDescription"])(event)));
24152            return true;
24153        }
24154        if (_isUselessError(event)) {
24155            __TURBOPACK__imported__module__901020__11["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__23["debug"].warn("Event dropped due to not having an error message, error type or stacktrace.\nEvent: ".concat((0, __TURBOPACK__imported__module__682564__1["getEventDescription"])(event)));
24156            return true;
24157        }
24158        if (_isDeniedUrl(event, options.denyUrls)) {
24159            __TURBOPACK__imported__module__901020__11["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__23["debug"].warn("Event dropped due to being matched by `denyUrls` option.\nEvent: ".concat((0, __TURBOPACK__imported__module__682564__1["getEventDescription"])(event), ".\nUrl: ").concat(_getEventFilterUrl(event)));
24160            return true;
24161        }
24162        if (!_isAllowedUrl(event, options.allowUrls)) {
24163            __TURBOPACK__imported__module__901020__11["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__23["debug"].warn("Event dropped due to not being matched by `allowUrls` option.\nEvent: ".concat((0, __TURBOPACK__imported__module__682564__1["getEventDescription"])(event), ".\nUrl: ").concat(_getEventFilterUrl(event)));
24164            return true;
24165        }
24166    } else if (event.type === "transaction") {
24167        if (_isIgnoredTransaction(event, options.ignoreTransactions)) {
24168            __TURBOPACK__imported__module__901020__11["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__23["debug"].warn("Event dropped due to being matched by `ignoreTransactions` option.\nEvent: ".concat((0, __TURBOPACK__imported__module__682564__1["getEventDescription"])(event)));
24169            return true;
24170        }
24171    }
24172    return false;
24173}
24174function _isIgnoredError(event, ignoreErrors) {
24175    if (!(ignoreErrors === null || ignoreErrors === void 0 ? void 0 : ignoreErrors.length)) {
24176        return false;
24177    }
24178    return getPossibleEventMessages(event).some((message)=>(0, __TURBOPACK__imported__module__821593__3["stringMatchesSomePattern"])(message, ignoreErrors));
24179}
24180function _isIgnoredTransaction(event, ignoreTransactions) {
24181    if (!(ignoreTransactions === null || ignoreTransactions === void 0 ? void 0 : ignoreTransactions.length)) {
24182        return false;
24183    }
24184    const name = event.transaction;
24185    return name ? (0, __TURBOPACK__imported__module__821593__3["stringMatchesSomePattern"])(name, ignoreTransactions) : false;
24186}
24187function _isDeniedUrl(event, denyUrls) {
24188    if (!(denyUrls === null || denyUrls === void 0 ? void 0 : denyUrls.length)) {
24189        return false;
24190    }
24191    const url = _getEventFilterUrl(event);
24192    return !url ? false : (0, __TURBOPACK__imported__module__821593__3["stringMatchesSomePattern"])(url, denyUrls);
24193}
24194function _isAllowedUrl(event, allowUrls) {
24195    if (!(allowUrls === null || allowUrls === void 0 ? void 0 : allowUrls.length)) {
24196        return true;
24197    }
24198    const url = _getEventFilterUrl(event);
24199    return !url ? true : (0, __TURBOPACK__imported__module__821593__3["stringMatchesSomePattern"])(url, allowUrls);
24200}
24201function _getLastValidUrl() {
24202    let frames = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
24203    for(let i = frames.length - 1; i >= 0; i--){
24204        const frame = frames[i];
24205        if (frame && frame.filename !== "<anonymous>" && frame.filename !== "[native code]") {
24206            return frame.filename || null;
24207        }
24208    }
24209    return null;
24210}
24211function _getEventFilterUrl(event) {
24212    try {
24213        var _ref;
24214        var _event_exception, _rootException_stacktrace;
24215        const rootException = [
24216            ...(_ref = (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : _event_exception.values) !== null && _ref !== void 0 ? _ref : []
24217        ].reverse().find((value)=>{
24218            var _value_mechanism, _value_stacktrace_frames, _value_stacktrace;
24219            return ((_value_mechanism = value.mechanism) === null || _value_mechanism === void 0 ? void 0 : _value_mechanism.parent_id) === void 0 && ((_value_stacktrace = value.stacktrace) === null || _value_stacktrace === void 0 ? void 0 : (_value_stacktrace_frames = _value_stacktrace.frames) === null || _value_stacktrace_frames === void 0 ? void 0 : _value_stacktrace_frames.length);
24220        });
24221        const frames = rootException === null || rootException === void 0 ? void 0 : (_rootException_stacktrace = rootException.stacktrace) === null || _rootException_stacktrace === void 0 ? void 0 : _rootException_stacktrace.frames;
24222        return frames ? _getLastValidUrl(frames) : null;
24223    } catch (unused) {
24224        __TURBOPACK__imported__module__901020__11["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__23["debug"].error("Cannot extract url for event ".concat((0, __TURBOPACK__imported__module__682564__1["getEventDescription"])(event)));
24225        return null;
24226    }
24227}
24228function _isUselessError(event) {
24229    var _event_exception_values, _event_exception;
24230    if (!((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values.length)) {
24231        return false;
24232    }
24233    return(// No top-level message
24234    !event.message && // There are no exception values that have a stacktrace, a non-generic-Error type or value
24235    !event.exception.values.some((value)=>value.stacktrace || value.type && value.type !== "Error" || value.value));
24236}
24237;
24238// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integrations/functiontostring.js [app-client] (ecmascript)
24239;
24240var __TURBOPACK__imported__module__250804__17 = __TURBOPACK__imported__module__250804__;
24241var __TURBOPACK__imported__module__951497__5 = __TURBOPACK__imported__module__951497__;
24242;
24243;
24244;
24245const INTEGRATION_NAME1 = "FunctionToString";
24246const SETUP_CLIENTS = /* @__PURE__ */ new WeakMap();
24247const _functionToStringIntegration = ()=>{
24248    return {
24249        name: INTEGRATION_NAME1,
24250        setupOnce () {
24251            const originalFunctionToString = Function.prototype.toString;
24252            try {
24253                Function.prototype.toString = function() {
24254                    for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
24255                        args[_key] = arguments[_key];
24256                    }
24257                    const originalFunction = (0, __TURBOPACK__imported__module__951497__5["getOriginalFunction"])(this);
24258                    let unwrappedFunction;
24259                    try {
24260                        if (SETUP_CLIENTS.has((0, __TURBOPACK__imported__module__250804__17["getClient"])()) && originalFunction !== void 0) {
24261                            unwrappedFunction = originalFunction;
24262                        }
24263                    } catch (unused) {}
24264                    return originalFunctionToString.apply(unwrappedFunction !== null && unwrappedFunction !== void 0 ? unwrappedFunction : this, args);
24265                };
24266            } catch (unused) {}
24267        },
24268        setup (client) {
24269            SETUP_CLIENTS.set(client, true);
24270        }
24271    };
24272};
24273const functionToStringIntegration = defineIntegration(_functionToStringIntegration);
24274;
24275// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integrations/conversationId.js [app-client] (ecmascript)
24276;
24277var __TURBOPACK__imported__module__250804__18 = __TURBOPACK__imported__module__250804__;
24278var __TURBOPACK__imported__module__519988__16 = __TURBOPACK__imported__module__519988__;
24279var __TURBOPACK__imported__module__304661__17 = __TURBOPACK__imported__module__304661__;
24280;
24281;
24282;
24283;
24284const INTEGRATION_NAME2 = "ConversationId";
24285const _conversationIdIntegration = ()=>{
24286    return {
24287        name: INTEGRATION_NAME2,
24288        setup (client) {
24289            client.on("spanStart", (span)=>{
24290                const scopeData = (0, __TURBOPACK__imported__module__250804__18["getCurrentScope"])().getScopeData();
24291                const isolationScopeData = (0, __TURBOPACK__imported__module__250804__18["getIsolationScope"])().getScopeData();
24292                const conversationId = scopeData.conversationId || isolationScopeData.conversationId;
24293                if (conversationId) {
24294                    const { op, data: attributes, description: name } = (0, __TURBOPACK__imported__module__304661__17["spanToJSON"])(span);
24295                    if (!(op === null || op === void 0 ? void 0 : op.startsWith("gen_ai.")) && !attributes["ai.operationId"] && !(name === null || name === void 0 ? void 0 : name.startsWith("ai."))) {
24296                        return;
24297                    }
24298                    span.setAttribute(__TURBOPACK__imported__module__519988__16["GEN_AI_CONVERSATION_ID_ATTRIBUTE"], conversationId);
24299                }
24300            });
24301        }
24302    };
24303};
24304const conversationIdIntegration = defineIntegration(_conversationIdIntegration);
24305;
24306// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integrations/dedupe.js [app-client] (ecmascript)
24307;
24308var __TURBOPACK__imported__module__901020__12 = __TURBOPACK__imported__module__901020__;
24309var __TURBOPACK__imported__module__272598__24 = __TURBOPACK__imported__module__272598__;
24310var __TURBOPACK__imported__module__936032__2 = __TURBOPACK__imported__module__936032__;
24311;
24312;
24313;
24314;
24315const INTEGRATION_NAME3 = "Dedupe";
24316const _dedupeIntegration = ()=>{
24317    let previousEvent;
24318    return {
24319        name: INTEGRATION_NAME3,
24320        processEvent (currentEvent) {
24321            if (currentEvent.type) {
24322                return currentEvent;
24323            }
24324            try {
24325                if (_shouldDropEvent1(currentEvent, previousEvent)) {
24326                    __TURBOPACK__imported__module__901020__12["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__24["debug"].warn("Event dropped due to being a duplicate of previously captured event.");
24327                    return null;
24328                }
24329            } catch (unused) {}
24330            return previousEvent = currentEvent;
24331        }
24332    };
24333};
24334const dedupeIntegration = defineIntegration(_dedupeIntegration);
24335function _shouldDropEvent1(currentEvent, previousEvent) {
24336    if (!previousEvent) {
24337        return false;
24338    }
24339    if (_isSameMessageEvent(currentEvent, previousEvent)) {
24340        return true;
24341    }
24342    if (_isSameExceptionEvent(currentEvent, previousEvent)) {
24343        return true;
24344    }
24345    return false;
24346}
24347function _isSameMessageEvent(currentEvent, previousEvent) {
24348    const currentMessage = currentEvent.message;
24349    const previousMessage = previousEvent.message;
24350    if (!currentMessage && !previousMessage) {
24351        return false;
24352    }
24353    if (currentMessage && !previousMessage || !currentMessage && previousMessage) {
24354        return false;
24355    }
24356    if (currentMessage !== previousMessage) {
24357        return false;
24358    }
24359    if (!_isSameFingerprint(currentEvent, previousEvent)) {
24360        return false;
24361    }
24362    if (!_isSameStacktrace(currentEvent, previousEvent)) {
24363        return false;
24364    }
24365    return true;
24366}
24367function _isSameExceptionEvent(currentEvent, previousEvent) {
24368    const previousException = _getExceptionFromEvent(previousEvent);
24369    const currentException = _getExceptionFromEvent(currentEvent);
24370    if (!previousException || !currentException) {
24371        return false;
24372    }
24373    if (previousException.type !== currentException.type || previousException.value !== currentException.value) {
24374        return false;
24375    }
24376    if (!_isSameFingerprint(currentEvent, previousEvent)) {
24377        return false;
24378    }
24379    if (!_isSameStacktrace(currentEvent, previousEvent)) {
24380        return false;
24381    }
24382    return true;
24383}
24384function _isSameStacktrace(currentEvent, previousEvent) {
24385    let currentFrames = (0, __TURBOPACK__imported__module__936032__2["getFramesFromEvent"])(currentEvent);
24386    let previousFrames = (0, __TURBOPACK__imported__module__936032__2["getFramesFromEvent"])(previousEvent);
24387    if (!currentFrames && !previousFrames) {
24388        return true;
24389    }
24390    if (currentFrames && !previousFrames || !currentFrames && previousFrames) {
24391        return false;
24392    }
24393    currentFrames = currentFrames;
24394    previousFrames = previousFrames;
24395    if (previousFrames.length !== currentFrames.length) {
24396        return false;
24397    }
24398    for(let i = 0; i < previousFrames.length; i++){
24399        const frameA = previousFrames[i];
24400        const frameB = currentFrames[i];
24401        if (frameA.filename !== frameB.filename || frameA.lineno !== frameB.lineno || frameA.colno !== frameB.colno || frameA.function !== frameB.function) {
24402            return false;
24403        }
24404    }
24405    return true;
24406}
24407function _isSameFingerprint(currentEvent, previousEvent) {
24408    let currentFingerprint = currentEvent.fingerprint;
24409    let previousFingerprint = previousEvent.fingerprint;
24410    if (!currentFingerprint && !previousFingerprint) {
24411        return true;
24412    }
24413    if (currentFingerprint && !previousFingerprint || !currentFingerprint && previousFingerprint) {
24414        return false;
24415    }
24416    currentFingerprint = currentFingerprint;
24417    previousFingerprint = previousFingerprint;
24418    try {
24419        return !!(currentFingerprint.join("") === previousFingerprint.join(""));
24420    } catch (unused) {
24421        return false;
24422    }
24423}
24424function _getExceptionFromEvent(event) {
24425    var _event_exception_values, _event_exception;
24426    return (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values[0];
24427}
24428;
24429var __TURBOPACK__imported__module__936032__3 = __TURBOPACK__imported__module__936032__;
24430var __TURBOPACK__imported__module__45968__ = __turbopack_context__.i(45968);
24431// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/sdk.js [app-client] (ecmascript)
24432;
24433var __TURBOPACK__imported__module__250804__19 = __TURBOPACK__imported__module__250804__;
24434var __TURBOPACK__imported__module__901020__13 = __TURBOPACK__imported__module__901020__;
24435var __TURBOPACK__imported__module__272598__25 = __TURBOPACK__imported__module__272598__;
24436;
24437;
24438;
24439function initAndBind(clientClass, options) {
24440    if (options.debug === true) {
24441        if (__TURBOPACK__imported__module__901020__13["DEBUG_BUILD"]) {
24442            __TURBOPACK__imported__module__272598__25["debug"].enable();
24443        } else {
24444            (0, __TURBOPACK__imported__module__272598__25["consoleSandbox"])(()=>{
24445                console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.");
24446            });
24447        }
24448    }
24449    const scope = (0, __TURBOPACK__imported__module__250804__19["getCurrentScope"])();
24450    scope.update(options.initialScope);
24451    const client = new clientClass(options);
24452    setCurrentClient(client);
24453    client.init();
24454    return client;
24455}
24456function setCurrentClient(client) {
24457    (0, __TURBOPACK__imported__module__250804__19["getCurrentScope"])().setClient(client);
24458}
24459;
24460// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/client.js [app-client] (ecmascript)
24461;
24462// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/client.js [app-client] (ecmascript)
24463;
24464// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/api.js [app-client] (ecmascript)
24465;
24466var __TURBOPACK__imported__module__339435__1 = __TURBOPACK__imported__module__339435__;
24467;
24468const SENTRY_API_VERSION = "7";
24469function getBaseApiEndpoint(dsn) {
24470    const protocol = dsn.protocol ? "".concat(dsn.protocol, ":") : "";
24471    const port = dsn.port ? ":".concat(dsn.port) : "";
24472    return "".concat(protocol, "//").concat(dsn.host).concat(port).concat(dsn.path ? "/".concat(dsn.path) : "", "/api/");
24473}
24474function _getIngestEndpoint(dsn) {
24475    return "".concat(getBaseApiEndpoint(dsn)).concat(dsn.projectId, "/envelope/");
24476}
24477function _encodedAuth(dsn, sdkInfo) {
24478    const params = {
24479        sentry_version: SENTRY_API_VERSION
24480    };
24481    if (dsn.publicKey) {
24482        params.sentry_key = dsn.publicKey;
24483    }
24484    if (sdkInfo) {
24485        params.sentry_client = "".concat(sdkInfo.name, "/").concat(sdkInfo.version);
24486    }
24487    return new URLSearchParams(params).toString();
24488}
24489function getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {
24490    return tunnel ? tunnel : "".concat(_getIngestEndpoint(dsn), "?").concat(_encodedAuth(dsn, sdkInfo));
24491}
24492function getReportDialogEndpoint(dsnLike, dialogOptions) {
24493    const dsn = (0, __TURBOPACK__imported__module__339435__1["makeDsn"])(dsnLike);
24494    if (!dsn) {
24495        return "";
24496    }
24497    const endpoint = "".concat(getBaseApiEndpoint(dsn), "embed/error-page/");
24498    let encodedOptions = "dsn=".concat((0, __TURBOPACK__imported__module__339435__1["dsnToString"])(dsn));
24499    for(const key in dialogOptions){
24500        if (key === "dsn") {
24501            continue;
24502        }
24503        if (key === "onClose") {
24504            continue;
24505        }
24506        if (key === "user") {
24507            const user = dialogOptions.user;
24508            if (!user) {
24509                continue;
24510            }
24511            if (user.name) {
24512                encodedOptions += "&name=".concat(encodeURIComponent(user.name));
24513            }
24514            if (user.email) {
24515                encodedOptions += "&email=".concat(encodeURIComponent(user.email));
24516            }
24517        } else {
24518            encodedOptions += "&".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(dialogOptions[key]));
24519        }
24520    }
24521    return "".concat(endpoint, "?").concat(encodedOptions);
24522}
24523;
24524var __TURBOPACK__imported__module__373250__ = __turbopack_context__.i(373250);
24525var __TURBOPACK__imported__module__250804__20 = __TURBOPACK__imported__module__250804__;
24526var __TURBOPACK__imported__module__901020__14 = __TURBOPACK__imported__module__901020__;
24527var __TURBOPACK__imported__module__224339__ = __turbopack_context__.i(224339);
24528// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/metrics/internal.js [app-client] (ecmascript)
24529;
24530var __TURBOPACK__imported__module__759075__ = __turbopack_context__.i(759075);
24531var __TURBOPACK__imported__module__923288__3 = __TURBOPACK__imported__module__923288__;
24532var __TURBOPACK__imported__module__250804__21 = __TURBOPACK__imported__module__250804__;
24533var __TURBOPACK__imported__module__901020__15 = __TURBOPACK__imported__module__901020__;
24534var __TURBOPACK__imported__module__272598__26 = __TURBOPACK__imported__module__272598__;
24535var __TURBOPACK__imported__module__571993__ = __turbopack_context__.i(571993);
24536var __TURBOPACK__imported__module__821061__2 = __TURBOPACK__imported__module__821061__;
24537var __TURBOPACK__imported__module__605394__13 = __TURBOPACK__imported__module__605394__;
24538var __TURBOPACK__imported__module__948826__ = __turbopack_context__.i(948826);
24539var __TURBOPACK__imported__module__805107__ = __turbopack_context__.i(805107);
24540// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/metrics/envelope.js [app-client] (ecmascript)
24541;
24542var __TURBOPACK__imported__module__339435__2 = __TURBOPACK__imported__module__339435__;
24543var __TURBOPACK__imported__module__67486__1 = __TURBOPACK__imported__module__67486__;
24544var __TURBOPACK__imported__module__901538__1 = __TURBOPACK__imported__module__901538__;
24545;
24546;
24547;
24548function createMetricContainerEnvelopeItem(items, inferUserData) {
24549    const inferSetting = inferUserData ? "auto" : "never";
24550    return [
24551        {
24552            type: "trace_metric",
24553            item_count: items.length,
24554            content_type: "application/vnd.sentry.items.trace-metric+json"
24555        },
24556        {
24557            version: 2,
24558            ...(0, __TURBOPACK__imported__module__901538__1["isBrowser"])() && {
24559                ingest_settings: {
24560                    infer_ip: inferSetting,
24561                    infer_user_agent: inferSetting
24562                }
24563            },
24564            items
24565        }
24566    ];
24567}
24568function createMetricEnvelope(metrics, metadata, tunnel, dsn, inferUserData) {
24569    const headers = {};
24570    if (metadata === null || metadata === void 0 ? void 0 : metadata.sdk) {
24571        headers.sdk = {
24572            name: metadata.sdk.name,
24573            version: metadata.sdk.version
24574        };
24575    }
24576    if (!!tunnel && !!dsn) {
24577        headers.dsn = (0, __TURBOPACK__imported__module__339435__2["dsnToString"])(dsn);
24578    }
24579    return (0, __TURBOPACK__imported__module__67486__1["createEnvelope"])(headers, [
24580        createMetricContainerEnvelopeItem(metrics, inferUserData)
24581    ]);
24582}
24583;
24584;
24585;
24586;
24587;
24588;
24589;
24590;
24591;
24592;
24593;
24594;
24595const MAX_METRIC_BUFFER_SIZE = 1e3;
24596function setMetricAttribute(metricAttributes, key, value) {
24597    let setEvenIfPresent = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true;
24598    if (value && (setEvenIfPresent || !(key in metricAttributes))) {
24599        metricAttributes[key] = value;
24600    }
24601}
24602function _INTERNAL_captureSerializedMetric(client, serializedMetric) {
24603    const bufferMap = _getBufferMap();
24604    const metricBuffer = _INTERNAL_getMetricBuffer(client);
24605    if (metricBuffer === void 0) {
24606        bufferMap.set(client, [
24607            serializedMetric
24608        ]);
24609    } else {
24610        if (metricBuffer.length >= MAX_METRIC_BUFFER_SIZE) {
24611            _INTERNAL_flushMetricsBuffer(client, metricBuffer);
24612            bufferMap.set(client, [
24613                serializedMetric
24614            ]);
24615        } else {
24616            bufferMap.set(client, [
24617                ...metricBuffer,
24618                serializedMetric
24619            ]);
24620        }
24621    }
24622}
24623function _enrichMetricAttributes(beforeMetric, client, user) {
24624    var _ref;
24625    var _client_getSdkMetadata;
24626    const { release, environment } = client.getOptions();
24627    const processedMetricAttributes = {
24628        ...beforeMetric.attributes
24629    };
24630    setMetricAttribute(processedMetricAttributes, "user.id", user.id, false);
24631    setMetricAttribute(processedMetricAttributes, "user.email", user.email, false);
24632    setMetricAttribute(processedMetricAttributes, "user.name", user.username, false);
24633    setMetricAttribute(processedMetricAttributes, "sentry.release", release);
24634    setMetricAttribute(processedMetricAttributes, "sentry.environment", environment);
24635    const { name, version } = (_ref = (_client_getSdkMetadata = client.getSdkMetadata()) === null || _client_getSdkMetadata === void 0 ? void 0 : _client_getSdkMetadata.sdk) !== null && _ref !== void 0 ? _ref : {};
24636    setMetricAttribute(processedMetricAttributes, "sentry.sdk.name", name);
24637    setMetricAttribute(processedMetricAttributes, "sentry.sdk.version", version);
24638    const replay = client.getIntegrationByName("Replay");
24639    const replayId = replay === null || replay === void 0 ? void 0 : replay.getReplayId(true);
24640    setMetricAttribute(processedMetricAttributes, "sentry.replay_id", replayId);
24641    if (replayId && (replay === null || replay === void 0 ? void 0 : replay.getRecordingMode()) === "buffer") {
24642        setMetricAttribute(processedMetricAttributes, "sentry._internal.replay_is_buffering", true);
24643    }
24644    return {
24645        ...beforeMetric,
24646        attributes: processedMetricAttributes
24647    };
24648}
24649function _buildSerializedMetric(metric, client, currentScope, scopeAttributes) {
24650    const [, traceContext] = (0, __TURBOPACK__imported__module__805107__["_getTraceInfoFromScope"])(client, currentScope);
24651    const span = (0, __TURBOPACK__imported__module__821061__2["_getSpanForScope"])(currentScope);
24652    const traceId = span ? span.spanContext().traceId : traceContext === null || traceContext === void 0 ? void 0 : traceContext.trace_id;
24653    const spanId = span ? span.spanContext().spanId : void 0;
24654    const timestamp = (0, __TURBOPACK__imported__module__605394__13["timestampInSeconds"])();
24655    const sequenceAttr = (0, __TURBOPACK__imported__module__948826__["getSequenceAttribute"])(timestamp);
24656    return {
24657        timestamp,
24658        trace_id: traceId !== null && traceId !== void 0 ? traceId : "",
24659        span_id: spanId,
24660        name: metric.name,
24661        type: metric.type,
24662        unit: metric.unit,
24663        value: metric.value,
24664        attributes: {
24665            ...(0, __TURBOPACK__imported__module__759075__["serializeAttributes"])(scopeAttributes),
24666            ...(0, __TURBOPACK__imported__module__759075__["serializeAttributes"])(metric.attributes, "skip-undefined"),
24667            [sequenceAttr.key]: sequenceAttr.value
24668        }
24669    };
24670}
24671function _INTERNAL_captureMetric(beforeMetric, options) {
24672    var _ref, _ref1, _ref2, _ref3;
24673    const currentScope = (_ref = options === null || options === void 0 ? void 0 : options.scope) !== null && _ref !== void 0 ? _ref : (0, __TURBOPACK__imported__module__250804__21["getCurrentScope"])();
24674    const captureSerializedMetric = (_ref1 = options === null || options === void 0 ? void 0 : options.captureSerializedMetric) !== null && _ref1 !== void 0 ? _ref1 : _INTERNAL_captureSerializedMetric;
24675    const client = (_ref2 = currentScope === null || currentScope === void 0 ? void 0 : currentScope.getClient()) !== null && _ref2 !== void 0 ? _ref2 : (0, __TURBOPACK__imported__module__250804__21["getClient"])();
24676    if (!client) {
24677        __TURBOPACK__imported__module__901020__15["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__26["debug"].warn("No client available to capture metric.");
24678        return;
24679    }
24680    const { _experiments, enableMetrics, beforeSendMetric } = client.getOptions();
24681    const metricsEnabled = (_ref3 = enableMetrics !== null && enableMetrics !== void 0 ? enableMetrics : _experiments === null || _experiments === void 0 ? void 0 : _experiments.enableMetrics) !== null && _ref3 !== void 0 ? _ref3 : true;
24682    if (!metricsEnabled) {
24683        __TURBOPACK__imported__module__901020__15["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__26["debug"].warn("metrics option not enabled, metric will not be captured.");
24684        return;
24685    }
24686    const { user, attributes: scopeAttributes } = (0, __TURBOPACK__imported__module__571993__["getCombinedScopeData"])((0, __TURBOPACK__imported__module__250804__21["getIsolationScope"])(), currentScope);
24687    const enrichedMetric = _enrichMetricAttributes(beforeMetric, client, user);
24688    client.emit("processMetric", enrichedMetric);
24689    const beforeSendCallback = beforeSendMetric || (_experiments === null || _experiments === void 0 ? void 0 : _experiments.beforeSendMetric);
24690    const processedMetric = beforeSendCallback ? beforeSendCallback(enrichedMetric) : enrichedMetric;
24691    if (!processedMetric) {
24692        __TURBOPACK__imported__module__901020__15["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__26["debug"].log("`beforeSendMetric` returned `null`, will not send metric.");
24693        return;
24694    }
24695    const serializedMetric = _buildSerializedMetric(processedMetric, client, currentScope, scopeAttributes);
24696    __TURBOPACK__imported__module__901020__15["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__26["debug"].log("[Metric]", serializedMetric);
24697    captureSerializedMetric(client, serializedMetric);
24698    client.emit("afterCaptureMetric", processedMetric);
24699}
24700function _INTERNAL_flushMetricsBuffer(client, maybeMetricBuffer) {
24701    var _ref;
24702    const metricBuffer = (_ref = maybeMetricBuffer !== null && maybeMetricBuffer !== void 0 ? maybeMetricBuffer : _INTERNAL_getMetricBuffer(client)) !== null && _ref !== void 0 ? _ref : [];
24703    if (metricBuffer.length === 0) {
24704        return;
24705    }
24706    const clientOptions = client.getOptions();
24707    const envelope = createMetricEnvelope(metricBuffer, clientOptions._metadata, clientOptions.tunnel, client.getDsn(), client.getDataCollectionOptions().userInfo);
24708    _getBufferMap().set(client, []);
24709    client.emit("flushMetrics");
24710    client.sendEnvelope(envelope);
24711}
24712function _INTERNAL_getMetricBuffer(client) {
24713    return _getBufferMap().get(client);
24714}
24715function _getBufferMap() {
24716    return (0, __TURBOPACK__imported__module__923288__3["getGlobalSingleton"])("clientToMetricBufferMap", ()=>/* @__PURE__ */ new WeakMap());
24717}
24718;
24719var __TURBOPACK__imported__module__341041__ = __turbopack_context__.i(341041);
24720var __TURBOPACK__imported__module__473753__5 = __TURBOPACK__imported__module__473753__;
24721// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/spans/extractGenAiSpans.js [app-client] (ecmascript)
24722;
24723var __TURBOPACK__imported__module__901538__2 = __TURBOPACK__imported__module__901538__;
24724// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/spans/spanJsonToStreamedSpan.js [app-client] (ecmascript)
24725;
24726var __TURBOPACK__imported__module__304661__18 = __TURBOPACK__imported__module__304661__;
24727;
24728function spanJsonToSerializedStreamedSpan(span) {
24729    const streamedSpan = {
24730        trace_id: span.trace_id,
24731        span_id: span.span_id,
24732        parent_span_id: span.parent_span_id,
24733        name: span.description || "",
24734        start_timestamp: span.start_timestamp,
24735        end_timestamp: span.timestamp || span.start_timestamp,
24736        status: !span.status || span.status === "ok" || span.status === "cancelled" ? "ok" : "error",
24737        is_segment: false,
24738        attributes: {
24739            ...span.data
24740        },
24741        links: span.links
24742    };
24743    return (0, __TURBOPACK__imported__module__304661__18["streamedSpanJsonToSerializedSpan"])(streamedSpan);
24744}
24745;
24746;
24747;
24748;
24749function extractGenAiSpansFromEvent(event, client) {
24750    var _event_spans, _event_sdkProcessingMetadata;
24751    if (event.type !== "transaction" || !((_event_spans = event.spans) === null || _event_spans === void 0 ? void 0 : _event_spans.length) || !((_event_sdkProcessingMetadata = event.sdkProcessingMetadata) === null || _event_sdkProcessingMetadata === void 0 ? void 0 : _event_sdkProcessingMetadata.hasGenAiSpans) || client.getOptions().streamGenAiSpans === false || hasSpanStreamingEnabled(client)) {
24752        return void 0;
24753    }
24754    const genAiSpans = [];
24755    const remainingSpans = [];
24756    for (const span of event.spans){
24757        var _span_op;
24758        if ((_span_op = span.op) === null || _span_op === void 0 ? void 0 : _span_op.startsWith("gen_ai.")) {
24759            genAiSpans.push(spanJsonToSerializedStreamedSpan(span));
24760        } else {
24761            remainingSpans.push(span);
24762        }
24763    }
24764    if (genAiSpans.length === 0) {
24765        return void 0;
24766    }
24767    event.spans = remainingSpans;
24768    const inferSetting = client.getDataCollectionOptions().userInfo ? "auto" : "never";
24769    return [
24770        {
24771            type: "span",
24772            item_count: genAiSpans.length,
24773            content_type: "application/vnd.sentry.items.span.v2+json"
24774        },
24775        {
24776            version: 2,
24777            ...(0, __TURBOPACK__imported__module__901538__2["isBrowser"])() && {
24778                ingest_settings: {
24779                    infer_ip: inferSetting,
24780                    infer_user_agent: inferSetting
24781                }
24782            },
24783            items: genAiSpans
24784        }
24785    ];
24786}
24787;
24788// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/transports/base.js [app-client] (ecmascript)
24789;
24790var __TURBOPACK__imported__module__901020__16 = __TURBOPACK__imported__module__901020__;
24791var __TURBOPACK__imported__module__272598__27 = __TURBOPACK__imported__module__272598__;
24792var __TURBOPACK__imported__module__67486__2 = __TURBOPACK__imported__module__67486__;
24793// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/promisebuffer.js [app-client] (ecmascript)
24794;
24795var __TURBOPACK__imported__module__580611__ = __turbopack_context__.i(580611);
24796// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/timer.js [app-client] (ecmascript)
24797;
24798function safeUnref(timer) {
24799    if (typeof timer === "object" && typeof timer.unref === "function") {
24800        timer.unref();
24801    }
24802    return timer;
24803}
24804;
24805;
24806;
24807const SENTRY_BUFFER_FULL_ERROR = /* @__PURE__ */ Symbol.for("SentryBufferFullError");
24808function makePromiseBuffer() {
24809    let limit = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 100;
24810    const buffer = /* @__PURE__ */ new Set();
24811    function isReady() {
24812        return buffer.size < limit;
24813    }
24814    function remove(task) {
24815        buffer.delete(task);
24816    }
24817    function add(taskProducer) {
24818        if (!isReady()) {
24819            return (0, __TURBOPACK__imported__module__580611__["rejectedSyncPromise"])(SENTRY_BUFFER_FULL_ERROR);
24820        }
24821        const task = taskProducer();
24822        buffer.add(task);
24823        void task.then(()=>remove(task), ()=>remove(task));
24824        return task;
24825    }
24826    function drain(timeout) {
24827        if (!buffer.size) {
24828            return (0, __TURBOPACK__imported__module__580611__["resolvedSyncPromise"])(true);
24829        }
24830        const drainPromise = Promise.allSettled(Array.from(buffer)).then(()=>true);
24831        if (!timeout) {
24832            return drainPromise;
24833        }
24834        const promises = [
24835            drainPromise,
24836            new Promise((resolve)=>safeUnref(setTimeout(()=>resolve(false), timeout)))
24837        ];
24838        return Promise.race(promises);
24839    }
24840    return {
24841        get $ () {
24842            return Array.from(buffer);
24843        },
24844        add,
24845    
24845    drain
24846    };
24847}
24848;
24849// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/ratelimit.js [app-client] (ecmascript)
24850;
24851var __TURBOPACK__imported__module__111139__2 = __TURBOPACK__imported__module__111139__;
24852;
24853const DEFAULT_RETRY_AFTER = 60 * 1e3;
24854function parseRetryAfterHeader(header) {
24855    let now = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : (0, __TURBOPACK__imported__module__111139__2["safeDateNow"])();
24856    const headerDelay = parseInt("".concat(header), 10);
24857    if (!isNaN(headerDelay)) {
24858        return headerDelay * 1e3;
24859    }
24860    const headerDate = Date.parse("".concat(header));
24861    if (!isNaN(headerDate)) {
24862        return headerDate - now;
24863    }
24864    return DEFAULT_RETRY_AFTER;
24865}
24866function disabledUntil(limits, dataCategory) {
24867    return limits[dataCategory] || limits.all || 0;
24868}
24869function isRateLimited(limits, dataCategory) {
24870    let now = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : (0, __TURBOPACK__imported__module__111139__2["safeDateNow"])();
24871    return disabledUntil(limits, dataCategory) > now;
24872}
24873function updateRateLimits(limits, param) {
24874    let { statusCode, headers } = param, now = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : (0, __TURBOPACK__imported__module__111139__2["safeDateNow"])();
24875    const updatedRateLimits = {
24876        ...limits
24877    };
24878    const rateLimitHeader = headers === null || headers === void 0 ? void 0 : headers["x-sentry-rate-limits"];
24879    const retryAfterHeader = headers === null || headers === void 0 ? void 0 : headers["retry-after"];
24880    if (rateLimitHeader) {
24881        for (const limit of rateLimitHeader.trim().split(",")){
24882            const [retryAfter, categories, , , namespaces] = limit.split(":", 5);
24883            const headerDelay = parseInt(retryAfter, 10);
24884            const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1e3;
24885            if (!categories) {
24886                updatedRateLimits.all = now + delay;
24887            } else {
24888                for (const category of categories.split(";")){
24889                    if (category === "metric_bucket") {
24890                        if (!namespaces || namespaces.split(";").includes("custom")) {
24891                            updatedRateLimits[category] = now + delay;
24892                        }
24893                    } else {
24894                        updatedRateLimits[category] = now + delay;
24895                    }
24896                }
24897            }
24898        }
24899    } else if (retryAfterHeader) {
24900        updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);
24901    } else if (statusCode === 429) {
24902        updatedRateLimits.all = now + 60 * 1e3;
24903    }
24904    return updatedRateLimits;
24905}
24906;
24907;
24908;
24909;
24910;
24911;
24912const DEFAULT_TRANSPORT_BUFFER_SIZE = 64;
24913function createTransport(options, makeRequest) {
24914    let buffer = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : makePromiseBuffer(options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE);
24915    let rateLimits = {};
24916    const flush = (timeout)=>buffer.drain(timeout);
24917    function send(envelope) {
24918        const filteredEnvelopeItems = [];
24919        (0, __TURBOPACK__imported__module__67486__2["forEachEnvelopeItem"])(envelope, (item, type)=>{
24920            const dataCategory = (0, __TURBOPACK__imported__module__67486__2["envelopeItemTypeToDataCategory"])(type);
24921            if (isRateLimited(rateLimits, dataCategory)) {
24922                options.recordDroppedEvent("ratelimit_backoff", dataCategory);
24923            } else {
24924                filteredEnvelopeItems.push(item);
24925            }
24926        });
24927        if (filteredEnvelopeItems.length === 0) {
24928            return Promise.resolve({});
24929        }
24930        const filteredEnvelope = (0, __TURBOPACK__imported__module__67486__2["createEnvelope"])(envelope[0], filteredEnvelopeItems);
24931        const recordEnvelopeLoss = (reason)=>{
24932            if ((0, __TURBOPACK__imported__module__67486__2["envelopeContainsItemType"])(filteredEnvelope, [
24933                "client_report"
24934            ])) {
24935                __TURBOPACK__imported__module__901020__16["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__27["debug"].warn("Dropping client report. Will not send outcomes (reason: ".concat(reason, ")."));
24936                return;
24937            }
24938            (0, __TURBOPACK__imported__module__67486__2["forEachEnvelopeItem"])(filteredEnvelope, (item, type)=>{
24939                options.recordDroppedEvent(reason, (0, __TURBOPACK__imported__module__67486__2["envelopeItemTypeToDataCategory"])(type));
24940            });
24941        };
24942        const requestTask = ()=>
24942makeRequest({
24943                body: (0, __TURBOPACK__imported__module__67486__2["serializeEnvelope"])(filteredEnvelope)
24944            }).then((response)=>{
24945                if (response.statusCode === 413) {
24946                    __TURBOPACK__imported__module__901020__16["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__27["debug"].error("Sentry responded with status code 413. Envelope was discarded due to exceeding size limits.");
24947                    recordEnvelopeLoss("send_error");
24948                    return response;
24949                }
24950                if (__TURBOPACK__imported__module__901020__16["DEBUG_BUILD"] && response.statusCode !== void 0 && (response.statusCode < 200 || response.statusCode >= 300)) {
24951                    __TURBOPACK__imported__module__272598__27["debug"].warn("Sentry responded with status code ".concat(response.statusCode, " to sent event."));
24952                }
24953                rateLimits = updateRateLimits(rateLimits, response);
24954                return response;
24955            }, (error)=>{
24956                recordEnvelopeLoss("network_error");
24957                __TURBOPACK__imported__module__901020__16["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__27["debug"].error("Encountered error running transport request:", error);
24958                throw error;
24959            });
24960        return buffer.add(requestTask).then((result)=>result, (error)=>{
24961            if (error === SENTRY_BUFFER_FULL_ERROR) {
24962                __TURBOPACK__imported__module__901020__16["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__27["debug"].error("Skipped sending event because buffer is full.");
24963                recordEnvelopeLoss("queue_overflow");
24964                return Promise.resolve({});
24965            } else {
24966                throw error;
24967            }
24968        });
24969    }
24970    return {
24971        send,
24972        flush
24973    };
24974}
24975;
24976// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/clientreport.js [app-client] (ecmascript)
24977;
24978var __TURBOPACK__imported__module__67486__3 = __TURBOPACK__imported__module__67486__;
24979var __TURBOPACK__imported__module__605394__14 = __TURBOPACK__imported__module__605394__;
24980;
24981;
24982function createClientReportEnvelope(discarded_events, dsn, timestamp) {
24983    const clientReportItem = [
24984        {
24985            type: "client_report"
24986        },
24987        {
24988            timestamp: timestamp || (0, __TURBOPACK__imported__module__605394__14["dateTimestampInSeconds"])(),
24989            discarded_events
24990        }
24991    ];
24992    return (0, __TURBOPACK__imported__module__67486__3["createEnvelope"])(dsn ? {
24993        dsn
24994    } : {}, [
24995        clientReportItem
24996    ]);
24997}
24998;
24999var __TURBOPACK__imported__module__272598__28 = __TURBOPACK__imported__module__272598__;
25000var __TURBOPACK__imported__module__339435__3 = __TURBOPACK__imported__module__339435__;
25001var __TURBOPACK__imported__module__67486__4 = __TURBOPACK__imported__module__67486__;
25002var __TURBOPACK__imported__module__453288__7 = __TURBOPACK__imported__module__453288__;
25003var __TURBOPACK__imported__module__318746__ = __turbopack_context__.i(318746);
25004var __TURBOPACK__imported__module__682564__2 = __TURBOPACK__imported__module__682564__;
25005var __TURBOPACK__imported__module__170637__2 = __TURBOPACK__imported__module__170637__;
25006var __TURBOPACK__imported__module__213186__ = __turbopack_context__.i(213186);
25007var __TURBOPACK__imported__module__111139__3 = __TURBOPACK__imported__module__111139__;
25008var __TURBOPACK__imported__module__304661__19 = __TURBOPACK__imported__module__304661__;
25009// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/transactionEvent.js [app-client] (ecmascript)
25010;
25011var __TURBOPACK__imported__module__519988__17 = __TURBOPACK__imported__module__519988__;
25012;
25013function convertTransactionEventToSpanJson(event) {
25014    var _ref, _event_start_timestamp;
25015    var _event_contexts;
25016    const { trace_id, parent_span_id, span_id, status, origin, data, op } = (_ref = (_event_contexts = event.contexts) === null || _event_contexts === void 0 ? void 0 : _event_contexts.trace) !== null && _ref !== void 0 ? _ref : {};
25017    return {
25018        data: data !== null && data !== void 0 ? data : {},
25019        description: event.transaction,
25020        op,
25021        parent_span_id,
25022        span_id: span_id !== null && span_id !== void 0 ? span_id : "",
25023        start_timestamp: (_event_start_timestamp = event.start_timestamp) !== null && _event_start_timestamp !== void 0 ? _event_start_timestamp : 0,
25024        status,
25025        timestamp: event.timestamp,
25026        trace_id: trace_id !== null && trace_id !== void 0 ? trace_id : "",
25027        origin,
25028        profile_id: data === null || data === void 0 ? void 0 : data[__TURBOPACK__imported__module__519988__17["SEMANTIC_ATTRIBUTE_PROFILE_ID"]],
25029        exclusive_time: data === null || data === void 0 ? void 0 : data[__TURBOPACK__imported__module__519988__17["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]],
25030        measurements: event.measurements,
25031        is_segment: true
25032    };
25033}
25034function convertSpanJsonToTransactionEvent(span) {
25035    return {
25036        type: "transaction",
25037        timestamp: span.timestamp,
25038        start_timestamp: span.start_timestamp,
25039        transaction: span.description,
25040        contexts: {
25041            trace: {
25042                trace_id: span.trace_id,
25043                span_id: span.span_id,
25044                parent_span_id: span.parent_span_id,
25045                op: span.op,
25046                status: span.status,
25047                origin: span.origin,
25048                data: {
25049                    ...span.data,
25050                    ...span.profile_id && {
25051                        [__TURBOPACK__imported__module__519988__17["SEMANTIC_ATTRIBUTE_PROFILE_ID"]]: span.profile_id
25052                    },
25053                    ...span.exclusive_time && {
25054                        [__TURBOPACK__imported__module__519988__17["SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME"]]: span.exclusive_time
25055                    }
25056                }
25057            }
25058        },
25059        measurements: span.measurements
25060    };
25061}
25062;
25063// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/data-collection/resolveDataCollectionOptions.js [app-client] (ecmascript)
25064;
25065// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/data-collection/defaultPiiToCollectionOptions.js [app-client] (ecmascript)
25066;
25067// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/data-collection/filtering-snippets.js [app-client] (ecmascript)
25068;
25069const FILTERED_VALUE = "[Filtered]";
25070const PII_HEADER_SNIPPETS = [
25071    "forwarded",
25072    "-ip",
25073    "remote-",
25074    "via",
25075    "-user"
25076];
25077const SENSITIVE_KEY_SNIPPETS = [
25078    "auth",
25079    "token",
25080    "secret",
25081    "session",
25082    // for the user_session cookie
25083    "password",
25084    "passwd",
25085    "pwd",
25086    "key",
25087    "jwt",
25088    "bearer",
25089    "sso",
25090    "saml",
25091    "csrf",
25092    "xsrf",
25093    "credentials",
25094    "sid",
25095    "identity",
25096    // Always treat cookie headers as sensitive in case individual key-value cookie pairs cannot properly be extracted
25097    "set-cookie",
25098    "cookie"
25099];
25100const SENSITIVE_COOKIE_NAME_SNIPPETS = [
25101    // Express / Connect default session cookie
25102    ".sid",
25103    // Opaque session ids (PHPSESSID, ASPSESSIONID*, BIGipServer*, *sessid*, …)
25104    "sessid",
25105    // Laravel etc. "remember me" tokens
25106    "remember",
25107    // OIDC / OAuth auxiliary (`oauth*` covered by header snippet `auth`)
25108    "oidc",
25109    "pkce",
25110    "nonce",
25111    // RFC 6265bis high-security cookie name prefixes
25112    "__secure-",
25113    "__host-",
25114    // Load balancer / CDN sticky-session cookies (opaque routing tokens)
25115    "awsalb",
25116    "awselb",
25117    "akamai",
25118    // BaaS / IdP session cookies (names often omit "session")
25119    "__stripe",
25120    "cognito",
25121    "firebase",
25122    "supabase",
25123    "sb-",
25124    // Step-up / MFA cookies
25125    "mfa",
25126    "2fa"
25127];
25128;
25129;
25130function defaultPiiToCollectionOptions(sendDefaultPii) {
25131    return sendDefaultPii === true ? {
25132        userInfo: true,
25133        cookies: true,
25134        httpHeaders: {
25135            request: true,
25136            response: true
25137        },
25138        httpBodies: [
25139            "incomingRequest",
25140            "outgoingRequest",
25141            "incomingResponse",
25142            "outgoingResponse"
25143        ],
25144        urlQueryParams: true,
25145        graphQL: {
25146            document: true,
25147            variables: true
25148        },
25149        genAI: {
25150            inputs: true,
25151            outputs: true
25152        },
25153        databaseQueryData: true,
25154        stackFrameVariables: true,
25155        frameContextLines: 7
25156    } : {
25157        userInfo: false,
25158        cookies: {
25159            deny: PII_HEADER_SNIPPETS
25160        },
25161        httpHeaders: {
25162            request: {
25163                deny: PII_HEADER_SNIPPETS
25164            },
25165            response: {
25166                deny: PII_HEADER_SNIPPETS
25167            }
25168        },
25169        httpBodies: [],
25170        urlQueryParams: {
25171            deny: PII_HEADER_SNIPPETS
25172        },
25173        // The GraphQL document has literal values redacted at collection time, so it was historically
25174        // always attached regardless of `sendDefaultPii`; keep it on to preserve that behavior.
25175        graphQL: {
25176            document: true,
25177            variables: true
25178        },
25179        genAI: {
25180            inputs: false,
25181            outputs: false
25182        },
25183        // Database query values were only sent with `sendDefaultPii: true` (e.g. Supabase gated on it),
25184        // so map the legacy "off" state to `false`.
25185        databaseQueryData: false,
25186        stackFrameVariables: true,
25187        frameContextLines: 7
25188    };
25189}
25190;
25191;
25192const DEFAULTS = {
25193    userInfo: true,
25194    cookies: true,
25195    httpHeaders: {
25196        request: true,
25197        response: true
25198    },
25199    httpBodies: [
25200        "incomingRequest",
25201        "outgoingRequest",
25202        "incomingResponse",
25203        "outgoingResponse"
25204    ],
25205    urlQueryParams: true,
25206    graphQL: {
25207        document: true,
25208        variables: true
25209    },
25210    genAI: {
25211        inputs: true,
25212        outputs: true
25213    },
25214    databaseQueryData: true,
25215    stackFrameVariables: true,
25216    frameContextLines: 5
25217};
25218function resolveDataCollectionOptions(options) {
25219    var _options_dataCollection, _dc_userInfo, _dc_cookies, _ref, _ref1, _dc_httpBodies, _ref2, _dc_urlQueryParams, _ref3, _ref4, _ref5, _ref6, _dc_databaseQueryData, _dc_stackFrame
25219Variables, _dc_frameContextLines;
25220    var _dc_httpHeaders, _dc_httpHeaders1, _dc_graphQL, _dc_graphQL1, _dc_genAI, _dc_genAI1;
25221    const base = options.dataCollection != null ? DEFAULTS : defaultPiiToCollectionOptions(options.sendDefaultPii);
25222    const dc = (_options_dataCollection = options.dataCollection) !== null && _options_dataCollection !== void 0 ? _options_dataCollection : {};
25223    return {
25224        userInfo: (_dc_userInfo = dc.userInfo) !== null && _dc_userInfo !== void 0 ? _dc_userInfo : base.userInfo,
25225        cookies: (_dc_cookies = dc.cookies) !== null && _dc_cookies !== void 0 ? _dc_cookies : base.cookies,
25226        httpHeaders: {
25227            request: (_ref = (_dc_httpHeaders = dc.httpHeaders) === null || _dc_httpHeaders === void 0 ? void 0 : _dc_httpHeaders.request) !== null && _ref !== void 0 ? _ref : base.httpHeaders.request,
25228            response: (_ref1 = (_dc_httpHeaders1 = dc.httpHeaders) === null || _dc_httpHeaders1 === void 0 ? void 0 : _dc_httpHeaders1.response) !== null && _ref1 !== void 0 ? _ref1 : base.httpHeaders.response
25229        },
25230        httpBodies: (_dc_httpBodies = dc.httpBodies) !== null && _dc_httpBodies !== void 0 ? _dc_httpBodies : base.httpBodies,
25231        // oxlint-disable-next-line typescript/no-deprecated
25232        urlQueryParams: (_ref2 = (_dc_urlQueryParams = dc.urlQueryParams) !== null && _dc_urlQueryParams !== void 0 ? _dc_urlQueryParams : dc.queryParams) !== null && _ref2 !== void 0 ? _ref2 : base.urlQueryParams,
25233        graphQL: {
25234            document: (_ref3 = (_dc_graphQL = dc.graphQL) === null || _dc_graphQL === void 0 ? void 0 : _dc_graphQL.document) !== null && _ref3 !== void 0 ? _ref3 : base.graphQL.document,
25235            variables: (_ref4 = (_dc_graphQL1 = dc.graphQL) === null || _dc_graphQL1 === void 0 ? void 0 : _dc_graphQL1.variables) !== null && _ref4 !== void 0 ? _ref4 : base.graphQL.variables
25236        },
25237        genAI: {
25238            inputs: (_ref5 = (_dc_genAI = dc.genAI) === null || _dc_genAI === void 0 ? void 0 : _dc_genAI.inputs) !== null && _ref5 !== void 0 ? _ref5 : base.genAI.inputs,
25239            outputs: (_ref6 = (_dc_genAI1 = dc.genAI) === null || _dc_genAI1 === void 0 ? void 0 : _dc_genAI1.outputs) !== null && _ref6 !== void 0 ? _ref6 : base.genAI.outputs
25240        },
25241        databaseQueryData: (_dc_databaseQueryData = dc.databaseQueryData) !== null && _dc_databaseQueryData !== void 0 ? _dc_databaseQueryData : base.databaseQueryData,
25242        stackFrameVariables: (_dc_stackFrameVariables = dc.stackFrameVariables) !== null && _dc_stackFrameVariables !== void 0 ? _dc_stackFrameVariables : base.stackFrameVariables,
25243        frameContextLines: (_dc_frameContextLines = dc.frameContextLines) !== null && _dc_frameContextLines !== void 0 ? _dc_frameContextLines : base.frameContextLines
25244    };
25245}
25246;
25247;
25248;
25249;
25250;
25251;
25252;
25253;
25254;
25255;
25256;
25257;
25258;
25259;
25260;
25261;
25262;
25263;
25264;
25265;
25266;
25267;
25268;
25269;
25270;
25271;
25272;
25273;
25274;
25275;
25276;
25277const ALREADY_SEEN_ERROR = "Not capturing exception because it's already been captured.";
25278const MISSING_RELEASE_FOR_SESSION_ERROR = "Discarded session because of missing or non-string release";
25279const INTERNAL_ERROR_SYMBOL = /* @__PURE__ */ Symbol.for("SentryInternalError");
25280const DO_NOT_SEND_EVENT_SYMBOL = /* @__PURE__ */ Symbol.for("SentryDoNotSendEventError");
25281const DEFAULT_FLUSH_INTERVAL = 5e3;
25282function _makeInternalError(message) {
25283    return {
25284        message,
25285        [INTERNAL_ERROR_SYMBOL]: true
25286    };
25287}
25288function _makeDoNotSendEventError(message) {
25289    return {
25290        message,
25291        [DO_NOT_SEND_EVENT_SYMBOL]: true
25292    };
25293}
25294function _isInternalError(error) {
25295    return (0, __TURBOPACK__imported__module__453288__7["isObjectLike"])(error) && INTERNAL_ERROR_SYMBOL in error;
25296}
25297function _isDoNotSendEventError(error) {
25298    return (0, __TURBOPACK__imported__module__453288__7["isObjectLike"])(error) && DO_NOT_SEND_EVENT_SYMBOL in error;
25299}
25300function setupWeightBasedFlushing(client, afterCaptureHook, flushHook, estimateSizeFn, flushFn) {
25301    let weight = 0;
25302    let flushTimeout;
25303    let isTimerActive = false;
25304    client.on(flushHook, ()=>{
25305        weight = 0;
25306        clearTimeout(flushTimeout);
25307        isTimerActive = false;
25308    });
25309    client.on(afterCaptureHook, (item)=>{
25310        weight += estimateSizeFn(item);
25311        if (weight >= 8e5) {
25312            flushFn(client);
25313        } else if (!isTimerActive) {
25314            var _client_getOptions__flushInterval;
25315            const flushInterval = (_client_getOptions__flushInterval = client.getOptions()._flushInterval) !== null && _client_getOptions__flushInterval !== void 0 ? _client_getOptions__flushInterval : DEFAULT_FLUSH_INTERVAL;
25316            if (flushInterval > 0) {
25317                isTimerActive = true;
25318                flushTimeout = safeUnref(setTimeout(()=>{
25319                    flushFn(client);
25320                }, flushInterval));
25321            }
25322        }
25323    });
25324    client.on("flush", ()=>{
25325        flushFn(client);
25326    });
25327}
25328class Client {
25329    /**
25330   * Captures an exception event and sends it to Sentry.
25331   *
25332   * Unlike `captureException` exported from every SDK, this method requires that you pass it the current scope.
25333   */ captureException(exception, hint, scope) {
25334        const eventId = (0, __TURBOPACK__imported__module__682564__2["uuid4"])();
25335        if ((0, __TURBOPACK__imported__module__682564__2["checkOrSetAlreadyCaught"])(exception)) {
25336            __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].log(ALREADY_SEEN_ERROR);
25337            return eventId;
25338        }
25339        const hintWithEventId = {
25340            event_id: eventId,
25341            ...hint
25342        };
25343        this._process(()=>this.eventFromException(exception, hintWithEventId).then((event)=>this._captureEvent(event, hintWithEventId, scope)).then((res)=>res), "error");
25344        return hintWithEventId.event_id;
25345    }
25346    /**
25347   * Captures a message event and sends it to Sentry.
25348   *
25349   * Unlike `captureMessage` exported from every SDK, this method requires that you pass it the current scope.
25350   */ captureMessage(message, level, hint, currentScope) {
25351        const hintWithEventId = {
25352            event_id: (0, __TURBOPACK__imported__module__682564__2["uuid4"])(),
25353            ...hint
25354        };
25355        const eventMessage = (0, __TURBOPACK__imported__module__453288__7["isParameterizedString"])(message) ? message : String(message);
25356        const isMessage = (0, __TURBOPACK__imported__module__453288__7["isPrimitive"])(message);
25357        const promisedEvent = isMessage ? this.eventFromMessage(eventMessage, level, hintWithEventId) : this.eventFromException(message, hintWithEventId);
25358        this._process(()=>promisedEvent.then((event)=>this._captureEvent(event, hintWithEventId, currentScope)), isMessage ? "unknown" : "error");
25359        return hintWithEventId.event_id;
25360    }
25361    /**
25362   * Captures a manually created event and sends it to Sentry.
25363   *
25364   * Unlike `captureEvent` exported from every SDK, this method requires that you pass it the current scope.
25365   */ captureEvent(event, hint, currentScope) {
25366        const eventId = (0, __TURBOPACK__imported__module__682564__2["uuid4"])();
25367        if ((hint === null || hint === void 0 ? void 0 : hint.originalException) && (0, __TURBOPACK__imported__module__682564__2["checkOrSetAlreadyCaught"])(hint.originalException)) {
25368            __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].log(ALREADY_SEEN_E
25368RROR);
25369            return eventId;
25370        }
25371        const hintWithEventId = {
25372            event_id: eventId,
25373            ...hint
25374        };
25375        const sdkProcessingMetadata = event.sdkProcessingMetadata || {};
25376        const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;
25377        const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;
25378        const dataCategory = getDataCategoryByType(event.type);
25379        this._process(()=>this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope), dataCategory);
25380        return hintWithEventId.event_id;
25381    }
25382    /**
25383   * Captures a session.
25384   */ captureSession(session) {
25385        this.sendSession(session);
25386        (0, __TURBOPACK__imported__module__341041__["updateSession"])(session, {
25387            init: false
25388        });
25389    }
25390    /**
25391   * Get the current Dsn.
25392   */ getDsn() {
25393        return this._dsn;
25394    }
25395    /**
25396   * Get the current options.
25397   */ getOptions() {
25398        return this._options;
25399    }
25400    /**
25401   * Get the resolved data collection configuration.
25402   */ getDataCollectionOptions() {
25403        return this._dataCollection;
25404    }
25405    /**
25406   * Get the SDK metadata.
25407   * @see SdkMetadata
25408   */ getSdkMetadata() {
25409        return this._options._metadata;
25410    }
25411    /**
25412   * Returns the transport that is used by the client.
25413   * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.
25414   */ getTransport() {
25415        return this._transport;
25416    }
25417    /**
25418   * Wait for all events to be sent or the timeout to expire, whichever comes first.
25419   *
25420   * @param timeout Maximum time in ms the client should wait for events to be flushed. Omitting this parameter will
25421   *   cause the client to wait until all events are sent before resolving the promise.
25422   * @returns A promise that will resolve with `true` if all events are sent before the timeout, or `false` if there are
25423   * still events in the queue when the timeout is reached.
25424   */ // @ts-expect-error - PromiseLike is a subset of Promise
25425    async flush(timeout) {
25426        const transport = this._transport;
25427        this.emit("flush");
25428        if (!transport) {
25429            return true;
25430        }
25431        const clientFinished = await this._isClientDoneProcessing(timeout);
25432        const transportFlushed = await transport.flush(timeout);
25433        return clientFinished && transportFlushed;
25434    }
25435    /**
25436   * Flush the event queue and set the client to `enabled = false`. See {@link Client.flush}.
25437   *
25438   * @param {number} timeout Maximum time in ms the client should wait before shutting down. Omitting this parameter will cause
25439   *   the client to wait until all events are sent before disabling itself.
25440   * @returns {Promise<boolean>} A promise which resolves to `true` if the flush completes successfully before the timeout, or `false` if
25441   * it doesn't.
25442   */ // @ts-expect-error - PromiseLike is a subset of Promise
25443    async close(timeout) {
25444        const result = await this.flush(timeout);
25445        this.getOptions().enabled = false;
25446        this.emit("close");
25447        return result;
25448    }
25449    /**
25450   * Get all installed event processors.
25451   */ getEventProcessors() {
25452        return this._eventProcessors;
25453    }
25454    /**
25455   * Adds an event processor that applies to any event processed by this client.
25456   */ addEventProcessor(eventProcessor) {
25457        this._eventProcessors.push(eventProcessor);
25458    }
25459    /**
25460   * Initialize this client.
25461   * Call this after the client was set on a scope.
25462   */ init() {
25463        if (this._isEnabled() || // Force integrations to be setup even if no DSN was set when we have
25464        // Spotlight enabled. This is particularly important for browser as we
25465        // don't support the `spotlight` option there and rely on the users
25466        // adding the `spotlightBrowserIntegration()` to their integrations which
25467        // wouldn't get initialized with the check below when there's no DSN set.
25468        this._options.integrations.some((param)=>{
25469            let { name } = param;
25470            return name.startsWith("Spotlight");
25471        })) {
25472            this._setupIntegrations();
25473        }
25474    }
25475    /**
25476   * Gets an installed integration by its name.
25477   *
25478   * @returns {Integration|undefined} The installed integration or `undefined` if no integration with that `name` was installed.
25479   */ getIntegrationByName(integrationName) {
25480        return this._integrations[integrationName];
25481    }
25482    /**
25483   * Returns the names of all installed integrations.
25484   */ getIntegrationNames() {
25485        return Object.keys(this._integrations);
25486    }
25487    /**
25488   * Add an integration to the client.
25489   * This can be used to e.g. lazy load integrations.
25490   * In most cases, this should not be necessary,
25491   * and you're better off just passing the integrations via `integrations: []` at initialization time.
25492   * However, if you find the need to conditionally load & add an integration, you can use `addIntegration` to do so.
25493   */ addIntegration(integration) {
25494        const isAlreadyInstalled = this._integrations[integration.name];
25495        if (!isAlreadyInstalled && integration.beforeSetup) {
25496            integration.beforeSetup(this);
25497        }
25498        setupIntegration(this, integration, this._integrations);
25499        if (!isAlreadyInstalled) {
25500            afterSetupIntegrations(this, [
25501                integration
25502            ]);
25503        }
25504    }
25505    /**
25506   * Send a fully prepared event to Sentry.
25507   */ sendEvent(event) {
25508        let hint = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
25509        this.emit("beforeSendEvent", event, hint);
25510        const genAiSpanItem = extractGenAiSpansFromEvent(event, this);
25511        let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);
25512        for (const attachment of hint.attachments || []){
25513            env = (0, __TURBOPACK__imported__module__67486__4["addItemToEnvelope"])(env, (0, __TURBOPACK__imported__module__67486__4["createAttachmentEnvelopeItem"])(attachment));
25514        }
25515        if (genAiSpanItem) {
25516            env = (0, __TURBOPACK__imported__module__67486__4["addItemToEnvelope"])(env, genAiSpanItem);
25517        }
25518        this.sendEnvelope(env).then((sendResponse)=>this.emit("afterSendEvent", event, sendResponse));
25519    }
25520    /**
25521   * Send a session or session aggregrates to Sentry.
25522   */ sendSession(session) {
25523        const { release: clientReleaseOption, environment: clientEnvironmentOption = __TURBOPACK__imported__module__373250__["DEFAULT_ENVIRONMENT"] } = this._options;
25524        if ("aggregates" in session) {
25525            const sessionAttrs = session.attrs || {};
25526            if (!sessionAttrs.release && !clientReleaseOption) {
25527                __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].warn(MISSING_RELEASE_FOR_SESSION_ERROR);
25528                return;
25529            }
25530            sessionAttrs.release = sessionAttrs.release || clientReleaseOption;
25531            sessionAttrs.environment = sessionAttrs.environment || clientEnvironmentOption;
25532            session.attrs = sessionAttrs;
25533        } else {
25534            if (!session.release && !clientReleaseOption) {
25535                __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].warn(MISSING_RELEASE_FOR_SESSION_ERROR);
25536                return;
25537            }
25538            session.release = session.release || clientReleaseOption;
25539            session.environment = session.environment || clientEnvironmentOption;
25540        }
25541        this.emit("beforeSendSession", session);
25542        const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);
25543        this.sendEnvelope(env);
25544    }
25545    /**
25546   * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).
25547   */ recordDroppedEvent(reason, category) {
25548        let count = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1;
25549        if (this._options.sendClientReports) {
25550            const key = "".concat(reason, ":").concat(category);
25551            __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].log('Recording outcome: "'.concat(key, '"').concat(count > 1 ? " (".concat(count, " times)") : ""));
25552            this._outcomes[key] = (this._outcomes[key] || 0) + count;
25553        }
25554    }
25555    /**
25556   * Register a hook on this client.
25557   */ on(hook, callback) {
25558        const hookCallbacks = this._hooks[hook] = this._hooks[hook] || /* @__PURE__ */ new Set();
25559        const uniqueCallback = function() {
25560            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
25561                args[_key] = arguments[_key];
25562            }
25563            return callback(...args);
25564        };
25565        hookCallbacks.add(uniqueCallback);
25566        return ()=>{
25567            hookCallbacks.delete(uniqueCallback);
25568        };
25569    }
25570    /**
25571   * Emit a hook that was previously registered via `on()`.
25572   */ emit(hook) {
25573        for(var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
25574            rest[_key - 1] = arguments[_key];
25575        }
25576        const callbacks = this._hooks[hook];
25577        if (callbacks) {
25578            callbacks.forEach((callback)=>callback(...rest));
25579        }
25580    }
25581    /**
25582   * Send an envelope to Sentry.
25583   */ // @ts-expect-error - PromiseLike is a subset of Promise
25584    async sendEnvelope(envelope) {
25585        this.emit("beforeEnvelope", envelope);
25586        if (this._isEnabled() && this._transport) {
25587            try {
25588                return await this._transport.send(envelope);
25589            } catch (reason) {
25590                __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].error("Error while sending envelope:", reason);
25591                return {};
25592            }
25593        }
25594        __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].error("Transport disabled");
25595        return {};
25596    }
25597    /**
25598   * Register a cleanup function to be called when the client is disposed.
25599   * This is useful for integrations that need to clean up global state.
25600   *
25601   * NOTE: This is a no-op in the base `Client` class. Subclasses like `ServerRuntimeClient`
25602   * override this method to actually register and execute cleanup callbacks.
25603   */ // eslint-disable-next-line @typescript-eslint/no-unused-vars
25604    registerCleanup(callback) {}
25605    /**
25606   * Disposes of the client and releases all resources.
25607   *
25608   * Subclasses should override this method to clean up their own resources, including invoking
25609   * any callbacks registered via {@link Client.registerCleanup}. The base implementation is a
25610   * no-op and does NOT execute registered cleanup callbacks.
25611   *
25612   * After calling dispose(), the client should not be used anymore.
25613   */ dispose() {}
25614    /* eslint-enable @typescript-eslint/unified-signatures */ /** Setup integrations for this client. */ _setupIntegrations() {
25615        const { integrations } = this._options;
25616        this._integrations = setupIntegrations(this, integrations);
25617        afterSetupIntegrations(this, integrations);
25618    }
25619    /** Updates existing session based on the provided event */ _updateSessionFromEvent(session, event) {
25620        var _event_exception;
25621        let crashed = event.level === "fatal";
25622        let errored = false;
25623        const exceptions = (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : _event_exception.values;
25624        if (exceptions) {
25625            errored = true;
25626            crashed = false;
25627            for (const ex of exceptions){
25628                var _ex_mechanism;
25629                if (((_ex_mechanism = ex.mechanism) === null || _ex_mechanism === void 0 ? void 0 : _ex_mechanism.handled) === false) {
25630                    crashed = true;
25631                    break;
25632                }
25633            }
25634        }
25635        const sessionNonTerminal = session.status === "ok";
25636        const shouldUpdateAndSend = sessionNonTerminal && session.errors === 0 || sessionNonTerminal && crashed;
25637        if (shouldUpdateAndSend) {
25638            (0, __TURBOPACK__imported__module__341041__["updateSession"])(session, {
25639                ...crashed && {
25640                    status: "crashed"
25641                },
25642                errors: session.errors || Number(errored || crashed)
25643            });
25644            this.captureSession(session);
25645        }
25646    }
25647    /**
25648   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying
25649   * "no" (resolving to `false`) in order to give the client a chance to potentially finish first.
25650   *
25651   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not
25652   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to
25653   * `true`.
25654   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and
25655   * `false` otherwise
25656   */ async _isClientDoneProcessing(timeout) {
25657        let ticked = 0;
25658        while(!timeout || ticked < timeout){
25659            await new Promise((resolve)=>setTimeout(resolve, 1));
25660            if (!this._numProcessing) {
25661                return true;
25662            }
25663            ticked++;
25664        }
25665        return false;
25666    }
25667    /** Determines whether this SDK is enabled and a transport is present. */ _isEnabled() {
25668        return this.getOptions().enabled !== false && this._transport !== void 0;
25669    }
25670    /**
25671   * Adds common information to events.
25672   *
25673   * The information includes release and environment from `options`,
25674   * breadcrumbs and context (extra, tags and user) from the scope.
25675   *
25676   * Information that is already present in the event is never overwritten. For
25677   * nested objects, such as the context, keys are merged.
25678   *
25679   * @param event The original event.
25680   * @param hint May contain additional information about the original exception.
25681   * @param currentScope A scope containing event metadata.
25682   * @returns A new event with more information.
25683   */ _prepareEvent(event, hint, currentScope, isolationScope) {
25684        const options = this.getOptions();
25685        const integrations = this.getIntegrationNames();
25686        if (!hint.integrations && integrations.length) {
25687            hint.integrations = integrations;
25688        }
25689        this.emit("preprocessEvent", event, hint);
25690        if (!event.type) {
25691            isolationScope.setLastEventId(event.event_id || hint.event_id);
25692        }
25693        return (0, __TURBOPACK__imported__module__213186__["prepareEvent"])(options, event, hint, currentScope, this, isolationScope).then((evt)=>{
25694            var _evt_contexts;
25695            if (evt === null) {
25696                return evt;
25697            }
25698            this.emit("postprocessEvent", evt, hint);
25699            evt.contexts = {
25700                trace: {
25701                    ...(_evt_contexts = evt.contexts) === null || _evt_contexts === void 0 ? void 0 : _evt_contexts.trace,
25702                    ...(0, __TURBOPACK__imported__module__250804__20["getTraceContextFromScope"])(currentScope)
25703                },
25704                ...evt.contexts
25705            };
25706            const dynamicSamplingContext = (0, __TURBOPACK__imported__module__473753__5["getDynamicSamplingContextFromScope"])(this, currentScope);
25707            evt.sdkProcessingMetadata = {
25708                dynamicSamplingContext,
25709                ...evt.sdkProcessingMetadata
25710            };
25711            return evt;
25712        });
25713    }
25714    /**
25715   * Processes the event and logs an error in case of rejection
25716   * @param event
25717   * @param hint
25718   * @param scope
25719   */ _captureEvent(event) {
25720        let hint = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, currentScope = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : (0, __TURBOPACK__imported__module__250804__20["getCurrentScope"])(), isolationScope = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : (0, __TURBOPACK__imported__module__250804__20["getIsolationScope"])();
25721        if (__TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && isErrorEvent(event)) {
25722            __TURBOPACK__imported__module__272598__28["debug"].log("Captured error event `".concat(getPossibleEventMessages(event)[0] || "<unknown>", "`"));
25723        }
25724        return this._processEvent(event, hint, currentScope, isolationScope).then((finalEvent)=>{
25725            return finalEvent.event_id;
25726        }, (reason)=>{
25727            if (__TURBOPACK__imported__module__901020__14["DEBUG_BUILD"]) {
25728                if (_isDoNotSendEventError(reason)) {
25729                    __TURBOPACK__imported__module__272598__28["debug"].log(reason.message);
25730                } else if (_isInternalError(reason)) {
25731                    __TURBOPACK__imported__module__272598__28["debug"].warn(reason.message);
25732                } else {
25733                    __TURBOPACK__imported__module__272598__28["debug"].warn(reason);
25734                }
25735            }
25736            return void 0;
25737        });
25738    }
25739    /**
25740   * Processes an event (either error or message) and sends it to Sentry.
25741   *
25742   * This also adds breadcrumbs and context information to the event. However,
25743   * platform specific meta data (such as the User's IP address) must be added
25744   * by the SDK implementor.
25745   *
25746   *
25747   * @param event The event to send to Sentry.
25748   * @param hint May contain additional information about the original exception.
25749   * @param currentScope A scope containing event metadata.
25750   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.
25751   */ _processEvent(event, hint, currentScope, isolationScope) {
25752        const options = this.getOptions();
25753        const { sampleRate } = options;
25754        const isTransaction = isTransactionEvent(event);
25755        const isError = isErrorEvent(event);
25756        const eventType = event.type || "error";
25757        const beforeSendLabel = "before send for type `".concat(eventType, "`");
25758        const parsedSampleRate = typeof sampleRate === "undefined" ? void 0 : (0, __TURBOPACK__imported__module__170637__2["parseSampleRate"])(sampleRate);
25759        const dataCategory = getDataCategoryByType(event.type);
25760        return this._prepareEvent(event, hint, currentScope, isolationScope).then((prepared)=>{
25761            var _hint_data;
25762            if (prepared === null) {
25763                this.recordDroppedEvent("event_processor", dataCategory);
25764                throw _makeDoNotSendEventError("An event processor returned `null`, will not send event.");
25765            }
25766            const isInternalException = ((_hint_data = hint.data) === null || _hint_data === void 0 ? void 0 : _hint_data.__sentry__) === true;
25767            if (isInternalException) {
25768                return prepared;
25769            }
25770            const result = processBeforeSend(this, options, prepared, hint);
25771            return _validateBeforeSendResult(result, beforeSendLabel);
25772        }).then((processedEvent)=>{
25773            if (processedEvent === null) {
25774                this.recordDroppedEvent("before_send", dataCategory);
25775                if (isTransaction) {
25776                    const spans = event.spans || [];
25777                    const spanCount = 1 + spans.length;
25778                    this.recordDroppedEvent("before_send", "span", spanCount);
25779                }
25780                throw _makeDoNotSendEventError("".concat(beforeSendLabel, " returned `null`, will not send event."));
25781            }
25782            const session = currentScope.getSession() || isolationScope.getSession();
25783            if (isError && session) {
25784                this._updateSessionFromEvent(session, processedEvent);
25785            }
25786            if (isError && typeof parsedSampleRate === "number" && (0, __TURBOPACK__imported__module__111139__3["safeMathRandom"])() > parsedSampleRate) {
25787                this.recordDroppedEvent("sample_rate", "error");
25788                throw _makeDoNotSendEventError("Discarding event because it's not included in the random sample (sampling rate = ".concat(sampleRate, ")"));
25789            }
25790            if (isTransaction) {
25791                var _processedEvent_sdkProcessingMetadata;
25792                const spanCountBefore = ((_processedEvent_sdkProcessingMetadata = processedEvent.sdkProcessingMetadata) === null || _processedEvent_sdkProcessingMetadata === void 0 ? void 0 : _processedEvent_sdkProcessingMetadata.spanCountBeforeProcessing) || 0;
25793                const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;
25794                const droppedSpanCount = spanCountBefore - spanCountAfter;
25795                if (droppedSpanCount > 0) {
25796                    this.recordDroppedEvent("before_send", "span", droppedSpanCount);
25797                }
25798            }
25799            const transactionInfo = processedEvent.transaction_info;
25800            if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {
25801                const source = "custom";
25802                processedEvent.transaction_info = {
25803                    ...transactionInfo,
25804                    source
25805                };
25806            }
25807            this.sendEvent(processedEvent, hint);
25808            return processedEvent;
25809        }).then(null, (reason)=>{
25810            if (_isDoNotSendEventError(reason) || _isInternalError(reason)) {
25811                throw reason;
25812            }
25813            this.captureException(reason, {
25814                mechanism: {
25815                    handled: false,
25816                    type: "internal"
25817                },
25818                data: {
25819                    __sentry__: true
25820                },
25821                originalException: reason
25822            });
25823            throw _makeInternalError("Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ".concat(reason));
25824        });
25825    }
25826    /**
25827   * Occupies the client with processing and event
25828   */ _process(taskProducer, dataCategory) {
25829        this._numProcessing++;
25830        void this._promiseBuffer.add(taskProducer).then((value)=>{
25831            this._numProcessing--;
25832            return value;
25833        }, (reason)=>{
25834            this._numProcessing--;
25835            if (reason === SENTRY_BUFFER_FULL_ERROR) {
25836                this.recordDroppedEvent("queue_overflow", dataCategory);
25837            }
25838            return reason;
25839        });
25840    }
25841    /**
25842   * Clears outcomes on this client and returns them.
25843   */ _clearOutcomes() {
25844        const outcomes = this._outcomes;
25845        this._outcomes = {};
25846        return Object.entries(outcomes).map((param)=>{
25847            let [key, quantity] = param;
25848            const [reason, category] = key.split(":");
25849            return {
25850                reason,
25851                category,
25852                quantity
25853            };
25854        });
25855    }
25856    /**
25857   * Sends client reports as an envelope.
25858   */ _flushOutcomes() {
25859        __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].log("Flushing outcomes...");
25860        const outcomes = this._clearOutcomes();
25861        if (outcomes.length === 0) {
25862            __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].log("No outcomes to send");
25863            return;
25864        }
25865        if (!this._dsn) {
25866            __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].log("No dsn provided, will not send outcomes");
25867            return;
25868        }
25869        __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].log("Sending outcomes:", outcomes);
25870        const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && (0, __TURBOPACK__imported__module__339435__3["dsnToString"])(this._dsn));
25871        this.sendEnvelope(envelope);
25872    }
25873    /**
25874   * Initializes this client instance.
25875   *
25876   * @param options Options for the client.
25877   */ constructor(options){
25878        var _ref, _ref1, _this__options_enableLogs, _ref2, _this__options_enableMetrics;
25879        var _options_transportOptions, _this__options__experiments, _this__options__experiments1;
25880        this._options = options;
25881        this._integrations = {};
25882        this._numProcessing = 0;
25883        this._outcomes = {};
25884        this._hooks = {};
25885        this._eventProcessors = [];
25886        this._promiseBuffer = makePromiseBuffer((_ref = (_options_transportOptions = options.transportOptions) === null || _options_transportOptions === void 0 ? void 0 : _options_transportOptions.bufferSize) !== null && _ref !== void 0 ? _ref : DEFAULT_TRANSPORT_BUFFER_SIZE);
25887        this._dataCollection = resolveDataCollectionOptions(options);
25888        if (options.dsn) {
25889            this._dsn = (0, __TURBOPACK__imported__module__339435__3["makeDsn"])(options.dsn);
25890        } else {
25891            __TURBOPACK__imported__module__901020__14["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__28["debug"].warn("No DSN provided, client will not send events.");
25892        }
25893        if (this._dsn) {
25894            const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options.tunnel, options._metadata ? options._metadata.sdk : void 0);
25895            this._transport = options.transport({
25896                tunnel: this._options.tunnel,
25897                recordDroppedEvent: this.recordDroppedEvent.bind(this),
25898                ...options.transportOptions,
25899                url
25900            });
25901        }
25902        this._options.enableLogs = (_ref1 = (_this__options_enableLogs = this._options.enableLogs) !== null && _this__options_enableLogs !== void 0 ? _this__options_enableLogs : (_this__options__experiments = this._options._experiments) === null || _this__options__experiments === void 0 ? void 0 : _this__options__experiments.enableLogs) !== null && _ref1 !== void 0 ? _ref1 : true;
25903        if (this._options.enableLogs) {
25904            setupWeightBasedFlushing(this, "afterCaptureLog", "flushLogs", estimateLogSizeInBytes, __TURBOPACK__imported__module__224339__["_INTERNAL_flushLogsBuffer"]);
25905        }
25906        const enableMetrics = (_ref2 = (_this__options_enableMetrics = this._options.enableMetrics) !== null && _this__options_enableMetrics !== void 0 ? _this__options_enableMetrics : (_this__options__experiments1 = this._options._experiments) === null || _this__options__experiments1 === void 0 ? void 0 : _this__options__experiments1.enableMetrics) !== null && _ref2 !== void 0 ? _ref2 : true;
25907        if (enableMetrics) {
25908            setupWeightBasedFlushing(this, "afterCaptureMetric", "flushMetrics", estimateMetricSizeInBytes, _INTERNAL_flushMetricsBuffer);
25909        }
25910    }
25911}
25912function getDataCategoryByType(type) {
25913    return type === "replay_event" ? "replay" : type || "error";
25914}
25915function _validateBeforeSendResult(beforeSendResult, beforeSendLabel) {
25916    const invalidValueError = "".concat(beforeSendLabel, " must return `null` or a valid event.");
25917    if ((0, __TURBOPACK__imported__module__453288__7["isThenable"])(beforeSendResult)) {
25918        return beforeSendResult.then((event)=>{
25919            if (!(0, __TURBOPACK__imported__module__453288__7["isPlainObject"])(event) && event !== null) {
25920                throw _makeInternalError(invalidValueError);
25921            }
25922            return event;
25923        }, (e)=>{
25924            throw _makeInternalError("".concat(beforeSendLabel, " rejected with ").concat(e));
25925        });
25926    } else if (!(0, __TURBOPACK__imported__module__453288__7["isPlainObject"])(beforeSendResult) && beforeSendResult !== null) {
25927        throw _makeInternalError(invalidValueError);
25928    }
25929    return beforeSendResult;
25930}
25931function processBeforeSend(client, options, event, hint) {
25932    const { beforeSend, beforeSendTransaction, ignoreSpans } = options;
25933    const beforeSendSpan = !isStreamedBeforeSendSpanCallback(options.beforeSendSpan) && options.beforeSendSpan;
25934    let processedEvent = event;
25935    if (isErrorEvent(processedEvent) && beforeSend) {
25936        return beforeSend(processedEvent, hint);
25937    }
25938    if (isTransactionEvent(processedEvent)) {
25939        if (beforeSendSpan || ignoreSpans) {
25940            const rootSpanJson = convertTransactionEventToSpanJson(processedEvent);
25941            if ((ignoreSpans === null || ignoreSpans === void 0 ? void 0 : ignoreSpans.length) && shouldIgnoreSpan({
25942                description: rootSpanJson.description,
25943                op: rootSpanJson.op,
25944                attributes: rootSpanJson.data
25945            }, ignoreSpans)) {
25946                return null;
25947            }
25948            if (beforeSendSpan) {
25949                const processedRootSpanJson = beforeSendSpan(rootSpanJson);
25950                if (!processedRootSpanJson) {
25951                    (0, __TURBOPACK__imported__module__304661__19["showSpanDropWarning"])();
25952                } else {
25953                    processedEvent = (0, __TURBOPACK__imported__module__318746__["merge"])(event, convertSpanJsonToTransactionEvent(processedRootSpanJson));
25954                }
25955            }
25956            if (processedEvent.spans) {
25957                const processedSpans = [];
25958                const initialSpans = processedEvent.spans;
25959                for (const span of initialSpans){
25960                    if ((ignoreSpans === null || ignoreSpans === void 0 ? void 0 : ignoreSpans.length) && shouldIgnoreSpan({
25961                        description: span.description,
25962                        op: span.op,
25963                        attributes: span.data
25964                    }, ignoreSpans)) {
25965                        reparentChildSpans(initialSpans, span);
25966                        continue;
25967                    }
25968                    if (beforeSendSpan) {
25969                        const processedSpan = beforeSendSpan(span);
25970                        if (!processedSpan) {
25971                            (0, __TURBOPACK__imported__module__304661__19["showSpanDropWarning"])();
25972                            processedSpans.push(span);
25973                        } else {
25974                            processedSpans.push(processedSpan);
25975                        }
25976                    } else {
25977                        processedSpans.push(span);
25978                    }
25979                }
25980                const droppedSpans = processedEvent.spans.length - processedSpans.length;
25981                if (droppedSpans) {
25982                    client.recordDroppedEvent("before_send", "span", droppedSpans);
25983                }
25984                processedEvent.spans = processedSpans;
25985            }
25986        }
25987        if (beforeSendTransaction) {
25988            if (processedEvent.spans) {
25989                const spanCountBefore = processedEvent.spans.length;
25990                processedEvent.sdkProcessingMetadata = {
25991                    ...event.sdkProcessingMetadata,
25992                    spanCountBeforeProcessing: spanCountBefore
25993                };
25994            }
25995            return beforeSendTransaction(processedEvent, hint);
25996        }
25997    }
25998    return processedEvent;
25999}
26000function isErrorEvent(event) {
26001    return event.type === void 0;
26002}
26003function isTransactionEvent(event) {
26004    return event.type === "transaction";
26005}
26006function estimateMetricSizeInBytes(metric) {
26007    let weight = 0;
26008    if (metric.name) {
26009        weight += metric.name.length * 2;
26010    }
26011    weight += 8;
26012    return weight + estimateAttributesSizeInBytes(metric.attributes);
26013}
26014function estimateLogSizeInBytes(log) {
26015    let weight = 0;
26016    if (log.message) {
26017        weight += log.message.length * 2;
26018    }
26019    return weight + estimateAttributesSizeInBytes(log.attributes);
26020}
26021function estimateAttributesSizeInBytes(attributes) {
26022    if (!attributes) {
26023        return 0;
26024    }
26025    let weight = 0;
26026    Object.values(attributes).forEach((value)=>{
26027        if (Array.isArray(value)) {
26028            weight += value.length * estimatePrimitiveSizeInBytes(value[0]);
26029        } else if ((0, __TURBOPACK__imported__module__453288__7["isPrimitive"])(value)) {
26030            weight += estimatePrimitiveSizeInBytes(value);
26031        } else {
26032            weight += 100;
26033        }
26034    });
26035    return weight;
26036}
26037function estimatePrimitiveSizeInBytes(value) {
26038    if (typeof value === "string") {
26039        return value.length * 2;
26040    } else if (typeof value === "number") {
26041        return 8;
26042    } else if (typeof value === "boolean") {
26043        return 4;
26044    }
26045    return 0;
26046}
26047;
26048var __TURBOPACK__imported__module__858384__ = __turbopack_context__.i(858384);
26049// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/ipAddress.js [app-client] (ecmascript)
26050;
26051function addAutoIpAddressToUser(objWithMaybeUser) {
26052    var _objWithMaybeUser_user;
26053    if (((_objWithMaybeUser_user = objWithMaybeUser.user) === null || _objWithMaybeUser_user === void 0 ? void 0 : _objWithMaybeUser_user.ip_address) === void 0) {
26054        objWithMaybeUser.user = {
26055            ...objWithMaybeUser.user,
26056            ip_address: "{{auto}}"
26057        };
26058    }
26059}
26060function addAutoIpAddressToSession(session) {
26061    if ("aggregates" in session) {
26062        var _session_attrs;
26063        if (((_session_attrs = session.attrs) === null || _session_attrs === void 0 ? void 0 : _session_attrs["ip_address"]) === void 0) {
26064            session.attrs = {
26065                ...session.attrs,
26066                ip_address: "{{auto}}"
26067            };
26068        }
26069    } else {
26070        if (session.ipAddress === void 0) {
26071            session.ipAddress = "{{auto}}";
26072        }
26073    }
26074}
26075;
26076// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/eventbuilder.js [app-client] (ecmascript)
26077;
26078var __TURBOPACK__imported__module__453288__8 = __TURBOPACK__imported__module__453288__;
26079var __TURBOPACK__imported__module__682564__3 = __TURBOPACK__imported__module__682564__;
26080var __TURBOPACK__imported__module__250804__22 = __TURBOPACK__imported__module__250804__;
26081var __TURBOPACK__imported__module__45968__1 = __TURBOPACK__imported__module__45968__;
26082var __TURBOPACK__imported__module__951497__6 = __TURBOPACK__imported__module__951497__;
26083// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/eventbuilder.js [app-client] (ecmascript) <export _enhanceErrorWithSentryInfo as _INTERNAL_enhanceErrorWithSentryInfo>
26084;
26085// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/eventbuilder.js [app-client] (ecmascript)
26086;
26087var __TURBOPACK__imported__module__453288__9 = __TURBOPACK__imported__module__453288__;
26088var __TURBOPACK__imported__module__682564__4 = __TURBOPACK__imported__module__682564__;
26089var __TURBOPACK__imported__module__45968__2 = __TURBOPACK__imported__module__45968__;
26090var __TURBOPACK__imported__module__951497__7 = __TURBOPACK__imported__module__951497__;
26091;
26092;
26093;
26094;
26095function parseStackFrames(stackParser, error) {
26096    return stackParser(error.stack || "", 1);
26097}
26098function hasSentryFetchUrlHost(error) {
26099    return (0, __TURBOPACK__imported__module__453288__9["isError"])(error) && "__sentry_fetch_url_host__" in error && typeof error.__sentry_fetch_url_host__ === "string";
26100}
26101function _enhanceErrorWithSentryInfo(error) {
26102    if (hasSentryFetchUrlHost(error)) {
26103        return "".concat(error.message, " (").concat(error.__sentry_fetch_url_host__, ")");
26104    }
26105    return error.message;
26106}
26107function exceptionFromError(stackParser, error) {
26108    const exception = {
26109        type: error.name || error.constructor.name,
26110        value: _enhanceErrorWithSentryInfo(error)
26111    };
26112    const frames = parseStackFrames(stackParser, error);
26113    if (frames.length) {
26114        exception.stacktrace = {
26115            frames
26116        };
26117    }
26118    return exception;
26119}
26120function getErrorPropertyFromObject(obj) {
26121    for(const prop in obj){
26122        if (Object.prototype.hasOwnProperty.call(obj, prop)) {
26123            const value = obj[prop];
26124            if ((0, __TURBOPACK__imported__module__453288__9["isError"])(value)) {
26125                return value;
26126            }
26127        }
26128    }
26129    return void 0;
26130}
26131function getMessageForObject(exception) {
26132    if ("name" in exception && typeof exception.name === "string") {
26133        let message = "'".concat(exception.name, "' captured as exception");
26134        if ("message" in exception && typeof exception.message === "string") {
26135            message += " with message '".concat(exception.message, "'");
26136        }
26137        return message;
26138    } else if ("message" in exception && typeof exception.message === "string") {
26139        return exception.message;
26140    }
26141    const keys = (0, __TURBOPACK__imported__module__951497__7["extractExceptionKeysForMessage"])(exception);
26142    if ((0, __TURBOPACK__imported__module__453288__9["isErrorEvent"])(exception)) {
26143        return "Event `ErrorEvent` captured as exception with message `".concat(exception.message, "`");
26144    }
26145    const className = getObjectClassName(exception);
26146    return "".concat(className && className !== "Object" ? "'".concat(className, "'") : "Object", " captured as exception with keys: ").concat(keys);
26147}
26148function getObjectClassName(obj) {
26149    try {
26150        const prototype = Object.getPrototypeOf(obj);
26151        return prototype ? prototype.constructor.name : void 0;
26152    } catch (unused) {}
26153}
26154function getException(client, mechanism, exception, hint) {
26155    if ((0, __TURBOPACK__imported__module__453288__9["isError"])(exception)) {
26156        return [
26157            exception,
26158            void 0
26159        ];
26160    }
26161    mechanism.synthetic = true;
26162    if ((0, __TURBOPACK__imported__module__453288__9["isPlainObject"])(exception)) {
26163        const normalizeDepth = client === null || client === void 0 ? void 0 : client.getOptions().normalizeDepth;
26164        const extras = {
26165            ["__serialized__"]: (0, __TURBOPACK__imported__module__45968__2["normalizeToSize"])(exception, normalizeDepth)
26166        };
26167        const errorFromProp = getErrorPropertyFromObject(exception);
26168        if (errorFromProp) {
26169            return [
26170                errorFromProp,
26171                extras
26172            ];
26173        }
26174        const message = getMessageForObject(exception);
26175        const ex2 = (hint === null || hint === void 0 ? void 0 : hint.syntheticException) || new Error(message);
26176        ex2.message = message;
26177        return [
26178            ex2,
26179            extras
26180        ];
26181    }
26182    const ex = (hint === null || hint === void 0 ? void 0 : hint.syntheticException) || new Error(exception);
26183    ex.message = "".concat(exception);
26184    return [
26185        ex,
26186        void 0
26187    ];
26188}
26189function eventFromUnknownInput(client, stackParser, exception, hint) {
26190    const providedMechanism = (hint === null || hint === void 0 ? void 0 : hint.data) && hint.data.mechanism;
26191    const mechanism = providedMechanism || {
26192        handled: true,
26193        type: "generic"
26194    };
26195    const [ex, extras] = getException(client, mechanism, exception, hint);
26196    const event = {
26197        exception: {
26198            values: [
26199                exceptionFromError(stackParser, ex)
26200            ]
26201        }
26202    };
26203    if (extras) {
26204        event.extra = extras;
26205    }
26206    (0, __TURBOPACK__imported__module__682564__4["addExceptionTypeValue"])(event, void 0, void 0);
26207    (0, __TURBOPACK__imported__module__682564__4["addExceptionMechanism"])(event, mechanism);
26208    return {
26209        ...event,
26210        event_id: hint === null || hint === void 0 ? void 0 : hint.event_id
26211    };
26212}
26213function eventFromMessage(stackParser, message) {
26214    let level = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "info", hint = arguments.length > 3 ? arguments[3] : void 0, attachStacktrace = arguments.length > 4 ? arguments[4] : void 0;
26215    const event = {
26216        event_id: hint === null || hint === void 0 ? void 0 : hint.event_id,
26217        level
26218    };
26219    if (attachStacktrace && (hint === null || hint === void 0 ? void 0 : hint.syntheticException)) {
26220        const frames = parseStackFrames(stackParser, hint.syntheticException);
26221        if (frames.length) {
26222            event.exception = {
26223                values: [
26224                    {
26225                        value: message,
26226                        stacktrace: {
26227                            frames
26228                        }
26229                    }
26230                ]
26231            };
26232            (0, __TURBOPACK__imported__module__682564__4["addExceptionMechanism"])(event, {
26233                synthetic: true
26234            });
26235        }
26236    }
26237    if ((0, __TURBOPACK__imported__module__453288__9["isParameterizedString"])(message)) {
26238        const { __sentry_template_string__, __sentry_template_values__ } = message;
26239        event.logentry = {
26240            message: __sentry_template_string__,
26241            params: __sentry_template_values__
26242        };
26243        return event;
26244    }
26245    event.message = message;
26246    return event;
26247}
26248;
26249var __TURBOPACK__imported__module__580611__1 = __TURBOPACK__imported__module__580611__;
26250;
26251function exceptionFromError1(stackParser, ex) {
26252    const frames = parseStackFrames1(stackParser, ex);
26253    const exception = {
26254        type: extractType(ex),
26255        value: extractMessage(ex)
26256    };
26257    if (frames.length) {
26258        exception.stacktrace = {
26259            frames
26260        };
26261    }
26262    if (exception.type === void 0 && exception.value === "") {
26263        exception.value = "Unrecoverable error caught";
26264    }
26265    return exception;
26266}
26267function eventFromPlainObject(stackParser, exception, syntheticException, isUnhandledRejection) {
26268    const client = (0, __TURBOPACK__imported__module__250804__22["getClient"])();
26269    const normalizeDepth = client === null || client === void 0 ? void 0 : client.getOptions().normalizeDepth;
26270    const errorFromProp = getErrorPropertyFromObject1(exception);
26271    const extra = {
26272        __serialized__: (0, __TURBOPACK__imported__module__45968__1["normalizeToSize"])(exception, normalizeDepth)
26273    };
26274    if (errorFromProp) {
26275        return {
26276            exception: {
26277                values: [
26278                    exceptionFromError1(stackParser, errorFromProp)
26279                ]
26280            },
26281            extra
26282        };
26283    }
26284    const event = {
26285        exception: {
26286            values: [
26287                {
26288                    type: (0, __TURBOPACK__imported__module__453288__8["isEvent"])(exception) ? exception.constructor.name : isUnhandledRejection ? "UnhandledRejection" : "Error",
26289                    value: getNonErrorObjectExceptionValue(exception, {
26290                        isUnhandledRejection
26291                    })
26292                }
26293            ]
26294        },
26295        extra
26296    };
26297    if (syntheticException) {
26298        const frames = parseStackFrames1(stackParser, syntheticException);
26299        if (frames.length) {
26300            event.exception.values[0].stacktrace = {
26301                frames
26302            };
26303        }
26304    }
26305    return event;
26306}
26307function eventFromError(stackParser, ex) {
26308    return {
26309        exception: {
26310            values: [
26311                exceptionFromError1(stackParser, ex)
26312            ]
26313        }
26314    };
26315}
26316function parseStackFrames1(stackParser, ex) {
26317    const stacktrace = ex.stacktrace || ex.stack || "";
26318    const skipLines = getSkipFirstStackStringLines(ex);
26319    const framesToPop = getPopFirstTopFrames(ex);
26320    try {
26321        return stackParser(stacktrace, skipLines, framesToPop);
26322    } catch (unused) {}
26323    return [];
26324}
26325const reactMinifiedRegexp = /Minified React error #\d+;/i;
26326function getSkipFirstStackStringLines(ex) {
26327    if (ex && reactMinifiedRegexp.test(ex.message)) {
26328        return 1;
26329    }
26330    return 0;
26331}
26332function getPopFirstTopFrames(ex) {
26333    if (typeof ex.framesToPop === "number") {
26334        return ex.framesToPop;
26335    }
26336    return 0;
26337}
26338function isWebAssemblyException(exception) {
26339    if (typeof WebAssembly !== "undefined" && typeof WebAssembly.Exception !== "undefined") {
26340        return exception instanceof WebAssembly.Exception;
26341    } else {
26342        return false;
26343    }
26344}
26345function extractType(ex) {
26346    const name = ex === null || ex === void 0 ? void 0 : ex.name;
26347    if (!name && isWebAssemblyException(ex)) {
26348        const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;
26349        return hasTypeInMessage ? ex.message[0] : "WebAssembly.Exception";
26350    }
26351    return name;
26352}
26353function extractMessage(ex) {
26354    const message = ex === null || ex === void 0 ? void 0 : ex.message;
26355    if (isWebAssemblyException(ex)) {
26356        if (Array.isArray(ex.message) && ex.message.length == 2) {
26357            return ex.message[1];
26358        }
26359        return "wasm exception";
26360    }
26361    if (!message) {
26362        return "No error message";
26363    }
26364    if (message.error && typeof message.error.message === "string") {
26365        return _enhanceErrorWithSentryInfo(message.error);
26366    }
26367    return _enhanceErrorWithSentryInfo(ex);
26368}
26369function eventFromException(stackParser, exception, hint, attachStacktrace) {
26370    const syntheticException = (hint === null || hint === void 0 ? void 0 : hint.syntheticException) || void 0;
26371    const event = eventFromUnknownInput1(stackParser, exception, syntheticException, attachStacktrace);
26372    (0, __TURBOPACK__imported__module__682564__3["addExceptionMechanism"])(event);
26373    event.level = "error";
26374    if (hint === null || hint === void 0 ? void 0 : hint.event_id) {
26375        event.event_id = hint.event_id;
26376    }
26377    return (0, __TURBOPACK__imported__module__580611__1["resolvedSyncPromise"])(event);
26378}
26379function eventFromMessage1(stackParser, message) {
26380    let level = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "info", hint = arguments.length > 3 ? arguments[3] : void 0, attachStacktrace = arguments.length > 4 ? arguments[4] : void 0;
26381    const syntheticException = (hint === null || hint === void 0 ? void 0 : hint.syntheticException) || void 0;
26382    const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);
26383    event.level = level;
26384    if (hint === null || hint === void 0 ? void 0 : hint.event_id) {
26385        event.event_id = hint.event_id;
26386    }
26387    return (0, __TURBOPACK__imported__module__580611__1["resolvedSyncPromise"])(event);
26388}
26389function eventFromUnknownInput1(stackParser, exception, syntheticException, attachStacktrace, isUn
26389handledRejection) {
26390    let event;
26391    if ((0, __TURBOPACK__imported__module__453288__8["isErrorEvent"])(exception) && exception.error) {
26392        const errorEvent = exception;
26393        return eventFromError(stackParser, errorEvent.error);
26394    }
26395    if ((0, __TURBOPACK__imported__module__453288__8["isDOMError"])(exception) || (0, __TURBOPACK__imported__module__453288__8["isDOMException"])(exception)) {
26396        const domException = exception;
26397        if ("stack" in exception) {
26398            var _event_exception_values, _event_exception;
26399            event = eventFromError(stackParser, exception);
26400            const firstException = (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values[0];
26401            if (attachStacktrace && syntheticException && firstException && !firstException.stacktrace) {
26402                const frames = parseStackFrames1(stackParser, syntheticException);
26403                if (frames.length) {
26404                    firstException.stacktrace = {
26405                        frames
26406                    };
26407                    (0, __TURBOPACK__imported__module__682564__3["addExceptionMechanism"])(event, {
26408                        synthetic: true
26409                    });
26410                }
26411            }
26412        } else {
26413            const name = domException.name || ((0, __TURBOPACK__imported__module__453288__8["isDOMError"])(domException) ? "DOMError" : "DOMException");
26414            const message = domException.message ? "".concat(name, ": ").concat(domException.message) : name;
26415            event = eventFromString(stackParser, message, syntheticException, attachStacktrace);
26416            (0, __TURBOPACK__imported__module__682564__3["addExceptionTypeValue"])(event, message);
26417        }
26418        if ("code" in domException) {
26419            event.tags = {
26420                ...event.tags,
26421                "DOMException.code": "".concat(domException.code)
26422            };
26423        }
26424        return event;
26425    }
26426    if ((0, __TURBOPACK__imported__module__453288__8["isError"])(exception)) {
26427        return eventFromError(stackParser, exception);
26428    }
26429    if ((0, __TURBOPACK__imported__module__453288__8["isPlainObject"])(exception) || (0, __TURBOPACK__imported__module__453288__8["isEvent"])(exception)) {
26430        const objectException = exception;
26431        event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);
26432        (0, __TURBOPACK__imported__module__682564__3["addExceptionMechanism"])(event, {
26433            synthetic: true
26434        });
26435        return event;
26436    }
26437    event = eventFromString(stackParser, exception, syntheticException, attachStacktrace);
26438    (0, __TURBOPACK__imported__module__682564__3["addExceptionTypeValue"])(event, "".concat(exception), void 0);
26439    (0, __TURBOPACK__imported__module__682564__3["addExceptionMechanism"])(event, {
26440        synthetic: true
26441    });
26442    return event;
26443}
26444function eventFromString(stackParser, message, syntheticException, attachStacktrace) {
26445    const event = {};
26446    if (attachStacktrace && syntheticException) {
26447        const frames = parseStackFrames1(stackParser, syntheticException);
26448        if (frames.length) {
26449            event.exception = {
26450                values: [
26451                    {
26452                        value: message,
26453                        stacktrace: {
26454                            frames
26455                        }
26456                    }
26457                ]
26458            };
26459        }
26460        (0, __TURBOPACK__imported__module__682564__3["addExceptionMechanism"])(event, {
26461            synthetic: true
26462        });
26463    }
26464    if ((0, __TURBOPACK__imported__module__453288__8["isParameterizedString"])(message)) {
26465        const { __sentry_template_string__, __sentry_template_values__ } = message;
26466        event.logentry = {
26467            message: __sentry_template_string__,
26468            params: __sentry_template_values__
26469        };
26470        return event;
26471    }
26472    event.message = message;
26473    return event;
26474}
26475function getNonErrorObjectExceptionValue(exception, param) {
26476    let { isUnhandledRejection } = param;
26477    const keys = (0, __TURBOPACK__imported__module__951497__6["extractExceptionKeysForMessage"])(exception);
26478    const captureType = isUnhandledRejection ? "promise rejection" : "exception";
26479    if ((0, __TURBOPACK__imported__module__453288__8["isErrorEvent"])(exception)) {
26480        return "Event `ErrorEvent` captured as ".concat(captureType, " with message `").concat(exception.message, "`");
26481    }
26482    if ((0, __TURBOPACK__imported__module__453288__8["isEvent"])(exception)) {
26483        const className = getObjectClassName1(exception);
26484        return "Event `".concat(className, "` (type=").concat(exception.type, ") captured as ").concat(captureType);
26485    }
26486    return "Object captured as ".concat(captureType, " with keys: ").concat(keys);
26487}
26488function getObjectClassName1(obj) {
26489    try {
26490        const prototype = Object.getPrototypeOf(obj);
26491        return prototype ? prototype.constructor.name : void 0;
26492    } catch (unused) {}
26493}
26494function getErrorPropertyFromObject1(obj) {
26495    return Object.values(obj).find(__TURBOPACK__imported__module__453288__8["isError"]);
26496}
26497;
26498;
26499;
26500;
26501class BrowserClient extends Client {
26502    /**
26503   * @inheritDoc
26504   */ eventFromException(exception, hint) {
26505        return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);
26506    }
26507    /**
26508   * @inheritDoc
26509   */ eventFromMessage(message) {
26510        let level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "info", hint = arguments.length > 2 ? arguments[2] : void 0;
26511        return eventFromMessage1(this._options.stackParser, message, level, hint, this._options.attachStacktrace);
26512    }
26513    /**
26514   * @inheritDoc
26515   */ _prepareEvent(event, hint, currentScope, isolationScope) {
26516        event.platform = event.platform || "javascript";
26517        return super._prepareEvent(event, hint, currentScope, isolationScope);
26518    }
26519    /**
26520   * Creates a new Browser SDK instance.
26521   *
26522   * @param options Configuration options for this SDK.
26523   */ constructor(options){
26524        var _opts__metadata;
26525        const opts = applyDefaultOptions(options);
26526        const sdkSource = WINDOW1.SENTRY_SDK_SOURCE || (0, __TURBOPACK__imported__module__858384__["getSDKSource"])();
26527        applySdkMetadata(opts, "browser", [
26528            "browser"
26529        ], sdkSource);
26530        super(opts);
26531        const { userInfo } = this.getDataCollectionOptions();
26532        if ((_opts__metadata = opts._metadata) === null || _opts__metadata === void 0 ? void 0 : _opts__metadata.sdk) {
26533            opts._metadata.sdk.settings = {
26534                // Only allow IP inferral by Relay if the user opted in via dataCollection
26535                infer_ip: userInfo ? "auto" : "never",
26536                // purposefully allowing already passed settings to override the default
26537                ...opts._metadata.sdk.settings
26538            };
26539        }
26540        const { sendClientReports } = this._options;
26541        if (WINDOW1.document) {
26542            WINDOW1.document.addEventListener("visibilitychange", ()=>{
26543                if (WINDOW1.document.visibilityState === "hidden") {
26544                    if (sendClientReports) {
26545                        this._flushOutcomes();
26546                    }
26547                    queueMicrotask(()=>{
26548                        void this.flush();
26549                    });
26550                }
26551            });
26552        }
26553        if (userInfo) {
26554            this.on("beforeSendSession", addAutoIpAddressToSession);
26555        }
26556    }
26557}
26558function applyDefaultOptions(optionsArg) {
26559    var _WINDOW_SENTRY_RELEASE;
26560    return {
26561        release: typeof __SENTRY_RELEASE__ === "string" ? __SENTRY_RELEASE__ : (_WINDOW_SENTRY_RELEASE = WINDOW1.SENTRY_RELEASE) === null || _WINDOW_SENTRY_RELEASE === void 0 ? void 0 : _WINDOW_SENTRY_RELEASE.id,
26562        // This supports the variable that sentry-webpack-plugin injects
26563        sendClientReports: true,
26564        // We default this to true, as it is the safer scenario
26565        parentSpanIsAlwaysRootSpan: true,
26566        ...optionsArg
26567    };
26568}
26569;
26570// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/breadcrumbs.js [app-client] (ecmascript)
26571;
26572// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/instrument/console.js [app-client] (ecmascript)
26573;
26574var __TURBOPACK__imported__module__901020__17 = __TURBOPACK__imported__module__901020__;
26575var __TURBOPACK__imported__module__272598__29 = __TURBOPACK__imported__module__272598__;
26576var __TURBOPACK__imported__module__951497__8 = __TURBOPACK__imported__module__951497__;
26577var __TURBOPACK__imported__module__821593__4 = __TURBOPACK__imported__module__821593__;
26578var __TURBOPACK__imported__module__225304__11 = __TURBOPACK__imported__module__225304__;
26579;
26580;
26581;
26582;
26583;
26584;
26585const _filter = /* @__PURE__ */ new Set([]);
26586function addConsoleInstrumentationHandler(handler) {
26587    const type = "console";
26588    const removeHandler = addHandler(type, handler);
26589    maybeInstrument(type, instrumentConsole);
26590    return removeHandler;
26591}
26592function addConsoleInstrumentationFilter(filter) {
26593    for (const f of filter){
26594        _filter.add(f);
26595    }
26596    return ()=>{
26597        for (const f of filter){
26598            _filter.delete(f);
26599        }
26600    };
26601}
26602const instrumentedLevels = /* @__PURE__ */ new Set();
26603function instrumentConsole() {
26604    if (!("console" in __TURBOPACK__imported__module__225304__11["GLOBAL_OBJ"])) {
26605        return;
26606    }
26607    __TURBOPACK__imported__module__272598__29["CONSOLE_LEVELS"].forEach(function(level) {
26608        if (instrumentedLevels.has(level) || !(level in __TURBOPACK__imported__module__225304__11["GLOBAL_OBJ"].console)) {
26609            return;
26610        }
26611        instrumentedLevels.add(level);
26612        (0, __TURBOPACK__imported__module__951497__8["fill"])(__TURBOPACK__imported__module__225304__11["GLOBAL_OBJ"].console, level, function(originalConsoleMethod) {
26613            __TURBOPACK__imported__module__272598__29["originalConsoleMethods"][level] = originalConsoleMethod;
26614            return function() {
26615                for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
26616                    args[_key] = arguments[_key];
26617                }
26618                const firstArg = args[0];
26619                const log = __TURBOPACK__imported__module__272598__29["originalConsoleMethods"][level];
26620                const isFiltered = _filter.size && typeof firstArg === "string" && (0, __TURBOPACK__imported__module__821593__4["stringMatchesSomePattern"])(firstArg, _filter);
26621                if (!isFiltered) {
26622                    triggerHandlers("console", {
26623                        args,
26624                        level
26625                    });
26626                }
26627                if (!isFiltered || __TURBOPACK__imported__module__901020__17["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__29["debug"].isEnabled()) {
26628                    log === null || log === void 0 ? void 0 : log.apply(__TURBOPACK__imported__module__225304__11["GLOBAL_OBJ"].console, args);
26629                }
26630            };
26631        });
26632    });
26633}
26634;
26635var __TURBOPACK__imported__module__250804__23 = __TURBOPACK__imported__module__250804__;
26636var __TURBOPACK__imported__module__821593__5 = __TURBOPACK__imported__module__821593__;
26637// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/severity.js [app-client] (ecmascript)
26638;
26639function severityLevelFromString(level) {
26640    return level === "warn" ? "warning" : [
26641        "fatal",
26642        "error",
26643        "warning",
26644        "log",
26645        "info",
26646        "debug"
26647    ].includes(level) ? level : "log";
26648}
26649;
26650var __TURBOPACK__imported__module__183330__ = __turbopack_context__.i(183330);
26651var __TURBOPACK__imported__module__272598__30 = __TURBOPACK__imported__module__272598__;
26652// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js [a
26652pp-client] (ecmascript)
26653;
26654function getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {
26655    if (statusCode === void 0) {
26656        return void 0;
26657    } else if (statusCode >= 400 && statusCode < 500) {
26658        return "warning";
26659    } else if (statusCode >= 500) {
26660        return "error";
26661    } else {
26662        return void 0;
26663    }
26664}
26665;
26666var __TURBOPACK__imported__module__682564__5 = __TURBOPACK__imported__module__682564__;
26667// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/instrument/dom.js [app-client] (ecmascript)
26668;
26669var __TURBOPACK__imported__module__951497__9 = __TURBOPACK__imported__module__951497__;
26670var __TURBOPACK__imported__module__682564__6 = __TURBOPACK__imported__module__682564__;
26671;
26672;
26673const DEBOUNCE_DURATION = 1e3;
26674let debounceTimerID;
26675let lastCapturedEventType;
26676let lastCapturedEventTargetId;
26677function addClickKeypressInstrumentationHandler(handler) {
26678    const type = "dom";
26679    addHandler(type, handler);
26680    maybeInstrument(type, instrumentDOM);
26681}
26682function instrumentDOM() {
26683    if (!WINDOW3.document) {
26684        return;
26685    }
26686    const triggerDOMHandler = triggerHandlers.bind(null, "dom");
26687    const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);
26688    WINDOW3.document.addEventListener("click", globalDOMEventHandler, false);
26689    WINDOW3.document.addEventListener("keypress", globalDOMEventHandler, false);
26690    [
26691        "EventTarget",
26692        "Node"
26693    ].forEach((target)=>{
26694        var _globalObject_target, _proto_hasOwnProperty;
26695        const globalObject = WINDOW3;
26696        const proto = (_globalObject_target = globalObject[target]) === null || _globalObject_target === void 0 ? void 0 : _globalObject_target.prototype;
26697        if (!(proto === null || proto === void 0 ? void 0 : (_proto_hasOwnProperty = proto.hasOwnProperty) === null || _proto_hasOwnProperty === void 0 ? void 0 : _proto_hasOwnProperty.call(proto, "addEventListener"))) {
26698            return;
26699        }
26700        (0, __TURBOPACK__imported__module__951497__9["fill"])(proto, "addEventListener", function(originalAddEventListener) {
26701            return function(type, listener, options) {
26702                if (type === "click" || type == "keypress") {
26703                    try {
26704                        const handlers = this.__sentry_instrumentation_handlers__ = this.__sentry_instrumentation_handlers__ || {};
26705                        const handlerForType = handlers[type] = handlers[type] || {
26706                            refCount: 0
26707                        };
26708                        if (!handlerForType.handler) {
26709                            const handler = makeDOMEventHandler(triggerDOMHandler);
26710                            handlerForType.handler = handler;
26711                            originalAddEventListener.call(this, type, handler, options);
26712                        }
26713                        handlerForType.refCount++;
26714                    } catch (unused) {}
26715                }
26716                return originalAddEventListener.call(this, type, listener, options);
26717            };
26718        });
26719        (0, __TURBOPACK__imported__module__951497__9["fill"])(proto, "removeEventListener", function(originalRemoveEventListener) {
26720            return function(type, listener, options) {
26721                if (type === "click" || type == "keypress") {
26722                    try {
26723                        const handlers = this.__sentry_instrumentation_handlers__ || {};
26724                        const handlerForType = handlers[type];
26725                        if (handlerForType) {
26726                            handlerForType.refCount--;
26727                            if (handlerForType.refCount <= 0) {
26728                                originalRemoveEventListener.call(this, type, handlerForType.handler, options);
26729                                handlerForType.handler = void 0;
26730                                delete handlers[type];
26731                            }
26732                            if (Object.keys(handlers).length === 0) {
26733                                delete this.__sentry_instrumentation_handlers__;
26734                            }
26735                        }
26736                    } catch (unused) {}
26737                }
26738                return originalRemoveEventListener.call(this, type, listener, options);
26739            };
26740        });
26741    });
26742}
26743function isSimilarToLastCapturedEvent(event) {
26744    if (event.type !== lastCapturedEventType) {
26745        return false;
26746    }
26747    try {
26748        if (!event.target || event.target._sentryId !== lastCapturedEventTargetId) {
26749            return false;
26750        }
26751    } catch (unused) {}
26752    return true;
26753}
26754function shouldSkipDOMEvent(eventType, target) {
26755    if (eventType !== "keypress") {
26756        return false;
26757    }
26758    if (!(target === null || target === void 0 ? void 0 : target.tagName)) {
26759        return true;
26760    }
26761    if (target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable) {
26762        return false;
26763    }
26764    return true;
26765}
26766function makeDOMEventHandler(handler) {
26767    let globalListener = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
26768    return (event)=>{
26769        if (!event || event["_sentryCaptured"]) {
26770            return;
26771        }
26772        const target = getEventTarget(event);
26773        if (shouldSkipDOMEvent(event.type, target)) {
26774            return;
26775        }
26776        (0, __TURBOPACK__imported__module__951497__9["addNonEnumerableProperty"])(event, "_sentryCaptured", true);
26777        if (target && !target._sentryId) {
26778            (0, __TURBOPACK__imported__module__951497__9["addNonEnumerableProperty"])(target, "_sentryId", (0, __TURBOPACK__imported__module__682564__6["uuid4"])());
26779        }
26780        const name = event.type === "keypress" ? "input" : event.type;
26781        if (!isSimilarToLastCapturedEvent(event)) {
26782            const handlerData = {
26783                event,
26784                name,
26785                global: globalListener
26786            };
26787            handler(handlerData);
26788            lastCapturedEventType = event.type;
26789            lastCapturedEventTargetId = target ? target._sentryId : void 0;
26790        }
26791        clearTimeout(debounceTimerID);
26792        debounceTimerID = WINDOW3.setTimeout(()=>{
26793            lastCapturedEventTargetId = void 0;
26794            lastCapturedEventType = void 0;
26795        }, DEBOUNCE_DURATION);
26796    };
26797}
26798function getEventTarget(event) {
26799    try {
26800        return event.target;
26801    } catch (unused) {
26802        return null;
26803    }
26804}
26805;
26806;
26807;
26808;
26809;
26810const MAX_ALLOWED_STRING_LENGTH = 1024;
26811const INTEGRATION_NAME4 = "Breadcrumbs";
26812const _breadcrumbsIntegration = function() {
26813    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
26814    const _options = {
26815        console: true,
26816        dom: true,
26817        fetch: true,
26818        history: true,
26819        sentry: true,
26820        xhr: true,
26821        ...options
26822    };
26823    return {
26824        name: INTEGRATION_NAME4,
26825        setup (client) {
26826            if (_options.console) {
26827                addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));
26828            }
26829            if (_options.dom) {
26830                addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));
26831            }
26832            if (_options.xhr) {
26833                addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));
26834            }
26835            if (_options.fetch) {
26836                addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));
26837            }
26838            if (_options.history) {
26839                addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));
26840            }
26841            if (_options.sentry) {
26842                client.on("beforeSendEvent", _getSentryBreadcrumbHandler(client));
26843            }
26844        }
26845    };
26846};
26847const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);
26848function _getSentryBreadcrumbHandler(client) {
26849    return function addSentryBreadcrumb(event) {
26850        if ((0, __TURBOPACK__imported__module__250804__23["getClient"])() !== client) {
26851            return;
26852        }
26853        (0, __TURBOPACK__imported__module__183330__["addBreadcrumb"])({
26854            category: "sentry.".concat(event.type === "transaction" ? "transaction" : "event"),
26855            event_id: event.event_id,
26856            level: event.level,
26857            message: (0, __TURBOPACK__imported__module__682564__5["getEventDescription"])(event)
26858        }, {
26859            event
26860        });
26861    };
26862}
26863function _getDomBreadcrumbHandler(client, dom) {
26864    return function _innerDomBreadcrumb(handlerData) {
26865        if ((0, __TURBOPACK__imported__module__250804__23["getClient"])() !== client) {
26866            return;
26867        }
26868        let target;
26869        let componentName;
26870        let keyAttrs = typeof dom === "object" ? dom.serializeAttribute : void 0;
26871        let maxStringLength = typeof dom === "object" && typeof dom.maxStringLength === "number" ? dom.maxStringLength : void 0;
26872        if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {
26873            DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__30["debug"].warn("`dom.maxStringLength` cannot exceed ".concat(MAX_ALLOWED_STRING_LENGTH, ", but a value of ").concat(maxStringLength, " was configured. Sentry will use ").concat(MAX_ALLOWED_STRING_LENGTH, " instead."));
26874            maxStringLength = MAX_ALLOWED_STRING_LENGTH;
26875        }
26876        if (typeof keyAttrs === "string") {
26877            keyAttrs = [
26878                keyAttrs
26879            ];
26880        }
26881        try {
26882            const event = handlerData.event;
26883            const element = _isEvent(event) ? event.target : event;
26884            target = htmlTreeAsString1(element, {
26885                keyAttrs,
26886                maxStringLength
26887            });
26888            componentName = getComponentName(element);
26889        } catch (unused) {
26890            target = "<unknown>";
26891        }
26892        if (target.length === 0) {
26893            return;
26894        }
26895        const breadcrumb = {
26896            category: "ui.".concat(handlerData.name),
26897            message: target
26898        };
26899        if (componentName) {
26900            breadcrumb.data = {
26901                "ui.component_name": componentName
26902            };
26903        }
26904        (0, __TURBOPACK__imported__module__183330__["addBreadcrumb"])(breadcrumb, {
26905            event: handlerData.event,
26906            name: handlerData.name,
26907            global: handlerData.global
26908        });
26909    };
26910}
26911function _getConsoleBreadcrumbHandler(client) {
26912    return function _consoleBreadcrumb(handlerData) {
26913        if ((0, __TURBOPACK__imported__module__250804__23["getClient"])() !== client) {
26914            return;
26915        }
26916        const breadcrumb = {
26917            category: "console",
26918            data: {
26919                arguments: handlerData.args,
26920                logger: "console"
26921            },
26922            level: severityLevelFromString(handlerData.level),
26923            message: (0, __TURBOPACK__imported__module__821593__5["safeJoin"])(handlerData.args, " ")
26924        };
26925        if (handlerData.level === "assert") {
26926            if (handlerData.args[0] === false) {
26927                breadcrumb.message = "Assertion failed: ".concat((0, __TURBOPACK__imported__module__821593__5["safeJoin"])(handlerData.args.slice(1), " ") || "console.assert");
26928                breadcrumb.data.arguments = handlerData.args.slice(1);
26929            } else {
26930                return;
26931            }
26932        }
26933        (0, __TURBOPACK__imported__module__183330__["addBreadcrumb"])(breadcrumb, {
26934            input: handlerData.args,
26935            level: handlerData.level
26936        });
26937    };
26938}
26939function _getXhrBreadcrumbHandler(client) {
26940    return function _xhrBreadcrumb(handlerData) {
26941        if ((0, __TURBOPACK__imported__module__250804__23["getClient"])() !== client) {
26942            return;
26943        }
26944        const { startTimestamp, endTimestamp } = handlerData;
26945        const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];
26946        if (!startTimestamp || !endTimestamp || !sentryXhrData) {
26947            return;
26948        }
26949        const { method, url, status_code, body } = sentryXhrData;
26950        const data = {
26951            method,
26952            url,
26953            status_code
26954        };
26955        const hint = {
26956            xhr: handlerData.xhr,
26957            input: body,
26958            startTimestamp,
26959            endTimestamp
26960        };
26961        const breadcrumb = {
26962            category: "xhr",
26963            data,
26964            type: "http",
26965            level: getBreadcrumbLogLevelFromHttpStatusCode(status_code)
26966        };
26967        client.emit("beforeOutgoingRequestBreadcrumb", breadcrumb, hint);
26968        (0, __TURBOPACK__imported__module__183330__["addBreadcrumb"])(breadcrumb, hint);
26969    };
26970}
26971function _getFetchBreadcrumbHandler(client) {
26972    return function _fetchBreadcrumb(handlerData) {
26973        if ((0, __TURBOPACK__imported__module__250804__23["getClient"])() !== client) {
26974            return;
26975        }
26976        const { startTimestamp, endTimestamp } = handlerData;
26977        if (!endTimestamp) {
26978            return;
26979        }
26980        if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === "POST") {
26981            return;
26982        }
26983        if (handlerData.error) {
26984            const hint = {
26985                data: handlerData.error,
26986                input: handlerData.args,
26987                startTimestamp,
26988                endTimestamp
26989            };
26990            const breadcrumb = {
26991                category: "fetch",
26992                data: handlerData.fetchData,
26993                level: "error",
26994                type: "http"
26995            };
26996            client.emit("beforeOutgoingRequestBreadcrumb", breadcrumb, hint);
26997            (0, __TURBOPACK__imported__module__183330__["addBreadcrumb"])(breadcrumb, hint);
26998        } else {
26999            const response = handlerData.response;
27000            const data = {
27001                ...handlerData.fetchData,
27002                status_code: response === null || response === void 0 ? void 0 : response.status
27003            };
27004            const hint = {
27005                input: handlerData.args,
27006                response,
27007                startTimestamp,
27008                endTimestamp
27009            };
27010            const breadcrumb = {
27011                category: "fetch",
27012                data,
27013                type: "http",
27014                level: getBreadcrumbLogLevelFromHttpStatusCode(data.status_code)
27015            };
27016            client.emit("beforeOutgoingRequestBreadcrumb", breadcrumb, hint);
27017            (0, __TURBOPACK__imported__module__183330__["addBreadcrumb"])(breadcrumb, hint);
27018        }
27019    };
27020}
27021function _getHistoryBreadcrumbHandler(client) {
27022    return function _historyBreadcrumb(handlerData) {
27023        if ((0, __TURBOPACK__imported__module__250804__23["getClient"])() !== client) {
27024            return;
27025        }
27026        let from = handlerData.from;
27027        let to = handlerData.to;
27028        const parsedLoc = parseUrl(WINDOW1.location.href);
27029        let parsedFrom = from ? parseUrl(from) : void 0;
27030        const parsedTo = parseUrl(to);
27031        if (!(parsedFrom === null || parsedFrom === void 0 ? void 0 : parsedFrom.path)) {
27032            parsedFrom = parsedLoc;
27033        }
27034        if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {
27035            to = parsedTo.relative;
27036        }
27037        if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {
27038            from = parsedFrom.relative;
27039        }
27040        (0, __TURBOPACK__imported__module__183330__["addBreadcrumb"])({
27041            category: "navigation",
27042            data: {
27043                from,
27044                to
27045            }
27046        });
27047    };
27048}
27049function _isEvent(event) {
27050    return !!event && !!event.target;
27051}
27052;
27053// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/browserapierrors.js [app-client] (ecmascript)
27054;
27055var __TURBOPACK__imported__module__951497__10 = __TURBOPACK__imported__module__951497__;
27056var __TURBOPACK__imported__module__936032__4 = __TURBOPACK__imported__module__936032__;
27057;
27058;
27059const DEFAULT_EVENT_TARGET = "EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDB
27059Request,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");
27060const INTEGRATION_NAME5 = "BrowserApiErrors";
27061const _browserApiErrorsIntegration = function() {
27062    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
27063    const _options = {
27064        XMLHttpRequest: true,
27065        eventTarget: true,
27066        requestAnimationFrame: true,
27067        setInterval: true,
27068        setTimeout: true,
27069        unregisterOriginalCallbacks: false,
27070        ...options
27071    };
27072    return {
27073        name: INTEGRATION_NAME5,
27074        // TODO: This currently only works for the first client this is setup
27075        // We may want to adjust this to check for client etc.
27076        setupOnce () {
27077            if (_options.setTimeout) {
27078                (0, __TURBOPACK__imported__module__951497__10["fill"])(WINDOW1, "setTimeout", _wrapTimeFunction);
27079            }
27080            if (_options.setInterval) {
27081                (0, __TURBOPACK__imported__module__951497__10["fill"])(WINDOW1, "setInterval", _wrapTimeFunction);
27082            }
27083            if (_options.requestAnimationFrame) {
27084                (0, __TURBOPACK__imported__module__951497__10["fill"])(WINDOW1, "requestAnimationFrame", _wrapRAF);
27085            }
27086            if (_options.XMLHttpRequest && "XMLHttpRequest" in WINDOW1) {
27087                (0, __TURBOPACK__imported__module__951497__10["fill"])(XMLHttpRequest.prototype, "send", _wrapXHR);
27088            }
27089            const eventTargetOption = _options.eventTarget;
27090            if (eventTargetOption) {
27091                const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;
27092                eventTarget.forEach((target)=>_wrapEventTarget(target, _options));
27093            }
27094        }
27095    };
27096};
27097const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);
27098function _wrapTimeFunction(original) {
27099    return function() {
27100        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
27101            args[_key] = arguments[_key];
27102        }
27103        const originalCallback = args[0];
27104        args[0] = wrap(originalCallback, {
27105            mechanism: {
27106                handled: false,
27107                type: "auto.browser.browserapierrors.".concat((0, __TURBOPACK__imported__module__936032__4["getFunctionName"])(original))
27108            }
27109        });
27110        return original.apply(this, args);
27111    };
27112}
27113function _wrapRAF(original) {
27114    return function(callback) {
27115        return original.apply(this, [
27116            wrap(callback, {
27117                mechanism: {
27118                    data: {
27119                        handler: (0, __TURBOPACK__imported__module__936032__4["getFunctionName"])(original)
27120                    },
27121                    handled: false,
27122                    type: "auto.browser.browserapierrors.requestAnimationFrame"
27123                }
27124            })
27125        ]);
27126    };
27127}
27128function _wrapXHR(originalSend) {
27129    return function() {
27130        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
27131            args[_key] = arguments[_key];
27132        }
27133        const xhr = this;
27134        const xmlHttpRequestProps = [
27135            "onload",
27136            "onerror",
27137            "onprogress",
27138            "onreadystatechange"
27139        ];
27140        xmlHttpRequestProps.forEach((prop)=>{
27141            if (prop in xhr && typeof xhr[prop] === "function") {
27142                (0, __TURBOPACK__imported__module__951497__10["fill"])(xhr, prop, function(original) {
27143                    const wrapOptions = {
27144                        mechanism: {
27145                            data: {
27146                                handler: (0, __TURBOPACK__imported__module__936032__4["getFunctionName"])(original)
27147                            },
27148                            handled: false,
27149                            type: "auto.browser.browserapierrors.xhr.".concat(prop)
27150                        }
27151                    };
27152                    const originalFunction = (0, __TURBOPACK__imported__module__951497__10["getOriginalFunction"])(original);
27153                    if (originalFunction) {
27154                        wrapOptions.mechanism.data.handler = (0, __TURBOPACK__imported__module__936032__4["getFunctionName"])(originalFunction);
27155                    }
27156                    return wrap(original, wrapOptions);
27157                });
27158            }
27159        });
27160        return originalSend.apply(this, args);
27161    };
27162}
27163function _wrapEventTarget(target, integrationOptions) {
27164    var _globalObject_target, _proto_hasOwnProperty;
27165    const globalObject = WINDOW1;
27166    const proto = (_globalObject_target = globalObject[target]) === null || _globalObject_target === void 0 ? void 0 : _globalObject_target.prototype;
27167    if (!(proto === null || proto === void 0 ? void 0 : (_proto_hasOwnProperty = proto.hasOwnProperty) === null || _proto_hasOwnProperty === void 0 ? void 0 : _proto_hasOwnProperty.call(proto, "addEventListener"))) {
27168        return;
27169    }
27170    (0, __TURBOPACK__imported__module__951497__10["fill"])(proto, "addEventListener", function(original) {
27171        return function(eventName, fn, options) {
27172            try {
27173                if (isEventListenerObject(fn)) {
27174                    fn.handleEvent = wrap(fn.handleEvent, {
27175                        mechanism: {
27176                            data: {
27177                                handler: (0, __TURBOPACK__imported__module__936032__4["getFunctionName"])(fn),
27178                                target
27179                            },
27180                            handled: false,
27181                            type: "auto.browser.browserapierrors.handleEvent"
27182                        }
27183                    });
27184                }
27185            } catch (unused) {}
27186            if (integrationOptions.unregisterOriginalCallbacks) {
27187                unregisterOriginalCallback(this, eventName, fn);
27188            }
27189            return original.apply(this, [
27190                eventName,
27191                wrap(fn, {
27192                    mechanism: {
27193                        data: {
27194                            handler: (0, __TURBOPACK__imported__module__936032__4["getFunctionName"])(fn),
27195                            target
27196                        },
27197                        handled: false,
27198                        type: "auto.browser.browserapierrors.addEventListener"
27199                    }
27200                }),
27201                options
27202            ]);
27203        };
27204    });
27205    (0, __TURBOPACK__imported__module__951497__10["fill"])(proto, "removeEventListener", function(originalRemoveEventListener) {
27206        return function(eventName, fn, options) {
27207            try {
27208                if (Object.prototype.hasOwnProperty.call(fn, "__sentry_wrapped__")) {
27209                    const originalEventHandler = fn.__sentry_wrapped__;
27210                    if (originalEventHandler) {
27211                        originalRemoveEventListener.call(this, eventName, originalEventHandler, options);
27212                    }
27213                }
27214            } catch (unused) {}
27215            return originalRemoveEventListener.call(this, eventName, fn, options);
27216        };
27217    });
27218}
27219function isEventListenerObject(obj) {
27220    return typeof obj.handleEvent === "function";
27221}
27222function unregisterOriginalCallback(target, eventName, fn) {
27223    if (target && typeof target === "object" && "removeEventListener" in target && typeof target.removeEventListener === "function") {
27224        target.removeEventListener(eventName, fn);
27225    }
27226}
27227;
27228// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/browsersession.js [app-client] (ecmascript)
27229;
27230var __TURBOPACK__imported__module__272598__31 = __TURBOPACK__imported__module__272598__;
27231var __TURBOPACK__imported__module__662537__4 = __TURBOPACK__imported__module__662537__;
27232var __TURBOPACK__imported__module__250804__24 = __TURBOPACK__imported__module__250804__;
27233;
27234;
27235;
27236;
27237const browserSessionIntegration = defineIntegration(function() {
27238    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
27239    var _options_lifecycle;
27240    const lifecycle = (_options_lifecycle = options.lifecycle) !== null && _options_lifecycle !== void 0 ? _options_lifecycle : "route";
27241    return {
27242        name: "BrowserSession",
27243        setupOnce () {
27244            if (typeof WINDOW1.document === "undefined") {
27245                DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__31["debug"].warn("Using the `browserSessionIntegration` in non-browser environments is not supported.");
27246                return;
27247            }
27248            (0, __TURBOPACK__imported__module__662537__4["startSession"])({
27249                ignoreDuration: true
27250            });
27251            let initialSessionSent = false;
27252            whenIdleOrHidden(()=>{
27253                if (!initialSessionSent) {
27254                    (0, __TURBOPACK__imported__module__662537__4["captureSession"])();
27255                    initialSessionSent = true;
27256                }
27257            });
27258            const isolationScope = (0, __TURBOPACK__imported__module__250804__24["getIsolationScope"])();
27259            let previousUser = isolationScope.getUser();
27260            isolationScope.addScopeListener((scope)=>{
27261                const maybeNewUser = scope.getUser();
27262                if ((previousUser === null || previousUser === void 0 ? void 0 : previousUser.id) !== (maybeNewUser === null || maybeNewUser === void 0 ? void 0 : maybeNewUser.id) || (previousUser === null || previousUser === void 0 ? void 0 : previousUser.ip_address) !== (maybeNewUser === null || maybeNewUser === void 0 ? void 0 : maybeNewUser.ip_address)) {
27263                    previousUser = maybeNewUser;
27264                    if (initialSessionSent) {
27265                        (0, __TURBOPACK__imported__module__662537__4["captureSession"])();
27266                    }
27267                }
27268            });
27269            if (lifecycle === "route") {
27270                addHistoryInstrumentationHandler((param)=>{
27271                    let { from, to } = param;
27272                    if (from !== to) {
27273                        (0, __TURBOPACK__imported__module__662537__4["startSession"])({
27274                            ignoreDuration: true
27275                        });
27276                        (0, __TURBOPACK__imported__module__662537__4["captureSession"])();
27277                        initialSessionSent = true;
27278                    }
27279                });
27280            }
27281        }
27282    };
27283});
27284;
27285// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/culturecontext.js [app-client] (ecmascript)
27286;
27287// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/spans/captureSpan.js [app-client] (ecmascript)
27288;
27289var __TURBOPACK__imported__module__519988__18 = __TURBOPACK__imported__module__519988__;
27290var __TURBOPACK__imported__module__571993__1 = __TURBOPACK__imported__module__571993__;
27291var __TURBOPACK__imported__module__304661__20 = __TURBOPACK__imported__module__304661__;
27292var __TURBOPACK__imported__module__242222__3 = __TURBOPACK__imported__module__242222__;
27293// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/tracing/spans/scopeContextAttributes.js [app-client] (ecmascript)
27294;
27295function scopeContextsToSpanAttributes(contexts) {
27296    const attrs = {};
27297    const { response, profile, cloud_resource, culture, state } = contexts;
27298    if (response) {
27299        if (response.status_code != null) {
27300            attrs["http.response.status_code"] = response.status_code;
27301        }
27302        if (response.body_size != null) {
27303            attrs["http.response.body.size"] = response.body_size;
27304        }
27305    }
27306    if (profile) {
27307        if (profile.profile_id) {
27308            attrs["sentry.profile_id"] = profile.profile_id;
27309        }
27310        if (profile.profiler_id) {
27311            attrs["sentry.profiler_id"] = profile.profiler_id;
27312        }
27313    }
27314    if (cloud_resource) {
27315        for (const [key, value] of Object.entries(cloud_resource)){
27316            if (value != null) {
27317                attrs[key] = value;
27318            }
27319        }
27320    }
27321    if (culture) {
27322        if (culture.locale) {
27323            attrs["culture.locale"] = culture.locale;
27324        }
27325        if (culture.timezone) {
27326            attrs["culture.timezone"] = culture.timezone;
27327        }
27328    }
27329    if ((state === null || state === void 0 ? void 0 : state.state) && typeof state.state.type === "string") {
27330        attrs["state.type"] = state.state.type;
27331    }
27332    const angular = contexts["angular"];
27333    if (angular) {
27334        const version = angular["version"];
27335        if (typeof version === "string" || typeof version === "number") {
27336            attrs["angular.version"] = version;
27337        }
27338    }
27339    const react = contexts["react"];
27340    if (react) {
27341        const version = react["version"];
27342        if (typeof version === "string" || typeof version === "number") {
27343            attrs["react.version"] = version;
27344        }
27345    }
27346    return attrs;
27347}
27348;
27349var __TURBOPACK__imported__module__373250__1 = __TURBOPACK__imported__module__373250__;
27350;
27351;
27352;
27353;
27354;
27355;
27356;
27357;
27358function captureSpan(span, client) {
27359    var _processedSpan_attributes;
27360    const spanJSON = (0, __TURBOPACK__imported__module__304661__20["spanToStreamedSpanJSON"])(span);
27361    const segmentSpan = (0, __TURBOPACK__imported__module__304661__20["INTERNAL_getSegmentSpan"])(span);
27362    const serializedSegmentSpan = (0, __TURBOPACK__imported__module__304661__20["spanToStreamedSpanJSON"])(segmentSpan);
27363    const { isolationScope: spanIsolationScope, scope: spanScope } = (0, __TURBOPACK__imported__module__242222__3["getCapturedScopesOnSpan"])(span);
27364    const finalScopeData = (0, __TURBOPACK__imported__module__571993__1["getCombinedScopeData"])(spanIsolationScope, spanScope);
27365    applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);
27366    const spanKind = span.kind;
27367    client.emit("preprocessSpan", spanJSON, {
27368        spanKind
27369    });
27370    if (spanJSON.is_segment) {
27371        applyScopeToSegmentSpan(spanJSON, finalScopeData);
27372        applySdkMetadataToSegmentSpan(spanJSON, client);
27373        client.emit("processSegmentSpan", spanJSON);
27374    }
27375    client.emit("processSpan", spanJSON);
27376    const { beforeSendSpan } = client.getOptions();
27377    const processedSpan = beforeSendSpan && isStreamedBeforeSendSpanCallback(beforeSendSpan) ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan) : spanJSON;
27378    const spanNameSource = (_processedSpan_attributes = processedSpan.attributes) === null || _processedSpan_attributes === void 0 ? void 0 : _processedSpan_attributes[__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]];
27379    if (spanJSON.is_segment && spanNameSource) {
27380        safeSetSpanJSONAttributes(processedSpan, {
27381            ["sentry.segment.name.source"]: spanNameSource
27382        });
27383    }
27384    return {
27385        ...(0, __TURBOPACK__imported__module__304661__20["streamedSpanJsonToSerializedSpan"])(processedSpan),
27386        _segmentSpan: segmentSpan
27387    };
27388}
27389function applyScopeToSegmentSpan(segmentSpanJSON, scopeData) {
27390    const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);
27391    safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);
27392}
27393function safeSetSpanJSONAttributes(spanJSON, newAttributes) {
27394    var _spanJSON_attributes;
27395    const originalAttributes = (_spanJSON_attributes = spanJSON.attributes) !== null && _spanJSON_attributes !== void 0 ? _spanJSON_attributes : spanJSON.attributes = {};
27396    Object.entries(newAttributes).forEach((param)=>{
27397        let [key, value] = param;
27398        if (value != null && !(key in originalAttributes)) {
27399            originalAttributes[key] = value;
27400        }
27401    });
27402}
27403function applySdkMetadataToSegmentSpan(segmentSpanJSON, client) {
27404    const integrationNames = client.getIntegrationNames();
27405    if (!integrationNames.length) return;
27406    safeSetSpanJSONAttributes(segmentSpanJSON, {
27407        [__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS"]]: integrationNames
27408    });
27409}
27410function applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, scopeData) {
27411    var _sdk_sdk, _sdk_sdk1, _scopeData_user, _scopeData_user1, _scopeData_user2, _scopeData_user3;
27412    const sdk = client.getSdkMetadata();
27413    const { release, environment } = client.getOptions();
27414    safeSetSpanJSONAttributes(spanJSON, {
27415        [Kc]: "stream",
27416        [Lc]: serializedSegmentSpan.name,
27417        [Pc]: serializedSegmentSpan.span_id,
27418        [Nc]: sdk === null || sdk === void 0 ? void 0 : (_sdk_sdk = sdk.sdk) === null || _sdk_sdk === void 0 ? void 0 : _sdk_sdk.name,
27419        [Cc]: sdk === null || sdk === void 0 ? void 0 : (_sdk_sdk1 = sdk.sdk) === null || _sdk_sdk1 === void 0 ? void 0 : _sdk_sdk1.version,
27420        [__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_SENTRY_RELEASE"]]: release,
27421        [__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT"]]: environment || __TURBOPACK__imported__module__373250__1["DEFAULT_ENVIRONMENT"],
27422        [__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_USER_ID"]]: (_scopeData_user = scopeData.user) === null || _scopeData_user === void 0 ? void 0 : _scopeData_user.id,
27423        [__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_USER_EMAIL"]]: (_scopeData_user1 = scopeData.user) === null || _scopeData_user1 === void 0 ? void 0 : _scopeData_user1.email,
27424        [__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS"]]: (_scopeData_user2 = scopeData.user) === null || _scopeData_user2 === void 0 ? void 0 : _scopeData_user2.ip_address,
27425        [__TURBOPACK__imported__module__519988__18["SEMANTIC_ATTRIBUTE_USER_USERNAME"]]: (_scopeData_user3 = scopeData.user) === null || _scopeData_user3 === void 0 ? void 0 : _scopeData_user3.username,
27426        ...scopeData.attributes
27427    });
27428}
27429function applyBeforeSendSpanCallback(span, beforeSendSpan) {
27430    const modifedSpan = beforeSendSpan(span);
27431    if (!modifedSpan) {
27432        (0, __TURBOPACK__imported__module__304661__20["showSpanDropWarning"])();
27433        return span;
27434    }
27435    return modifedSpan;
27436}
27437;
27438;
27439;
27440const INTEGRATION_NAME6 = "CultureContext";
27441const _cultureContextIntegration = ()=>{
27442    return {
27443        name: INTEGRATION_NAME6,
27444        preprocessEvent (event) {
27445            const culture = getCultureContext();
27446            if (culture) {
27447                var _event_contexts;
27448                event.contexts = {
27449                    ...event.contexts,
27450                    culture: {
27451                        ...culture,
27452                        ...(_event_contexts = event.contexts) === null || _event_contexts === void 0 ? void 0 : _event_contexts.culture
27453                    }
27454                };
27455            }
27456        },
27457        processSegmentSpan (span) {
27458            const culture = getCultureContext();
27459            if (culture) {
27460                safeSetSpanJSONAttributes(span, {
27461                    "culture.locale": culture.locale,
27462                    "culture.timezone": culture.timezone,
27463                    "culture.calendar": culture.calendar
27464                });
27465            }
27466        }
27467    };
27468};
27469const cultureContextIntegration = defineIntegration(_cultureContextIntegration);
27470function getCultureContext() {
27471    try {
27472        const intl = WINDOW1.Intl;
27473        if (!intl) {
27474            return void 0;
27475        }
27476        const options = intl.DateTimeFormat().resolvedOptions();
27477        return {
27478            locale: options.locale,
27479            timezone: options.timeZone,
27480            calendar: options.calendar
27481        };
27482    } catch (unused) {
27483        return void 0;
27484    }
27485}
27486;
27487// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/globalhandlers.js [app-client] (ecmascript)
27488;
27489var __TURBOPACK__imported__module__250804__25 = __TURBOPACK__imported__module__250804__;
27490var __TURBOPACK__imported__module__662537__5 = __TURBOPACK__imported__module__662537__;
27491var __TURBOPACK__imported__module__272598__32 = __TURBOPACK__imported__module__272598__;
27492var __TURBOPACK__imported__module__453288__10 = __TURBOPACK__imported__module__453288__;
27493var __TURBOPACK__imported__module__936032__5 = __TURBOPACK__imported__module__936032__;
27494;
27495;
27496;
27497;
27498const INTEGRATION_NAME7 = "GlobalHandlers";
27499const _globalHandlersIntegration = function() {
27500    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
27501    const _options = {
27502        onerror: true,
27503        onunhandledrejection: true,
27504        ...options
27505    };
27506    return {
27507        name: INTEGRATION_NAME7,
27508        setupOnce () {
27509            Error.stackTraceLimit = 50;
27510        },
27511        setup (client) {
27512            if (_options.onerror) {
27513                _installGlobalOnErrorHandler(client);
27514                globalHandlerLog("onerror");
27515            }
27516            if (_options.onunhandledrejection) {
27517                _installGlobalOnUnhandledRejectionHandler(client);
27518                globalHandlerLog("onunhandledrejection");
27519            }
27520        }
27521    };
27522};
27523const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);
27524function _installGlobalOnErrorHandler(client) {
27525    addGlobalErrorInstrumentationHandler((data)=>{
27526        const { stackParser, attachStacktrace } = getOptions();
27527        if ((0, __TURBOPACK__imported__module__250804__25["getClient"])() !== client || shouldIgnoreOnError()) {
27528            return;
27529        }
27530        const { msg, url, line, column, error } = data;
27531        const event = _enhanceEventWithInitialFrame(eventFromUnknownInput1(stackParser, error || msg, void 0, attachStacktrace, false), url, line, column);
27532        event.level = "error";
27533        (0, __TURBOPACK__imported__module__662537__5["captureEvent"])(event, {
27534            originalException: error,
27535            mechanism: {
27536                handled: false,
27537                type: "auto.browser.global_handlers.onerror"
27538            }
27539        });
27540    });
27541}
27542function _installGlobalOnUnhandledRejectionHandler(client) {
27543    addGlobalUnhandledRejectionInstrumentationHandler((e)=>
27543{
27544        const { stackParser, attachStacktrace } = getOptions();
27545        if ((0, __TURBOPACK__imported__module__250804__25["getClient"])() !== client || shouldIgnoreOnError()) {
27546            return;
27547        }
27548        const error = _getUnhandledRejectionError(e);
27549        const event = (0, __TURBOPACK__imported__module__453288__10["isPrimitive"])(error) ? _eventFromRejectionWithPrimitive(error) : eventFromUnknownInput1(stackParser, error, void 0, attachStacktrace, true);
27550        event.level = "error";
27551        (0, __TURBOPACK__imported__module__662537__5["captureEvent"])(event, {
27552            originalException: error,
27553            mechanism: {
27554                handled: false,
27555                type: "auto.browser.global_handlers.onunhandledrejection"
27556            }
27557        });
27558    });
27559}
27560function _getUnhandledRejectionError(error) {
27561    if ((0, __TURBOPACK__imported__module__453288__10["isPrimitive"])(error)) {
27562        return error;
27563    }
27564    try {
27565        if ("reason" in error) {
27566            return error.reason;
27567        }
27568        if ("detail" in error && "reason" in error.detail) {
27569            return error.detail.reason;
27570        }
27571    } catch (unused) {}
27572    return error;
27573}
27574function _eventFromRejectionWithPrimitive(reason) {
27575    return {
27576        exception: {
27577            values: [
27578                {
27579                    type: "UnhandledRejection",
27580                    // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)
27581                    value: "Non-Error promise rejection captured with value: ".concat(String(reason))
27582                }
27583            ]
27584        }
27585    };
27586}
27587function _enhanceEventWithInitialFrame(event, url, lineno, colno) {
27588    const e = event.exception = event.exception || {};
27589    const ev = e.values = e.values || [];
27590    const ev0 = ev[0] = ev[0] || {};
27591    const ev0s = ev0.stacktrace = ev0.stacktrace || {};
27592    const ev0sf = ev0s.frames = ev0s.frames || [];
27593    if (ev0sf.length === 0) {
27594        var _getFilenameFromUrl;
27595        ev0sf.push({
27596            colno,
27597            lineno,
27598            filename: (_getFilenameFromUrl = getFilenameFromUrl(url)) !== null && _getFilenameFromUrl !== void 0 ? _getFilenameFromUrl : getLocationHref(),
27599            function: __TURBOPACK__imported__module__936032__5["UNKNOWN_FUNCTION"],
27600            in_app: true
27601        });
27602    }
27603    return event;
27604}
27605function globalHandlerLog(type) {
27606    DEBUG_BUILD1 && __TURBOPACK__imported__module__272598__32["debug"].log("Global Handler attached: ".concat(type));
27607}
27608function getOptions() {
27609    const client = (0, __TURBOPACK__imported__module__250804__25["getClient"])();
27610    const options = (client === null || client === void 0 ? void 0 : client.getOptions()) || {
27611        stackParser: ()=>[],
27612        attachStacktrace: false
27613    };
27614    return options;
27615}
27616function getFilenameFromUrl(url) {
27617    if (!(0, __TURBOPACK__imported__module__453288__10["isString"])(url) || url.length === 0) {
27618        return void 0;
27619    }
27620    if (url.startsWith("data:")) {
27621        return "<".concat(stripDataUrlContent(url, false), ">");
27622    }
27623    return url;
27624}
27625;
27626// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/httpcontext.js [app-client] (ecmascript)
27627;
27628;
27629;
27630;
27631const httpContextIntegration = defineIntegration(()=>{
27632    return {
27633        name: "HttpContext",
27634        preprocessEvent (event) {
27635            var _event_request;
27636            if (!WINDOW1.navigator && !WINDOW1.location && !WINDOW1.document) {
27637                return;
27638            }
27639            const reqData = getHttpRequestData();
27640            const headers = {
27641                ...reqData.headers,
27642                ...(_event_request = event.request) === null || _event_request === void 0 ? void 0 : _event_request.headers
27643            };
27644            event.request = {
27645                ...reqData,
27646                ...event.request,
27647                headers
27648            };
27649        },
27650        processSpan (span) {
27651            var _span_attributes;
27652            if (!WINDOW1.navigator && !WINDOW1.location && !WINDOW1.document) {
27653                return;
27654            }
27655            const reqData = getHttpRequestData();
27656            safeSetSpanJSONAttributes(span, {
27657                // This attribute is used by the "Filter out events from legacy browsers and crawlers" features on the Sentry backend.
27658                // Therefore, it's set on every span.
27659                [Qu]: reqData.headers["User-Agent"],
27660                // These attributes, we only need on the segment span (analogous to the `request` context for events)
27661                ...span.is_segment && {
27662                    // Coerce empty string to undefined so the helper's nullish check drops it,
27663                    // rather than writing an empty `url.full` attribute onto the span.
27664                    [Yu]: ((_span_attributes = span.attributes) === null || _span_attributes === void 0 ? void 0 : _span_attributes[Sc]) !== "http.client" ? reqData.url : void 0,
27665                    ["".concat(ts, ".referer")]: reqData.headers["Referer"]
27666                }
27667            });
27668        }
27669    };
27670});
27671;
27672// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/integrations/linkederrors.js [app-client] (ecmascript)
27673;
27674// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js [app-client] (ecmascript)
27675;
27676var __TURBOPACK__imported__module__453288__11 = __TURBOPACK__imported__module__453288__;
27677;
27678function applyAggregateErrorsToEvent(exceptionFromErrorImplementation, parser, key, limit, event, hint) {
27679    var _event_exception;
27680    if (!((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : _event_exception.values) || !hint || !(0, __TURBOPACK__imported__module__453288__11["isError"])(hint.originalException)) {
27681        return;
27682    }
27683    const originalException = event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : void 0;
27684    if (originalException) {
27685        event.exception.values = aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, hint.originalException, key, event.exception.values, originalException, 0);
27686    }
27687}
27688function aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, error, key, prevExceptions, exception, exceptionId) {
27689    if (prevExceptions.length >= limit + 1) {
27690        return prevExceptions;
27691    }
27692    let newExceptions = [
27693        ...prevExceptions
27694    ];
27695    if ((0, __TURBOPACK__imported__module__453288__11["isError"])(error[key])) {
27696        applyExceptionGroupFieldsForParentException(exception, exceptionId, error);
27697        const newException = exceptionFromErrorImplementation(parser, error[key]);
27698        const newExceptionId = newExceptions.length;
27699        applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);
27700        newExceptions = aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, error[key], key, [
27701            newException,
27702            ...newExceptions
27703        ], newException, newExceptionId);
27704    }
27705    if (isExceptionGroup(error)) {
27706        error.errors.forEach((childError, i)=>{
27707            if ((0, __TURBOPACK__imported__module__453288__11["isError"])(childError)) {
27708                applyExceptionGroupFieldsForParentException(exception, exceptionId, error);
27709                const newException = exceptionFromErrorImplementation(parser, childError);
27710                const newExceptionId = newExceptions.length;
27711                applyExceptionGroupFieldsForChildException(newException, "errors[".concat(i, "]"), newExceptionId, exceptionId);
27712                newExceptions = aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, childError, key, [
27713                    newException,
27714                    ...newExceptions
27715                ], newException, newExceptionId);
27716            }
27717        });
27718    }
27719    return newExceptions;
27720}
27721function isExceptionGroup(error) {
27722    return Array.isArray(error.errors);
27723}
27724function applyExceptionGroupFieldsForParentException(exception, exceptionId, error) {
27725    exception.mechanism = {
27726        handled: true,
27727        type: "auto.core.linked_errors",
27728        ...isExceptionGroup(error) && {
27729            is_exception_group: true
27730        },
27731        ...exception.mechanism,
27732        exception_id: exceptionId
27733    };
27734}
27735function applyExceptionGroupFieldsForChildException(exception, source, exceptionId, parentId) {
27736    exception.mechanism = {
27737        handled: true,
27738        ...exception.mechanism,
27739        type: "chained",
27740        source,
27741        exception_id: exceptionId,
27742        parent_id: parentId
27743    };
27744}
27745;
27746;
27747;
27748const DEFAULT_KEY = "cause";
27749const DEFAULT_LIMIT = 5;
27750const INTEGRATION_NAME8 = "LinkedErrors";
27751const _linkedErrorsIntegration = function() {
27752    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
27753    const limit = options.limit || DEFAULT_LIMIT;
27754    const key = options.key || DEFAULT_KEY;
27755    return {
27756        name: INTEGRATION_NAME8,
27757        preprocessEvent (event, hint, client) {
27758            const options2 = client.getOptions();
27759            applyAggregateErrorsToEvent(// This differs from the LinkedErrors integration in core by using a different exceptionFromError function
27760            exceptionFromError1, options2.stackParser, key, limit, event, hint);
27761        }
27762    };
27763};
27764const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);
27765;
27766// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/stack-parsers.js [app-client] (ecmascript)
27767;
27768var __TURBOPACK__imported__module__936032__6 = __TURBOPACK__imported__module__936032__;
27769;
27770const OPERA10_PRIORITY = 10;
27771const OPERA11_PRIORITY = 20;
27772const CHROME_PRIORITY = 30;
27773const WINJS_PRIORITY = 40;
27774const GECKO_PRIORITY = 50;
27775function createFrame(filename, func, lineno, colno) {
27776    const frame = {
27777        filename,
27778        function: func === "<anonymous>" ? __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"] : func,
27779        in_app: true
27780    };
27781    if (lineno !== void 0) {
27782        frame.lineno = lineno;
27783    }
27784    if (colno !== void 0) {
27785        frame.colno = colno;
27786    }
27787    return frame;
27788}
27789const chromeRegexNoFnName = /^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i;
27790const chromeRegex = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
27791const chromeEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/;
27792const chromeDataUriRegex = /at (.+?) ?\(data:(.+?),/;
27793const chromeStackParserFn = (line)=>{
27794    const dataUriMatch = line.match(chromeDataUriRegex);
27795    if (dataUriMatch) {
27796        return {
27797            filename: "<data:".concat(dataUriMatch[2], ">"),
27798            function: dataUriMatch[1]
27799        };
27800    }
27801    const noFnParts = chromeRegexNoFnName.exec(line);
27802    if (noFnParts) {
27803        const [, filename, line2, col] = noFnParts;
27804        return createFrame(filename, __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"], +line2, +col);
27805    }
27806    const parts = chromeRegex.exec(line);
27807    if (parts) {
27808        var _parts_;
27809        const isEval = ((_parts_ = parts[2]) === null || _parts_ === void 0 ? void 0 : _parts_.indexOf("eval")) === 0;
27810        if (isEval) {
27811            const subMatch = chromeEvalRegex.exec(parts[2]);
27812            if (subMatch) {
27813                parts[2] = subMatch[1];
27814                parts[3] = subMatch[2];
27815                parts[4] = subMatch[3];
27816            }
27817        }
27818        const [func, filename] = extractSafariExtensionDetails(parts[1] || __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"], parts[2]);
27819        return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0);
27820    }
27821    return;
27822};
27823const chromeStackLineParser = [
27824    CHROME_PRIORITY,
27825    chromeStackParserFn
27826];
27827const geckoREgex = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i;
27828const geckoEvalRegex = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
27829const gecko = (line)=>{
27830    const parts = geckoREgex.exec(line);
27831    if (parts) {
27832        const isEval = parts[3] && parts[3].indexOf(" > eval") > -1;
27833        if (isEval) {
27834            const subMatch = geckoEvalRegex.exec(parts[3]);
27835            if (subMatch) {
27836                parts[1] = parts[1] || "eval";
27837                parts[3] = subMatch[1];
27838                parts[4] = subMatch[2];
27839                parts[5] = "";
27840            }
27841        }
27842        let filename = parts[3];
27843        let func = parts[1] || __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"];
27844        [func, filename] = extractSafariExtensionDetails(func, filename);
27845        return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0);
27846    }
27847    return;
27848};
27849const geckoStackLineParser = [
27850    GECKO_PRIORITY,
27851    gecko
27852];
27853const winjsRegex = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
27854const winjs = (line)=>{
27855    const parts = winjsRegex.exec(line);
27856    return parts ? createFrame(parts[2], parts[1] || __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"], +parts[3], parts[4] ? +parts[4] : void 0) : void 0;
27857};
27858const winjsStackLineParser = [
27859    WINJS_PRIORITY,
27860    winjs
27861];
27862const opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
27863const opera10 = (line)=>{
27864    const parts = opera10Regex.exec(line);
27865    return parts ? createFrame(parts[2], parts[3] || __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"], +parts[1]) : void 0;
27866};
27867const opera10StackLineParser = [
27868    OPERA10_PRIORITY,
27869    opera10
27870];
27871const opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
27872const opera11 = (line)=>{
27873    const parts = opera11Regex.exec(line);
27874    return parts ? createFrame(parts[5], parts[3] || parts[4] || __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"], +parts[1], 
27874+parts[2]) : void 0;
27875};
27876const opera11StackLineParser = [
27877    OPERA11_PRIORITY,
27878    opera11
27879];
27880const defaultStackLineParsers = [
27881    chromeStackLineParser,
27882    geckoStackLineParser
27883];
27884const defaultStackParser = (0, __TURBOPACK__imported__module__936032__6["createStackParser"])(...defaultStackLineParsers);
27885const extractSafariExtensionDetails = (func, filename)=>{
27886    const isSafariExtension = func.indexOf("safari-extension") !== -1;
27887    const isSafariWebExtension = func.indexOf("safari-web-extension") !== -1;
27888    return isSafariExtension || isSafariWebExtension ? [
27889        func.indexOf("@") !== -1 ? func.split("@")[0] : __TURBOPACK__imported__module__936032__6["UNKNOWN_FUNCTION"],
27890        isSafariExtension ? "safari-extension:".concat(filename) : "safari-web-extension:".concat(filename)
27891    ] : [
27892        func,
27893        filename
27894    ];
27895};
27896;
27897// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/transports/fetch.js [app-client] (ecmascript)
27898;
27899// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/getNativeImplementation.js [app-client] (ecmascript)
27900;
27901var __TURBOPACK__imported__module__272598__33 = __TURBOPACK__imported__module__272598__;
27902;
27903;
27904;
27905const cachedImplementations = {};
27906function getNativeImplementation(name) {
27907    const cached = cachedImplementations[name];
27908    if (cached) {
27909        return cached;
27910    }
27911    let impl = WINDOW3[name];
27912    if (isNativeFunction(impl)) {
27913        return cachedImplementations[name] = impl.bind(WINDOW3);
27914    }
27915    const document1 = WINDOW3.document;
27916    if (document1 && typeof document1.createElement === "function") {
27917        try {
27918            const sandbox = document1.createElement("iframe");
27919            sandbox.hidden = true;
27920            document1.head.appendChild(sandbox);
27921            const contentWindow = sandbox.contentWindow;
27922            if (contentWindow === null || contentWindow === void 0 ? void 0 : contentWindow[name]) {
27923                impl = contentWindow[name];
27924            }
27925            document1.head.removeChild(sandbox);
27926        } catch (e) {
27927            DEBUG_BUILD && __TURBOPACK__imported__module__272598__33["debug"].warn("Could not create sandbox iframe for ".concat(name, " check, bailing to window.").concat(name, ": "), e);
27928        }
27929    }
27930    if (!impl) {
27931        return impl;
27932    }
27933    return cachedImplementations[name] = impl.bind(WINDOW3);
27934}
27935function clearCachedImplementation(name) {
27936    cachedImplementations[name] = void 0;
27937}
27938function fetch() {
27939    for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
27940        rest[_key] = arguments[_key];
27941    }
27942    return getNativeImplementation("fetch")(...rest);
27943}
27944function setTimeout1() {
27945    for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
27946        rest[_key] = arguments[_key];
27947    }
27948    return getNativeImplementation("setTimeout")(...rest);
27949}
27950;
27951;
27952;
27953const DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE = 40;
27954function makeFetchTransport(options) {
27955    let nativeFetch = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : getNativeImplementation("fetch");
27956    let pendingBodySize = 0;
27957    let pendingCount = 0;
27958    async function makeRequest(request) {
27959        const requestSize = request.body.length;
27960        pendingBodySize += requestSize;
27961        pendingCount++;
27962        const requestOptions = {
27963            body: request.body,
27964            method: "POST",
27965            referrerPolicy: "strict-origin",
27966            headers: options.headers,
27967            // Outgoing requests are usually cancelled when navigating to a different page, causing a "TypeError: Failed to
27968            // fetch" error and sending a "network_error" client-outcome - in Chrome, the request status shows "(cancelled)".
27969            // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're
27970            // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).
27971            // Gotchas:
27972            // - `keepalive` isn't supported by Firefox
27973            // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):
27974            //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.
27975            //   We will therefore only activate the flag when we're below that limit.
27976            // There is also a limit of requests that can be open at the same time, so we also limit this to 15
27977            // See https://github.com/getsentry/sentry-javascript/pull/7553 for details
27978            keepalive: pendingBodySize <= 6e4 && pendingCount < 15,
27979            ...options.fetchOptions
27980        };
27981        try {
27982            const response = await nativeFetch(options.url, requestOptions);
27983            return {
27984                statusCode: response.status,
27985                headers: {
27986                    "x-sentry-rate-limits": response.headers.get("X-Sentry-Rate-Limits"),
27987                    "retry-after": response.headers.get("Retry-After")
27988                }
27989            };
27990        } catch (e) {
27991            clearCachedImplementation("fetch");
27992            throw e;
27993        } finally{
27994            pendingBodySize -= requestSize;
27995            pendingCount--;
27996        }
27997    }
27998    return createTransport(options, makeRequest, makePromiseBuffer(options.bufferSize || DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE));
27999}
28000;
28001// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/normalizeStringifyValue.js [a
28001pp-client] (ecmascript)
28002;
28003// MERGED MODULE: [project]/node_modules/@sentry/browser-utils/build/esm/is.js [app-client] (ecmascript)
28004;
28005function isElement(wat) {
28006    if (typeof Element === "undefined") {
28007        return false;
28008    }
28009    try {
28010        return wat instanceof Element;
28011    } catch (unused) {
28012        return false;
28013    }
28014}
28015;
28016;
28017const HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX = /^HTML(\w*)Element$/;
28018function normalizeStringifyValue(value) {
28019    if (typeof window !== "undefined" && value === window) {
28020        return "[Window]";
28021    }
28022    if (typeof document !== "undefined" && value === document) {
28023        return "[Document]";
28024    }
28025    if (isElement(value)) {
28026        const objName = getConstructorName(value);
28027        if (HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX.test(objName)) {
28028            return "[HTMLElement: ".concat(htmlTreeAsString1(value), "]");
28029        }
28030    }
28031    return void 0;
28032}
28033function getConstructorName(value) {
28034    const prototype = Object.getPrototypeOf(value);
28035    return (prototype === null || prototype === void 0 ? void 0 : prototype.constructor) ? prototype.constructor.name : "null prototype";
28036}
28037;
28038// MERGED MODULE: [project]/node_modules/@sentry/browser/build/npm/esm/prod/utils/detectBrowserExtension.js [app-client] (ecmascript)
28039;
28040var __TURBOPACK__imported__module__272598__34 = __TURBOPACK__imported__module__272598__;
28041;
28042;
28043;
28044function checkAndWarnIfIsEmbeddedBrowserExtension() {
28045    if (_isEmbeddedBrowserExtension()) {
28046        if (DEBUG_BUILD1) {
28047            (0, __TURBOPACK__imported__module__272598__34["consoleSandbox"])(()=>{
28048                console.error("[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/");
28049            });
28050        }
28051        return true;
28052    }
28053    return false;
28054}
28055function _isEmbeddedBrowserExtension() {
28056    var _extensionObject_runtime;
28057    if (typeof WINDOW1.window === "undefined") {
28058        return false;
28059    }
28060    const _window = WINDOW1;
28061    if (_window.nw) {
28062        return false;
28063    }
28064    const extensionObject = _window["chrome"] || _window["browser"];
28065    if (!(extensionObject === null || extensionObject === void 0 ? void 0 : (_extensionObject_runtime = extensionObject.runtime) === null || _extensionObject_runtime === void 0 ? void 0 : _extensionObject_runtime.id)) {
28066        return false;
28067    }
28068    const href = getLocationHref();
28069    const isDedicatedExtensionPage = WINDOW1 === WINDOW1.top && /^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\/\//.test(href);
28070    return !isDedicatedExtensionPage;
28071}
28072;
28073;
28074;
28075;
28076;
28077;
28078;
28079;
28080;
28081;
28082;
28083;
28084;
28085;
28086function getDefaultIntegrations(_options) {
28087    return [
28088        // TODO(v11): Replace with `eventFiltersIntegration` once we remove the deprecated `inboundFiltersIntegration`
28089        // eslint-disable-next-line typescript/no-deprecated
28090        inboundFiltersIntegration(),
28091        functionToStringIntegration(),
28092        conversationIdIntegration(),
28093        browserApiErrorsIntegration(),
28094        breadcrumbsIntegration(),
28095        globalHandlersIntegration(),
28096        linkedErrorsIntegration(),
28097        dedupeIntegration(),
28098        httpContextIntegration(),
28099        cultureContextIntegration(),
28100        browserSessionIntegration()
28101    ];
28102}
28103function init() {
28104    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
28105    const shouldDisableBecauseIsBrowserExtenstion = !options.skipBrowserExtensionCheck && checkAndWarnIfIsEmbeddedBrowserExtension();
28106    let defaultIntegrations = options.defaultIntegrations == null ? getDefaultIntegrations() : options.defaultIntegrations;
28107    const clientOptions = {
28108        ...options,
28109        enabled: shouldDisableBecauseIsBrowserExtenstion ? false : options.enabled,
28110        stackParser: (0, __TURBOPACK__imported__module__936032__3["stackParserFromStackParserOptions"])(options.stackParser || defaultStackParser),
28111        integrations: getIntegrationsToSetup({
28112            integrations: options.integrations,
28113            defaultIntegrations
28114        }),
28115        transport: options.transport || makeFetchTransport
28116    };
28117    (0, __TURBOPACK__imported__module__45968__["setNormalizeStringifier"])(normalizeStringifyValue);
28118    return initAndBind(BrowserClient, clientOptions);
28119}
28120function forceLoad() {}
28121function onLoad(callback) {
28122    callback();
28123}
28124;
28125var __TURBOPACK__imported__module__45968__3 = __TURBOPACK__imported__module__45968__;
28126var __TURBOPACK__imported__module__271645__ = __turbopack_context__.i(271645);
28127// MERGED MODULE: [project]/node_modules/@sentry/nextjs/node_modules/@sentry/react/build/esm/isSyntheticEvent.js [app-client] (ecmascript)
28128;
28129var __TURBOPACK__imported__module__453288__12 = __TURBOPACK__imported__module__453288__;
28130;
28131function isSyntheticEvent(wat) {
28132    return (0, __TURBOPACK__imported__module__453288__12["isPlainObject"])(wat) && "nativeEvent" in wat && "preventDefault" in wat && "stopPropagation" in wat;
28133}
28134;
28135;
28136;
28137;
28138;
28139function init1(options) {
28140    const opts = {
28141        ...options
28142    };
28143    applySdkMetadata(opts, "react");
28144    (0, __TURBOPACK__imported__module__662537__3["setContext"])("react", {
28145        version: __TURBOPACK__imported__module__271645__["version"]
28146    });
28147    const client = init(opts);
28148    (0, __TURBOPACK__imported__module__45968__3["setNormalizeStringifier"])(normalizeStringifyValue1);
28149    return client;
28150}
28151function normalizeStringifyValue1(value) {
28152    if (isSyntheticEvent(value)) {
28153        return "[SyntheticEvent]";
28154    }
28155    return normalizeStringifyValue(value);
28156}
28157;
28158// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/common/getVercelEnv.js [app-client] (ecmascript)
28159;
28160var __TURBOPACK__imported__module__247167__3 = __TURBOPACK__imported__module__247167__;
28161function getVercelEnv(isClient) {
28162    const vercelEnvVar = isClient ? __TURBOPACK__imported__module__247167__3["default"].env.NEXT_PUBLIC_VERCEL_ENV : __TURBOPACK__imported__module__247167__3["default"].env.VERCEL_ENV;
28163    return vercelEnvVar ? "vercel-".concat(vercelEnvVar) : void 0;
28164}
28165;
28166// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js [app-client] (ecmascript)
28167;
28168var __TURBOPACK__imported__module__453288__13 = __TURBOPACK__imported__module__453288__;
28169;
28170function isNotFoundNavigationError(subject) {
28171    return (0, __TURBOPACK__imported__module__453288__13["isError"])(subject) && [
28172        "NEXT_NOT_FOUND",
28173        "NEXT_HTTP_ERROR_FALLBACK;404"
28174    ].includes(subject.digest);
28175}
28176function isRedirectNavigationError(subject) {
28177    return (0, __TURBOPACK__imported__module__453288__13["isError"])(subject) && typeof subject.digest === "string" && subject.digest.startsWith("NEXT_REDIRECT;");
28178}
28179;
28180// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/browserTracingIntegration.js [app-client] (ecmascript)
28181;
28182// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/routing/nextRoutingInstrumentation.js [app-client] (ecmascript)
28183;
28184var __TURBOPACK__imported__module__247167__4 = __TURBOPACK__imported__module__247167__;
28185// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/routing/pagesRouterRoutingInstrumentation.js [app-client] (ecmascript)
28186;
28187var __TURBOPACK__imported__module__602309__3 = __TURBOPACK__imported__module__602309__;
28188var __TURBOPACK__imported__module__605394__15 = __TURBOPACK__imported__module__605394__;
28189var __TURBOPACK__imported__module__519988__19 = __TURBOPACK__imported__module__519988__;
28190var __TURBOPACK__imported__module__272598__35 = __TURBOPACK__imported__module__272598__;
28191;
28192;
28193;
28194;
28195const globalObject = WINDOW1;
28196function extractNextDataTagInformation() {
28197    let nextData;
28198    const nextDataTag = globalObject.document.getElementById("__NEXT_DATA__");
28199    if (nextDataTag === null || nextDataTag === void 0 ? void 0 : nextDataTag.innerHTML) {
28200        try {
28201            nextData = JSON.parse(nextDataTag.innerHTML);
28202        } catch (unused) {
28203            DEBUG_BUILD2 && __TURBOPACK__imported__module__272598__35["debug"].warn("Could not extract __NEXT_DATA__");
28204        }
28205    }
28206    if (!nextData) {
28207        return {};
28208    }
28209    const nextDataTagInfo = {};
28210    const { page, query, props } = nextData;
28211    nextDataTagInfo.route = page;
28212    nextDataTagInfo.params = query;
28213    if (props === null || props === void 0 ? void 0 : props.pageProps) {
28214        nextDataTagInfo.sentryTrace = props.pageProps._sentryTraceData;
28215        nextDataTagInfo.baggage = props.pageProps._sentryBaggage;
28216    }
28217    return nextDataTagInfo;
28218}
28219function pagesRouterInstrumentPageLoad(client) {
28220    const { route, params, sentryTrace, baggage } = extractNextDataTagInformation();
28221    const parsedBaggage = (0, __TURBOPACK__imported__module__602309__3["parseBaggageHeader"])(baggage);
28222    let name = route || globalObject.location.pathname;
28223    if ((parsedBaggage === null || parsedBaggage === void 0 ? void 0 : parsedBaggage["sentry-transaction"]) && name === "/_error") {
28224        name = parsedBaggage["sentry-transaction"];
28225        name = name.replace(/^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS|TRACE|CONNECT)\s+/i, "");
28226    }
28227    const origin = (0, __TURBOPACK__imported__module__605394__15["browserPerformanceTimeOrigin"])();
28228    startBrowserTracingPageLoadSpan(client, {
28229        name,
28230        // pageload should always start at timeOrigin (and needs to be in s, not ms)
28231        startTime: origin ? origin / 1e3 : void 0,
28232        attributes: {
28233            [__TURBOPACK__imported__module__519988__19["SEMANTIC_ATTRIBUTE_SENTRY_OP"]]: "pageload",
28234            [__TURBOPACK__imported__module__519988__19["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"]]: "auto.pageload.nextjs.pages_router_instrumentation",
28235            [__TURBOPACK__imported__module__519988__19["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]]: route ? "route" : "url",
28236            ...route && {
28237                [ju]: route
28238            },
28239            ...params && {
28240                ...params
28241            }
28242        }
28243    }, {
28244        sentryTrace,
28245        baggage
28246    });
28247}
28248;
28249;
28250;
28251;
28252;
28253function nextRouterInstrumentPageLoad(client) {
28254    const isAppRouter = !WINDOW1.document.getElementById("__NEXT_DATA__");
28255    if (isAppRouter) {
28256        appRouterInstrumentPageLoad(client);
28257    } else {
28258        pagesRouterInstrumentPageLoad(client);
28259    }
28260}
28261function nextRouterInstrumentNavigation(client) {
28262    const isAppRouter = !WINDOW1.document.getElementById("__NEXT_DATA__");
28263    if (isAppRouter) {
28264        appRouterInstrumentNavigation(client);
28265    } else if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
28266    ;
28267}
28268;
28269;
28270;
28271function browserTracingIntegration1() {
28272    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
28273    const browserTracingIntegrationInstance = browserTracingIntegration({
28274        ...options,
28275        instrumentNavigation: false,
28276        instrumentPageLoad: false,
28277        onRequestSpanStart () {
28278            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
28279                args[_key] = arguments[_key];
28280            }
28281            var _options_onRequestSpanStart;
28282            const [span, { headers }] = args;
28283            if (headers === null || headers === void 0 ? void 0 : headers.get("next-router-prefetch")) {
28284                span === null || span === void 0 ? void 0 : span.setAttribute("http.request.prefetch", true);
28285            }
28286            return (_options_onRequestSpanStart = options.onRequestSpanStart) === null || _options_onRequestSpanStart === void 0 ? void 0 : _options_onRequestSpanStart.call(options, ...args);
28287        }
28288    });
28289    const { instrumentPageLoad = true, instrumentNavigation = true } = options;
28290    return {
28291        ...browserTracingIntegrationInstance,
28292        afterAllSetup (client) {
28293            if (isBotUserAgent()) {
28294                return;
28295            }
28296            if (instrumentNavigation) {
28297                nextRouterInstrumentNavigation(client);
28298            }
28299            browserTracingIntegrationInstance.afterAllSetup(client);
28300            if (instrumentPageLoad) {
28301                nextRouterInstrumentPageLoad(client);
28302            }
28303        }
28304    };
28305}
28306;
28307// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/clientNormalizationIntegration.js [app-client] (ecmascript)
28308;
28309// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integrations/rewriteframes.js [app-client] (ecmascript)
28310;
28311// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/path.js [app-client] (ecmascript)
28312;
28313function normalizeArray(parts, allowAboveRoot) {
28314    let up = 0;
28315    for(let i = parts.length - 1; i >= 0; i--){
28316        const last = parts[i];
28317        if (last === ".") {
28318            parts.splice(i, 1);
28319        } else if (last === "..") {
28320            parts.splice(i, 1);
28321            up++;
28322        } else if (up) {
28323            parts.splice(i, 1);
28324            up--;
28325        }
28326    }
28327    if (allowAboveRoot) {
28328        for(; up--; up){
28329            parts.unshift("..");
28330        }
28331    }
28332    return parts;
28333}
28334const splitPathRe = /^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/;
28335function splitPath(filename) {
28336    const truncated = filename.length > 1024 ? "<truncated>".concat(filename.slice(-1024)) : filename;
28337    const parts = splitPathRe.exec(truncated);
28338    return parts ? parts.slice(1) : [];
28339}
28340function resolve() {
28341    for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
28342        args[_key] = arguments[_key];
28343    }
28344    let resolvedPath = "";
28345    let resolvedAbsolute = false;
28346    for(let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--){
28347        const path = i >= 0 ? args[i] : "/";
28348        if (!path) {
28349            continue;
28350        }
28351        resolvedPath = "".concat(path, "/").concat(resolvedPath);
28352        resolvedAbsolute = path.charAt(0) === "/";
28353    }
28354    resolvedPath = normalizeArray(resolvedPath.split("/").filter((p)=>!!p), !resolvedAbsolute).join("/");
28355    return (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
28356}
28357function trim(arr) {
28358    let start = 0;
28359    for(; start < arr.length; start++){
28360        if (arr[start] !== "") {
28361            break;
28362        }
28363    }
28364    let end = arr.length - 1;
28365    for(; end >= 0; end--){
28366        if (arr[end] !== "") {
28367            break;
28368        }
28369    }
28370    if (start > end) {
28371        return [];
28372    }
28373    return arr.slice(start, end - start + 1);
28374}
28375function relative(from, to) {
28376    from = resolve(from).slice(1);
28377    to = resolve(to).slice(1);
28378    const fromParts = trim(from.split("/"));
28379    const toParts = trim(to.split("/"));
28380    const length = Math.min(fromParts.length, toParts.length);
28381    let samePartsLength = length;
28382    for(let i = 0; i < length; i++){
28383        if (fromParts[i] !== toParts[i]) {
28384            samePartsLength = i;
28385            break;
28386        }
28387    }
28388    let outputParts = [];
28389    for(let i = samePartsLength; i < fromParts.length; i++){
28390        outputParts.push("..");
28391    }
28392    outputParts = outputParts.concat(toParts.slice(samePartsLength));
28393    return outputParts.join("/");
28394}
28395function normalizePath(path) {
28396    const isPathAbsolute = isAbsolute(path);
28397    const trailingSlash = path.slice(-1) === "/";
28398    let normalizedPath = normalizeArray(path.split("/").filter((p)=>!!p), !isPathAbsolute).join("/");
28399    if (!normalizedPath && !isPathAbsolute) {
28400        normalizedPath = ".";
28401    }
28402    if (normalizedPath && trailingSlash) {
28403        normalizedPath += "/";
28404    }
28405    return (isPathAbsolute ? "/" : "") + normalizedPath;
28406}
28407function isAbsolute(path) {
28408    return path.charAt(0) === "/";
28409}
28410function join() {
28411    for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
28412        args[_key] = arguments[_key];
28413    }
28414    return normalizePath(args.join("/"));
28415}
28416function dirname(path) {
28417    const result = splitPath(path);
28418    const root = result[0] || "";
28419    let dir = result[1];
28420    if (!root && !dir) {
28421        return ".";
28422    }
28423    if (dir) {
28424        dir = dir.slice(0, dir.length - 1);
28425    }
28426    return root + dir;
28427}
28428function basename(path, ext) {
28429    let f = splitPath(path)[2] || "";
28430    if (ext && f.slice(ext.length * -1) === ext) {
28431        f = f.slice(0, f.length - ext.length);
28432    }
28433    return f;
28434}
28435;
28436var __TURBOPACK__imported__module__225304__12 = __TURBOPACK__imported__module__225304__;
28437;
28438;
28439;
28440const INTEGRATION_NAME9 = "RewriteFrames";
28441const rewriteFramesIntegration = defineIntegration(function() {
28442    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
28443    const root = options.root;
28444    const prefix = options.prefix || "app:///";
28445    const isBrowser = "window" in __TURBOPACK__imported__module__225304__12["GLOBAL_OBJ"] && !!__TURBOPACK__imported__module__225304__12["GLOBAL_OBJ"].window;
28446    const iteratee = options.iteratee || generateIteratee({
28447        isBrowser,
28448        root,
28449        prefix
28450    });
28451    function _processExceptionsEvent(event) {
28452        try {
28453            return {
28454                ...event,
28455                exception: {
28456                    ...event.exception,
28457                    // The check for this is performed inside `process` call itself, safe to skip here
28458                    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
28459                    values: event.exception.values.map((value)=>({
28460                            ...value,
28461                            ...value.stacktrace && {
28462                                stacktrace: _processStacktrace(value.stacktrace)
28463                            }
28464                        }))
28465                }
28466            };
28467        } catch (unused) {
28468            return event;
28469        }
28470    }
28471    function _processStacktrace(stacktrace) {
28472        var _stacktrace_frames;
28473        return {
28474            ...stacktrace,
28475            frames: stacktrace === null || stacktrace === void 0 ? void 0 : (_stacktrace_frames = stacktrace.frames) === null || _stacktrace_frames === void 0 ? void 0 : _stacktrace_frames.map((f)=>iteratee(f))
28476        };
28477    }
28478    return {
28479        name: INTEGRATION_NAME9,
28480        processEvent (originalEvent) {
28481            let processedEvent = originalEvent;
28482            if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) {
28483                processedEvent = _processExceptionsEvent(processedEvent);
28484            }
28485            return processedEvent;
28486        }
28487    };
28488});
28489function generateIteratee(param) {
28490    let { isBrowser, root, prefix } = param;
28491    return (frame)=>{
28492        if (!frame.filename) {
28493            return frame;
28494        }
28495        const isWindowsFrame = /^[a-zA-Z]:\\/.test(frame.filename) || // or the presence of a backslash without a forward slash (which are not allowed on Windows)
28496        frame.filename.includes("\\") && !frame.filename.includes("/");
28497        const startsWithSlash = /^\//.test(frame.filename);
28498        if (isBrowser) {
28499            if (root) {
28500                const oldFilename = frame.filename;
28501                if (oldFilename.indexOf(root) === 0) {
28502                    frame.filename = oldFilename.replace(root, prefix);
28503                }
28504            }
28505        } else {
28506            if (isWindowsFrame || startsWithSlash) {
28507                const filename = isWindowsFrame ? frame.filename.replace(/^[a-zA-Z]:/, "").replace(/\\/g, "/") : frame.filename;
28508                const base = root ? relative(root, filename) : basename(filename);
28509                frame.filename = "".concat(prefix).concat(base);
28510            }
28511        }
28512        return frame;
28513    };
28514}
28515;
28516;
28517;
28518const NEXTJS_INTERNAL_CHUNK_REGEX = /\/_next\/static\/chunks\/(main-|main-app-|polyfills-|webpack-|framework-|framework\.)[0-9a-f]+\.js(:\d+)*$/;
28519const nextjsClientStackFrameNormalizationIntegration = defineIntegration((param)=>{
28520    let { assetPrefix, basePath, rewriteFramesAssetPrefixPath, experimentalThirdPartyOriginStackFrames } = param;
28521    const rewriteFramesInstance = rewriteFramesIntegration({
28522        // Turn `<origin>/<path>/_next/static/...` into `app:///_next/static/...`
28523        iteratee: (frame)=>{
28524            var _frame_filename, _frame_filename1;
28525            if (experimentalThirdPartyOriginStackFrames) {
28526                var _frame_filename2;
28527                const windowOrigin = typeof window !== "undefined" && window.location ? window.location.origin : "";
28528                if (((_frame_filename2 = frame.filename) === null || _frame_filename2 === void 0 ? void 0 : _frame_filename2.startsWith(windowOrigin)) && !frame.filename.endsWith(".js")) {
28529                    return frame;
28530                }
28531                if (assetPrefix) {
28532                    var _frame_filename3;
28533                    if ((_frame_filename3 = frame.filename) === null || _frame_filename3 === void 0 ? void 0 : _frame_filename3.startsWith(assetPrefix)) {
28534                        frame.filename = frame.filename.replace(assetPrefix, "app://");
28535                    }
28536                } else if (basePath) {
28537                    try {
28538                        const { origin: frameOrigin } = new URL(frame.filename);
28539                        if (frameOrigin === windowOrigin) {
28540                            var _frame_filename4;
28541                            frame.filename = (_frame_filename4 = frame.filename) === null || _frame_filename4 === void 0 ? void 0 : _frame_filename4.replace(frameOrigin, "app://").replace(basePath, "");
28542                        }
28543                    } catch (unused) {}
28544                }
28545            } else {
28546                try {
28547                    var _frame_filename5;
28548                    const { origin } = new URL(frame.filename);
28549                    frame.filename = (_frame_filename5 = frame.filename) === null || _frame_filename5 === void 0 ? void 0 : _frame_filename5.replace(origin, "app://").replace(rewriteFramesAssetPrefixPath, "");
28550                } catch (unused) {}
28551            }
28552            if (experimentalThirdPartyOriginStackFrames) {
28553                var _frame_filename6;
28554                if ((_frame_filename6 = frame.filename) === null || _frame_filename6 === void 0 ? void 0 : _frame_filename6.includes("/_next")) {
28555                    frame.filename = decodeURI(frame.filename);
28556                }
28557            } else if ((_frame_filename = frame.filename) === null || _frame_filename === void 0 ? void 0 : _frame_filename.startsWith("app:///_next")) {
28558                frame.filename = decodeURI(frame.filename);
28559            }
28560            if ((_frame_filename1 = frame.filename) === null || _frame_filename1 === void 0 ? void 0 : _frame_filename1.match(NEXTJS_INTERNAL_CHUNK_REGEX)) {
28561                frame.in_app = false;
28562            }
28563            return frame;
28564        }
28565    });
28566    return {
28567        ...rewriteFramesInstance,
28568        name: "NextjsClientStackFrameNormalization"
28569    };
28570});
28571;
28572// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/routing/isrRoutingTracing.js [app-client] (ecmascript)
28573;
28574// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/lru.js [app-client] (ecmascript)
28575;
28576class LRUMap {
28577    /** Get the current size of the cache */ get size() {
28578        return this._cache.size;
28579    }
28580    /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */ get(key) {
28581        const value = this._cache.get(key);
28582        if (value === void 0) {
28583            return void 0;
28584        }
28585        this._cache.delete(key);
28586        this._cache.set(key, value);
28587        return value;
28588    }
28589    /** Insert an entry and evict an older entry if we've reached maxSize */ set(key, value) {
28590        if (this._cache.size >= this._maxSize) {
28591            const nextKey = this._cache.keys().next().value;
28592            this._cache.delete(nextKey);
28593        }
28594        this._cache.set(key, value);
28595    }
28596    /** Remove an entry and return the entry if it was in the cache */ remove(key) {
28597        const value = this._cache.get(key);
28598        if (value) {
28599            this._cache.delete(key);
28600        }
28601        return value;
28602    }
28603    /** Clear all entries */ clear() {
28604        this._cache.clear();
28605    }
28606    /** Get all the keys */ keys() {
28607        return Array.from(this._cache.keys());
28608    }
28609    /** Get all the values */ values() {
28610        const values = [];
28611        this._cache.forEach((value)=>values.push(value));
28612        return values;
28613    }
28614    constructor(_maxSize){
28615        this._maxSize = _maxSize;
28616        this._cache = /* @__PURE__ */ new Map();
28617    }
28618}
28619;
28620;
28621;
28622;
28623const IS_ISR_SSG_ROUTE_CACHE = new LRUMap(100);
28624function isIsrSsgRoute(pathname) {
28625    const parameterizedPath = maybeParameterizeRoute(pathname);
28626    const pathToCheck = parameterizedPath || pathname;
28627    const cachedResult = IS_ISR_SSG_ROUTE_CACHE.get(pathToCheck);
28628    if (cachedResult !== void 0) {
28629        return cachedResult;
28630    }
28631    const manifest = getManifest();
28632    if (!(manifest === null || manifest === void 0 ? void 0 : manifest.isrRoutes) || !Array.isArray(manifest.isrRoutes) || manifest.isrRoutes.length === 0) {
28633        IS_ISR_SSG_ROUTE_CACHE.set(pathToCheck, false);
28634        return false;
28635    }
28636    const isIsrSsgRoute2 = manifest.isrRoutes.includes(pathToCheck);
28637    IS_ISR_SSG_ROUTE_CACHE.set(pathToCheck, isIsrSsgRoute2);
28638    return isIsrSsgRoute2;
28639}
28640function removeIsrSsgTraceMetaTags() {
28641    if (!WINDOW1.document || !isIsrSsgRoute(WINDOW1.location.pathname)) {
28642        return;
28643    }
28644    function removeMetaTag(metaName) {
28645        try {
28646            const meta = WINDOW1.document.querySelector('meta[name="'.concat(metaName, '"]'));
28647            if (meta) {
28648                meta.remove();
28649            }
28650        } catch (unused) {}
28651    }
28652    removeMetaTag("sentry-trace");
28653    removeMetaTag("baggage");
28654}
28655;
28656// MERGED MODULE: [project]/node_modules/@sentry/nextjs/build/esm/client/tunnelRoute.js [app-client] (ecmascript)
28657;
28658var __TURBOPACK__imported__module__247167__5 = __TURBOPACK__imported__module__247167__;
28659var __TURBOPACK__imported__module__225304__13 = __TURBOPACK__imported__module__225304__;
28660var __TURBOPACK__imported__module__339435__4 = __TURBOPACK__imported__module__339435__;
28661var __TURBOPACK__imported__module__272598__36 = __TURBOPACK__imported__module__272598__;
28662;
28663;
28664const globalWithInjectedValues = __TURBOPACK__imported__module__225304__13["GLOBAL_OBJ"];
28665function applyTunnelRouteOption(options) {
28666    const tunnelRouteOption = __TURBOPACK__imported__module__247167__5["default"].env._sentryRewritesTunnelPath || globalWithInjectedValues._sentryRewritesTunnelPath;
28667    if (tunnelRouteOption && options.dsn) {
28668        const dsnComponents = (0, __TURBOPACK__imported__module__339435__4["dsnFromString"])(options.dsn);
28669        if (!dsnComponents) {
28670            return;
28671        }
28672        const sentrySaasDsnMatch = dsnComponents.host.match(/^o(\d+)\.ingest(?:\.([a-z]{2}))?\.sentry\.io$/);
28673        if (sentrySaasDsnMatch) {
28674            const orgId = sentrySaasDsnMatch[1];
28675            const regionCode = sentrySaasDsnMatch[2];
28676            let tunnelPath = "".concat(tunnelRouteOption, "?o=").concat(orgId, "&p=").concat(dsnComponents.projectId);
28677            if (regionCode) {
28678                tunnelPath += "&r=".concat(regionCode);
28679            }
28680            options.tunnel = tunnelPath;
28681            DEBUG_BUILD2 && __TURBOPACK__imported__module__272598__36["debug"].log('Tunneling events to "'.concat(tunnelPath, '"'));
28682        } else {
28683            DEBUG_BUILD2 && __TURBOPACK__imported__module__272598__36["debug"].warn("Provided DSN is not a Sentry SaaS DSN. Will not tunnel events.");
28684        }
28685    }
28686}
28687;
28688"use client";
28689;
28690;
28691;
28692;
28693;
28694;
28695;
28696;
28697;
28698;
28699;
28700;
28701;
28702;
28703;
28704;
28705;
28706;
28707;
28708;
28709;
28710;
28711;
28712;
28713;
28714;
28715;
28716;
28717;
28718let clientIsInitialized = false;
28719const globalWithInjectedValues1 = __TURBOPACK__imported__module__225304__10["GLOBAL_OBJ"];
28720function init2(options) {
28721    if (clientIsInitialized) {
28722        (0, __TURBOPACK__imported__module__272598__22["consoleSandbox"])(()=>{
28723            console.warn("[@sentry/nextjs] You are calling `Sentry.init()` more than once on the client. This can happen if you have both a `sentry.client.config.ts` and a `instrumentation-client.ts` file with `Sentry.init()` calls. It is recommended to call `Sentry.init()` once in `instrumentation-client.ts`.");
28724        });
28725    }
28726    clientIsInitialized = true;
28727    if (!DEBUG_BUILD2 && options.debug) {
28728        (0, __TURBOPACK__imported__module__272598__22["consoleSandbox"])(()=>{
28729            console.warn("[@sentry/nextjs] You have enabled `debug: true`, but Sentry debug logging was removed from your bundle (likely via `withSentryConfig({ disableLogger: true })` / `webpack.treeshake.removeDebugLogging: true`). Set that option to `false` to see Sentry debug output.");
28730        });
28731    }
28732    if (typeof __SENTRY_TRACING__ === "undefined" || __SENTRY_TRACING__) {
28733        removeIsrSsgTraceMetaTags();
28734    }
28735    const opts = {
28736        environment: options.environment || __TURBOPACK__imported__module__247167__2["default"].env.SENTRY_ENVIRONMENT || getVercelEnv(true) || ("TURBOPACK compile-time value", "production"),
28737        defaultIntegrations: getDefaultIntegrations1(options),
28738        release: ("TURBOPACK compile-time value", "05b2d555bd30570bfe06dcce0df24003d307c93a") || globalWithInjectedValues1._sentryRelease,
28739        ...options
28740    };
28741    applyTunnelRouteOption(opts);
28742    applySdkMetadata(opts, "nextjs", [
28743        "nextjs",
28744        "react"
28745    ]);
28746    opts.ignoreSpans = [
28747        ...opts.ignoreSpans || [],
28748        // we filter out segment spans for /404 pages
28749        /^\/404$/,
28750        // segment spans where we didn't get a reasonable transaction name
28751        // in this case, constructing a dynamic RegExp is fine because the variable is a constant
28752        // we need to ensure to exact-match, so a string match isn't safe (same for /404 above)
28753        new RegExp("^".concat(INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME, "$"))
28754    ];
28755    const client = init1(opts);
28756    const filterNextRedirectError = (event, hint)=>{
28757        var _event_exception_values_, _event_exception_values, _event_exception;
28758        return isRedirectNavigationError(hint === null || hint === void 0 ? void 0 : hint.originalException) || ((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : (_event_exception_values_ = _event_exception_values[0]) === null || _event_exception_values_ === void 0 ? void 0 : _event_exception_values_.value) === "NEXT_REDIRECT" ? null : event;
28759    };
28760    filterNextRedirectError.id = "NextRedirectErrorFilter";
28761    (0, __TURBOPACK__imported__module__662537__2["addEventProcessor"])(filterNextRedirectError);
28762    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
28763    ;
28764    try {
28765        if ("TURBOPACK compile-time truthy", 1) {
28766            (0, __TURBOPACK__imported__module__250804__16["getGlobalScope"])().setTag("turbopack", true);
28767        }
28768    } catch (unused) {}
28769    return client;
28770}
28771function getDefaultIntegrations1(options) {
28772    const customDefaultIntegrations = getDefaultIntegrations(options);
28773    if (typeof __SENTRY_TRACING__ === "undefined" || __SENTRY_TRACING__) {
28774        customDefaultIntegrations.push(browserTracingIntegration1());
28775    }
28776    const rewriteFramesAssetPrefixPath = ("TURBOPACK compile-time value", "") || globalWithInjectedValues1._sentryRewriteFramesAssetPrefixPath || "";
28777    const assetPrefix = __TURBOPACK__imported__module__247167__2["default"].env._sentryAssetPrefix || globalWithInjectedValues1._sentryAssetPrefix;
28778    const basePath = __TURBOPACK__imported__module__247167__2["default"].env._sentryBasePath || globalWithInjectedValues1._sentryBasePath;
28779    const experimentalThirdPartyOriginStackFrames = __TURBOPACK__imported__module__247167__2["default"].env._experimentalThirdPartyOriginStackFrames === "true" || globalWithInjectedValues1._experimentalThirdPartyOriginStackFrames === "true";
28780    customDefaultIntegrations.push(nextjsClientStackFrameNormalizationIntegration({
28781        assetPrefix,
28782        basePath,
28783        rewriteFramesAssetPrefixPath,
28784        experimentalThirdPartyOriginStackFrames
28785    }));
28786    return customDefaultIntegrations;
28787}
28788function withSentryConfig(exportedUserNextConfig) {
28789    return exportedUserNextConfig;
28790}
28791;
28792// MERGED MODULE: [project]/node_modules/@sentry/replay/build/npm/esm/index.js [app-client] (ecmascript)
28793;
28794var __TURBOPACK__imported__module__225304__14 = __TURBOPACK__imported__module__225304__;
28795var __TURBOPACK__imported__module__45968__4 = __TURBOPACK__imported__module__45968__;
28796var __TURBOPACK__imported__module__453288__14 = __TURBOPACK__imported__module__453288__;
28797var __TURBOPACK__imported__module__951497__11 = __TURBOPACK__imported__module__951497__;
28798var __TURBOPACK__imported__module__605394__16 = __TURBOPACK__imported__module__605394__;
28799var __TURBOPACK__imported__module__272598__37 = __TURBOPACK__imported__module__272598__;
28800var __TURBOPACK__imported__module__662537__6 = __TURBOPACK__imported__module__662537__;
28801var __TURBOPACK__imported__module__183330__1 = __TURBOPACK__imported__module__183330__;
28802var __TURBOPACK__imported__module__682564__7 = __TURBOPACK__imported__module__682564__;
28803var __TURBOPACK__imported__module__250804__26 = __TURBOPACK__imported__module__250804__;
28804var __TURBOPACK__imported__module__304661__21 = __TURBOPACK__imported__module__304661__;
28805var __TURBOPACK__imported__module__473753__6 = __TURBOPACK__imported__module__473753__;
28806// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js [a
28806pp-client] (ecmascript)
28807;
28808;
28809function isSentryRequestUrl(url, client) {
28810    const dsn = client === null || client === void 0 ? void 0 : client.getDsn();
28811    const tunnel = client === null || client === void 0 ? void 0 : client.getOptions().tunnel;
28812    return checkDsn(url, dsn) || checkTunnel(url, tunnel);
28813}
28814function checkTunnel(url, tunnel) {
28815    if (!tunnel) {
28816        return false;
28817    }
28818    return removeTrailingSlash(url) === removeTrailingSlash(tunnel);
28819}
28820function checkDsn(url, dsn) {
28821    const urlParts = parseStringToURLObject(url);
28822    if (!urlParts || isURLObjectRelative(urlParts)) {
28823        return false;
28824    }
28825    if (!dsn) {
28826        return false;
28827    }
28828    return hostnameMatchesDsnHost(urlParts.hostname, dsn.host) && /(^|&|\?)sentry_key=/.test(urlParts.search);
28829}
28830function hostnameMatchesDsnHost(hostname, dsnHost) {
28831    return hostname === dsnHost || dsnHost.length > 0 && hostname.endsWith(".".concat(dsnHost));
28832}
28833function removeTrailingSlash(str) {
28834    return str[str.length - 1] === "/" ? str.slice(0, -1) : str;
28835}
28836;
28837var __TURBOPACK__imported__module__821593__6 = __TURBOPACK__imported__module__821593__;
28838// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/utils/debounce.js [app-client] (ecmascript)
28839;
28840function debounce(func, wait, options) {
28841    let callbackReturnValue;
28842    let timerId;
28843    let maxTimerId;
28844    const maxWait = (options === null || options === void 0 ? void 0 : options.maxWait) ? Math.max(options.maxWait, wait) : 0;
28845    const setTimeoutImpl = (options === null || options === void 0 ? void 0 : options.setTimeoutImpl) || setTimeout;
28846    function invokeFunc() {
28847        cancelTimers();
28848        callbackReturnValue = func();
28849        return callbackReturnValue;
28850    }
28851    function cancelTimers() {
28852        timerId !== void 0 && clearTimeout(timerId);
28853        maxTimerId !== void 0 && clearTimeout(maxTimerId);
28854        timerId = maxTimerId = void 0;
28855    }
28856    function flush() {
28857        if (timerId !== void 0 || maxTimerId !== void 0) {
28858            return invokeFunc();
28859        }
28860        return callbackReturnValue;
28861    }
28862    function debounced() {
28863        if (timerId) {
28864            clearTimeout(timerId);
28865        }
28866        timerId = setTimeoutImpl(invokeFunc, wait);
28867        if (maxWait && maxTimerId === void 0) {
28868            maxTimerId = setTimeoutImpl(invokeFunc, maxWait);
28869        }
28870        return callbackReturnValue;
28871    }
28872    debounced.cancel = cancelTimers;
28873    debounced.flush = flush;
28874    return debounced;
28875}
28876;
28877var __TURBOPACK__imported__module__67486__5 = __TURBOPACK__imported__module__67486__;
28878var __TURBOPACK__imported__module__213186__1 = __TURBOPACK__imported__module__213186__;
28879var __TURBOPACK__imported__module__519988__20 = __TURBOPACK__imported__module__519988__;
28880var __TURBOPACK__imported__module__901538__3 = __TURBOPACK__imported__module__901538__;
28881var __TURBOPACK__imported__module__170637__3 = __TURBOPACK__imported__module__170637__;
28882;
28883;
28884const WINDOW4 = __TURBOPACK__imported__module__225304__14["GLOBAL_OBJ"];
28885const REPLAY_SESSION_KEY = "sentryReplaySession";
28886const REPLAY_EVENT_NAME = "replay_event";
28887const UNABLE_TO_SEND_REPLAY = "Unable to send Replay";
28888const SESSION_IDLE_PAUSE_DURATION = 3e5;
28889const SESSION_IDLE_EXPIRE_DURATION = 9e5;
28890const DEFAULT_FLUSH_MIN_DELAY = 5e3;
28891const DEFAULT_FLUSH_MAX_DELAY = 5500;
28892const BUFFER_CHECKOUT_TIME = 6e4;
28893const RETRY_BASE_INTERVAL = 5e3;
28894const RETRY_MAX_COUNT = 3;
28895const NETWORK_BODY_MAX_SIZE = 15e4;
28896const CONSOLE_ARG_MAX_SIZE = 5e3;
28897const SLOW_CLICK_THRESHOLD = 3e3;
28898const SLOW_CLICK_SCROLL_TIMEOUT = 300;
28899const REPLAY_MAX_EVENT_BUFFER_SIZE = 2e7;
28900const MIN_REPLAY_DURATION = 4999;
28901const MIN_REPLAY_DURATION_LIMIT = 5e4;
28902const MAX_REPLAY_DURATION = 36e5;
28903var __defProp = Object.defineProperty;
28904var __defNormalProp = (obj, key, value)=>key in obj ? __defProp(obj, key, {
28905        enumerable: true,
28906        configurable: true,
28907        writable: true,
28908        value
28909    }) : obj[key] = value;
28910var __publicField = (obj, key, value)=>__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
28911var NodeType$1 = /* @__PURE__ */ ((NodeType2)=>{
28912    NodeType2[NodeType2["Document"] = 0] = "Document";
28913    NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
28914    NodeType2[NodeType2["Element"] = 2] = "Element";
28915    NodeType2[NodeType2["Text"] = 3] = "Text";
28916    NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
28917    NodeType2[NodeType2["Comment"] = 5] = "Comment";
28918    return NodeType2;
28919})(NodeType$1 || {});
28920function isElement$1(n) {
28921    return n.nodeType === n.ELEMENT_NODE;
28922}
28923function isShadowRoot(n) {
28924    const host = n === null || n === void 0 ? void 0 : n.host;
28925    return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);
28926}
28927function isNativeShadowDom(shadowRoot) {
28928    return Object.prototype.toString.call(shadowRoot) === "[object ShadowRoot]";
28929}
28930function fixBrowserCompatibilityIssuesInCSS(cssText) {
28931    if (cssText.includes(" background-clip: text;") && !cssText.includes(" -webkit-background-clip: text;")) {
28932        cssText = cssText.replace(/\sbackground-clip:\s*text;/g, " -webkit-background-clip: text; background-clip: text;");
28933    }
28934    return cssText;
28935}
28936function escapeImportStatement(rule) {
28937    const { cssText } = rule;
28938    if (cssText.split('"').length < 3) return cssText;
28939    const statement = [
28940        "@import",
28941        "url(".concat(JSON.stringify(rule.href), ")")
28942    ];
28943    if (rule.layerName === "") {
28944        statement.push("layer");
28945    } else if (rule.layerName) {
28946        statement.push("layer(".concat(rule.layerName, ")"));
28947    }
28948    if (rule.supportsText) {
28949        statement.push("supports(".concat(rule.supportsText, ")"));
28950    }
28951    if (rule.media.length) {
28952        statement.push(rule.media.mediaText);
28953    }
28954    return statement.join(" ") + ";";
28955}
28956function stringifyStylesheet(s) {
28957    try {
28958        const rules = s.rules || s.cssRules;
28959        return rules ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join("")) : null;
28960    } catch (error) {
28961        return null;
28962    }
28963}
28964function fixAllCssProperty(rule) {
28965    let styles = "";
28966    for(let i2 = 0; i2 < rule.style.length; i2++){
28967        const styleDeclaration = rule.style;
28968        const attribute = styleDeclaration[i2];
28969        const isImportant = styleDeclaration.getPropertyPriority(attribute);
28970        styles += "".concat(attribute, ":").concat(styleDeclaration.getPropertyValue(attribute)).concat(isImportant ? " !important" : "", ";");
28971    }
28972    return "".concat(rule.selectorText, " { ").concat(styles, " }");
28973}
28974function stringifyRule(rule) {
28975    let importStringified;
28976    if (isCSSImportRule(rule)) {
28977        try {
28978            importStringified = // we can access the imported stylesheet rules directly
28979            stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement
28980            escapeImportStatement(rule);
28981        } catch (error) {}
28982    } else if (isCSSStyleRule(rule)) {
28983        let cssText = rule.cssText;
28984        const needsSafariColonFix = rule.selectorText.includes(":");
28985        const needsAllFix = typeof rule.style["all"] === "string" && rule.style["all"];
28986        if (needsAllFix) {
28987            cssText = fixAllCssProperty(rule);
28988        }
28989        if (needsSafariColonFix) {
28990            cssText = fixSafariColons(cssText);
28991        }
28992        if (needsSafariColonFix || needsAllFix) {
28993            return cssText;
28994        }
28995    }
28996    return importStringified || rule.cssText;
28997}
28998function fixSafariColons(cssStringified) {
28999    const regex = /(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;
29000    return cssStringified.replace(regex, "$1\\$2");
29001}
29002function isCSSImportRule(rule) {
29003    return "styleSheet" in rule;
29004}
29005function isCSSStyleRule(rule) {
29006    return "selectorText" in rule;
29007}
29008class Mirror {
29009    getId(n) {
29010        var _this_getMeta;
29011        if (!n) return -1;
29012        const id = (_this_getMeta = this.getMeta(n)) === null || _this_getMeta === void 0 ? void 0 : _this_getMeta.id;
29013        return id !== null && id !== void 0 ? id : -1;
29014    }
29015    getNode(id) {
29016        return this.idNodeMap.get(id) || null;
29017    }
29018    getIds() {
29019        return Array.from(this.idNodeMap.keys());
29020    }
29021    getMeta(n) {
29022        return this.nodeMetaMap.get(n) || null;
29023    }
29024    // removes the node from idNodeMap
29025    // doesn't remove the node from nodeMetaMap
29026    removeNodeFromMap(n) {
29027        const id = this.getId(n);
29028        this.idNodeMap.delete(id);
29029        if (n.childNodes) {
29030            n.childNodes.forEach((childNode)=>this.removeNodeFromMap(childNode));
29031        }
29032    }
29033    has(id) {
29034        return this.idNodeMap.has(id);
29035    }
29036    hasNode(node) {
29037        return this.nodeMetaMap.has(node);
29038    }
29039    add(n, meta) {
29040        const id = meta.id;
29041        this.idNodeMap.set(id, n);
29042        this.nodeMetaMap.set(n, meta);
29043    }
29044    replace(id, n) {
29045        const oldNode = this.getNode(id);
29046        if (oldNode) {
29047            const meta = this.nodeMetaMap.get(oldNode);
29048            if (meta) this.nodeMetaMap.set(n, meta);
29049        }
29050        this.idNodeMap.set(id, n);
29051    }
29052    reset() {
29053        this.idNodeMap = /* @__PURE__ */ new Map();
29054        this.nodeMetaMap = /* @__PURE__ */ new WeakMap();
29055    }
29056    constructor(){
29057        __publicField(this, "idNodeMap", /* @__PURE__ */ new Map());
29058        __publicField(this, "nodeMetaMap", /* @__PURE__ */ new WeakMap());
29059    }
29060}
29061function createMirror() {
29062    return new Mirror();
29063}
29064function shouldMaskInput(param) {
29065    let { maskInputOptions, tagName, type } = param;
29066    if (tagName === "OPTION") {
29067        tagName = "SELECT";
29068    }
29069    return Boolean(maskInputOptions[tagName.toLowerCase()] || type && maskInputOptions[type] || type === "password" || // Default to "text" option for inputs without a "type" attribute defined
29070    tagName === "INPUT" && !type && maskInputOptions["text"]);
29071}
29072function maskInputValue(param) {
29073    let { isMasked, element, value, maskInputFn } = param;
29074    let text = value || "";
29075    if (!isMasked) {
29076        return text;
29077    }
29078    if (maskInputFn) {
29079        text = maskInputFn(text, element);
29080    }
29081    return "*".repeat(text.length);
29082}
29083function toLowerCase(str) {
29084    return str.toLowerCase();
29085}
29086function toUpperCase(str) {
29087    return str.toUpperCase();
29088}
29089const ORIGINAL_ATTRIBUTE_NAME = "__rrweb_original__";
29090function is2DCanvasBlank(canvas) {
29091    const ctx = canvas.getContext("2d");
29092    if (!ctx) return true;
29093    const chunkSize = 50;
29094    for(let x = 0; x < canvas.width; x += chunkSize){
29095        for(let y = 0; y < canvas.height; y += chunkSize){
29096            const getImageData = ctx.getImageData;
29097            const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;
29098            const pixelBuffer = new Uint32Array(// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
29099            originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);
29100            if (pixelBuffer.some((pixel)=>pixel !== 0)) return false;
29101        }
29102    }
29103    return true;
29104}
29105function getInputType(element) {
29106    const type = element.type;
29107    return element.hasAttribute("data-rr-is-password") ? "password" : type ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
29108    toLowerCase(type) : null;
29109}
29110function getInputValue(el, tagName, type) {
29111    if (tagName === "INPUT" && (type === "radio" || type === "checkbox")) {
29112        return el.getAttribute("value") || "";
29113    }
29114    return el.value;
29115}
29116function extractFileExtension(path, baseURL) {
29117    var _ref;
29118    let url;
29119    try {
29120        url = new URL(path, baseURL !== null && baseURL !== void 0 ? baseURL : window.location.href);
29121    } catch (err) {
29122        return null;
29123    }
29124    const regex = /\.([0-9a-z]+)(?:$)/i;
29125    const match = url.pathname.match(regex);
29126    return (_ref = match === null || match === void 0 ? void 0 : match[1]) !== null && _ref !== void 0 ? _ref : null;
29127}
29128const cachedImplementations$1 = {};
29129function getImplementation$1(name) {
29130    const cached = cachedImplementations$1[name];
29131    if (cached) {
29132        return cached;
29133    }
29134    const document2 = window.document;
29135    let impl = window[name];
29136    if (document2 && typeof document2.createElement === "function") {
29137        try {
29138            const sandbox = document2.createElement("iframe");
29139            sandbox.hidden = true;
29140            document2.head.appendChild(sandbox);
29141            const contentWindow = sandbox.contentWindow;
29142            if (contentWindow && contentWindow[name]) {
29143                impl = contentWindow[name];
29144            }
29145            document2.head.removeChild(sandbox);
29146        } catch (e) {}
29147    }
29148    return cachedImplementations$1[name] = impl.bind(window);
29149}
29150function setTimeout$1() {
29151    for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
29152        rest[_key] = arguments[_key];
29153    }
29154    return getImplementation$1("setTimeout")(...rest);
29155}
29156function clearTimeout$1() {
29157    for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
29158        rest[_key] = arguments[_key];
29159    }
29160    return getImplementation$1("clearTimeout")(...rest);
29161}
29162function getIFrameContentDocument$1(iframe) {
29163    try {
29164        return iframe.contentDocument;
29165    } catch (unused) {}
29166}
29167function getIFrameContentWindow$1(iframe) {
29168    try {
29169        return iframe.contentWindow;
29170    } catch (unused) {}
29171}
29172let _id = 1;
29173const tagNameRegex = new RegExp("[^a-z0-9-_:]");
29174const IGNORED_NODE = -2;
29175function genId() {
29176    return _id++;
29177}
29178function getValidTagName(element) {
29179    if (element instanceof HTMLFormElement) {
29180        return "form";
29181    }
29182    const processedTagName = toLowerCase(element.tagName);
29183    if (tagNameRegex.test(processedTagName)) {
29184        return "div";
29185    }
29186    return processedTagName;
29187}
29188function extractOrigin(url) {
29189    let origin = "";
29190    if (url.indexOf("//") > -1) {
29191        origin = url.split("/").slice(0, 3).join("/");
29192    } else {
29193        origin = url.split("/")[0];
29194    }
29195    origin = origin.split("?")[0];
29196    return origin;
29197}
29198let canvasService;
29199let canvasCtx;
29200const URL_IN_CSS_REF = /url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm;
29201const URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\/\//i;
29202const URL_WWW_MATCH = /^www\..*/i;
29203const DATA_URI = /^(data:)([^,]*),(.*)/i;
29204function filterCSSPropertiesFromInlineStyle(cssText, ignoredProperties) {
29205    if (!cssText || ignoredProperties.size === 0) {
29206        return cssText;
29207    }
29208    try {
29209        const properties = cssText.split(";");
29210        const filteredProperties = [];
29211        for (let property of properties){
29212            property = property.trim();
29213            if (!property) continue;
29214            const colonIndex = property.indexOf(":");
29215            if (colonIndex === -1) {
29216                filteredProperties.push(property);
29217                continue;
29218            }
29219            const propertyName = property.slice(0, colonIndex).trim();
29220            if (!ignoredProperties.has(propertyName)) {
29221                filteredProperties.push(property);
29222            }
29223        }
29224        return filteredProperties.join("; ") + (filteredProperties.length > 0 && cssText.endsWith(";") ? ";" : "");
29225    } catch (error) {
29226        console.warn("Error filtering CSS properties:", error);
29227        return cssText;
29228    }
29229}
29230function absoluteToStylesheet(cssText, href) {
29231    return (cssText || "").replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3)=>{
29232        const filePath = path1 || path2 || path3;
29233        const maybeQuote = quote1 || quote2 || "";
29234        if (!filePath) {
29235            return origin;
29236        }
29237        if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {
29238            return "url(".concat(maybeQuote).concat(filePath).concat(maybeQuote, ")");
29239        }
29240        if (DATA_URI.test(filePath)) {
29241            return "url(".concat(maybeQuote).concat(filePath).concat(maybeQuote, ")");
29242        }
29243        if (filePath[0] === "/") {
29244            return "url(".concat(maybeQuote).concat(extractOrigin(href) + f
vendor: 34,502 bytes, lines 29244-30092
29244ilePath).concat(maybeQuote, ")");
29245        }
29246        const stack = href.split("/");
29247        const parts = filePath.split("/");
29248        stack.pop();
29249        for (const part of parts){
29250            if (part === ".") {
29251                continue;
29252            } else if (part === "..") {
29253                stack.pop();
29254            } else {
29255                stack.push(part);
29256            }
29257        }
29258        return "url(".concat(maybeQuote).concat(stack.join("/")).concat(maybeQuote, ")");
29259    });
29260}
29261const SRCSET_NOT_SPACES = /^[^ \t\n\r\u000c]+/;
29262const SRCSET_COMMAS_OR_SPACES = /^[, \t\n\r\u000c]+/;
29263function getAbsoluteSrcsetString(doc, attributeValue) {
29264    if (attributeValue.trim() === "") {
29265        return attributeValue;
29266    }
29267    let pos = 0;
29268    function collectCharacters(regEx) {
29269        let chars2;
29270        const match = regEx.exec(attributeValue.substring(pos));
29271        if (match) {
29272            chars2 = match[0];
29273            pos += chars2.length;
29274            return chars2;
29275        }
29276        return "";
29277    }
29278    const output = [];
29279    while(true){
29280        collectCharacters(SRCSET_COMMAS_OR_SPACES);
29281        if (pos >= attributeValue.length) {
29282            break;
29283        }
29284        let url = collectCharacters(SRCSET_NOT_SPACES);
29285        if (url.slice(-1) === ",") {
29286            url = absoluteToDoc(doc, url.substring(0, url.length - 1));
29287            output.push(url);
29288        } else {
29289            let descriptorsStr = "";
29290            url = absoluteToDoc(doc, url);
29291            let inParens = false;
29292            while(true){
29293                const c = attributeValue.charAt(pos);
29294                if (c === "") {
29295                    output.push((url + descriptorsStr).trim());
29296                    break;
29297                } else if (!inParens) {
29298                    if (c === ",") {
29299                        pos += 1;
29300                        output.push((url + descriptorsStr).trim());
29301                        break;
29302                    } else if (c === "(") {
29303                        inParens = true;
29304                    }
29305                } else {
29306                    if (c === ")") {
29307                        inParens = false;
29308                    }
29309                }
29310                descriptorsStr += c;
29311                pos += 1;
29312            }
29313        }
29314    }
29315    return output.join(", ");
29316}
29317const cachedDocument = /* @__PURE__ */ new WeakMap();
29318function absoluteToDoc(doc, attributeValue) {
29319    if (!attributeValue || attributeValue.trim() === "") {
29320        return attributeValue;
29321    }
29322    return getHref(doc, attributeValue);
29323}
29324function isSVGElement(el) {
29325    return Boolean(el.tagName === "svg" || el.ownerSVGElement);
29326}
29327function getHref(doc, customHref) {
29328    let a = cachedDocument.get(doc);
29329    if (!a) {
29330        a = doc.createElement("a");
29331        cachedDocument.set(doc, a);
29332    }
29333    if (!customHref) {
29334        customHref = "";
29335    } else if (customHref.startsWith("blob:") || customHref.startsWith("data:")) {
29336        return customHref;
29337    }
29338    a.setAttribute("href", customHref);
29339    return a.href;
29340}
29341function transformAttribute(doc, tagName, name, value, element, maskAttributeFn, ignoreCSSAttributes) {
29342    if (!value) {
29343        return value;
29344    }
29345    if (name === "src" || name === "href" && !(tagName === "use" && value[0] === "#")) {
29346        return absoluteToDoc(doc, value);
29347    } else if (name === "xlink:href" && value[0] !== "#") {
29348        return absoluteToDoc(doc, value);
29349    } else if (name === "background" && (tagName === "table" || tagName === "td" || tagName === "th")) {
29350        return absoluteToDoc(doc, value);
29351    } else if (name === "srcset") {
29352        return getAbsoluteSrcsetString(doc, value);
29353    } else if (name === "style") {
29354        let processedStyle = absoluteToStylesheet(value, getHref(doc));
29355        if (ignoreCSSAttributes && ignoreCSSAttributes.size > 0) {
29356            processedStyle = filterCSSPropertiesFromInlineStyle(processedStyle, ignoreCSSAttributes);
29357        }
29358        return processedStyle;
29359    } else if (tagName === "object" && name === "data") {
29360        return absoluteToDoc(doc, value);
29361    }
29362    if (typeof maskAttributeFn === "function") {
29363        return maskAttributeFn(name, value, element);
29364    }
29365    return value;
29366}
29367function ignoreAttribute(tagName, name, _value) {
29368    return (tagName === "video" || tagName === "audio") && name === "autoplay";
29369}
29370function _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {
29371    try {
29372        if (unblockSelector && element.matches(unblockSelector)) {
29373            return false;
29374        }
29375        if (typeof blockClass === "string") {
29376            if (element.classList.contains(blockClass)) {
29377                return true;
29378            }
29379        } else {
29380            for(let eIndex = element.classList.length; eIndex--;){
29381                const className = element.classList[eIndex];
29382                if (blockClass.test(className)) {
29383                    return true;
29384                }
29385            }
29386        }
29387        if (blockSelector) {
29388            return element.matches(blockSelector);
29389        }
29390    } catch (e) {}
29391    return false;
29392}
29393function elementClassMatchesRegex(el, regex) {
29394    for(let eIndex = el.classList.length; eIndex--;){
29395        const className = el.classList[eIndex];
29396        if (regex.test(className)) {
29397            return true;
29398        }
29399    }
29400    return false;
29401}
29402function distanceToMatch(node, matchPredicate) {
29403    let limit = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Infinity, distance = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0;
29404    if (!node) return -1;
29405    if (node.nodeType !== node.ELEMENT_NODE) return -1;
29406    if (distance > limit) return -1;
29407    if (matchPredicate(node)) return distance;
29408    return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);
29409}
29410function createMatchPredicate(className, selector) {
29411    return (node)=>{
29412        const el = node;
29413        if (el === null) return false;
29414        try {
29415            if (className) {
29416                if (typeof className === "string") {
29417                    if (el.matches(".".concat(className))) return true;
29418                } else if (elementClassMatchesRegex(el, className)) {
29419                    return true;
29420                }
29421            }
29422            if (selector && el.matches(selector)) return true;
29423            return false;
29424        } catch (unused) {
29425            return false;
29426        }
29427    };
29428}
29429function needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {
29430    try {
29431        const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;
29432        if (el === null) return false;
29433        if (el.tagName === "INPUT") {
29434            const autocomplete = el.getAttribute("autocomplete");
29435            const disallowedAutocompleteValues = [
29436                "current-password",
29437                "new-password",
29438                "cc-number",
29439                "cc-exp",
29440                "cc-exp-month",
29441                "cc-exp-year",
29442                "cc-csc"
29443            ];
29444            if (disallowedAutocompleteValues.includes(autocomplete)) {
29445                return true;
29446            }
29447        }
29448        let maskDistance = -1;
29449        let unmaskDistance = -1;
29450        if (maskAllText) {
29451            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));
29452            if (unmaskDistance < 0) {
29453                return true;
29454            }
29455            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);
29456        } else {
29457            maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));
29458            if (maskDistance < 0) {
29459                return false;
29460            }
29461            unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);
29462        }
29463        return maskDistance >= 0 ? unmaskDistance >= 0 ? maskDistance <= unmaskDistance : true : unmaskDistance >= 0 ? false : !!maskAllText;
29464    } catch (e) {}
29465    return !!maskAllText;
29466}
29467function onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {
29468    const win = getIFrameContentWindow$1(iframeEl);
29469    if (!win) {
29470        return;
29471    }
29472    let fired = false;
29473    let readyState;
29474    try {
29475        readyState = win.document.readyState;
29476    } catch (error) {
29477        return;
29478    }
29479    if (readyState !== "complete") {
29480        const timer = setTimeout$1(()=>{
29481            if (!fired) {
29482                listener();
29483                fired = true;
29484            }
29485        }, iframeLoadTimeout);
29486        iframeEl.addEventListener("load", ()=>{
29487            clearTimeout$1(timer);
29488            fired = true;
29489            listener();
29490        });
29491        return;
29492    }
29493    const blankUrl = "about:blank";
29494    if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === "") {
29495        setTimeout$1(listener, 0);
29496        return iframeEl.addEventListener("load", listener);
29497    }
29498    iframeEl.addEventListener("load", listener);
29499}
29500function onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {
29501    let fired = false;
29502    let styleSheetLoaded;
29503    try {
29504        styleSheetLoaded = link.sheet;
29505    } catch (error) {
29506        styleSheetLoaded = null;
29507    }
29508    if (styleSheetLoaded) return;
29509    const timer = setTimeout$1(()=>{
29510        if (!fired) {
29511            listener();
29512            fired = true;
29513        }
29514    }, styleSheetLoadTimeout);
29515    link.addEventListener("load", ()=>{
29516        clearTimeout$1(timer);
29517        fired = true;
29518        listener();
29519    });
29520}
29521function serializeNode(n, options) {
29522    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, ignoreCSSAttributes } = options;
29523    const rootId = getRootId(doc, mirror);
29524    switch(n.nodeType){
29525        case n.DOCUMENT_NODE:
29526            if (n.compatMode !== "CSS1Compat") {
29527                return {
29528                    type: NodeType$1.Document,
29529                    childNodes: [],
29530                    compatMode: n.compatMode
29531                };
29532            } else {
29533                return {
29534                    type: NodeType$1.Document,
29535                    childNodes: []
29536                };
29537            }
29538        case n.DOCUMENT_TYPE_NODE:
29539            return {
29540                type: NodeType$1.DocumentType,
29541                name: n.name,
29542                publicId: n.publicId,
29543                systemId: n.systemId,
29544                rootId
29545            };
29546        case n.ELEMENT_NODE:
29547            return serializeElementNode(n, {
29548                doc,
29549                blockClass,
29550                blockSelector,
29551                unblockSelector,
29552                inlineStylesheet,
29553                maskAttributeFn,
29554                maskInputOptions,
29555                maskInputFn,
29556                dataURLOptions,
29557                inlineImages,
29558                recordCanvas,
29559                keepIframeSrcFn,
29560                newlyAddedElement,
29561                rootId,
29562                maskTextClass,
29563                unmaskTextClass,
29564                maskTextSelector,
29565                unmaskTextSelector,
29566                ignoreCSSAttributes
29567            });
29568        case n.TEXT_NODE:
29569            return serializeTextNode(n, {
29570                doc,
29571                maskAllText,
29572                maskTextClass,
29573                unmaskTextClass,
29574                maskTextSelector,
29575                unmaskTextSelector,
29576                maskTextFn,
29577                maskInputOptions,
29578                maskInputFn,
29579                rootId
29580            });
29581        case n.CDATA_SECTION_NODE:
29582            return {
29583                type: NodeType$1.CDATA,
29584                textContent: "",
29585                rootId
29586            };
29587        case n.COMMENT_NODE:
29588            return {
29589                type: NodeType$1.Comment,
29590                textContent: n.textContent || "",
29591                rootId
29592            };
29593        default:
29594            return false;
29595    }
29596}
29597function getRootId(doc, mirror) {
29598    if (!mirror.hasNode(doc)) return void 0;
29599    const docId = mirror.getId(doc);
29600    return docId === 1 ? void 0 : docId;
29601}
29602function serializeTextNode(n, options) {
29603    const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId } = options;
29604    const parentTagName = n.parentNode && n.parentNode.tagName;
29605    let textContent = n.textContent;
29606    const isStyle = parentTagName === "STYLE" ? true : void 0;
29607    const isScript = parentTagName === "SCRIPT" ? true : void 0;
29608    const isTextarea = parentTagName === "TEXTAREA" ? true : void 0;
29609    if (isStyle && textContent) {
29610        try {
29611            var _n_parentNode_sheet;
29612            if (n.nextSibling || n.previousSibling) {} else if ((_n_parentNode_sheet = n.parentNode.sheet) === null || _n_parentNode_sheet === void 0 ? void 0 : _n_parentNode_sheet.cssRules) {
29613                textContent = stringifyStylesheet(n.parentNode.sheet);
29614            }
29615        } catch (err) {
29616            console.warn("Cannot get CSS styles from text's parentNode. Error: ".concat(err), n);
29617        }
29618        textContent = absoluteToStylesheet(textContent, getHref(options.doc));
29619    }
29620    if (isScript) {
29621        textContent = "SCRIPT_PLACEHOLDER";
29622    }
29623    const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);
29624    if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {
29625        textContent = maskTextFn ? maskTextFn(textContent, n.parentElement) : textContent.replace(/[\S]/g, "*");
29626    }
29627    if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {
29628        textContent = maskInputFn ? maskInputFn(textContent, n.parentNode) : textContent.replace(/[\S]/g, "*");
29629    }
29630    if (parentTagName === "OPTION" && textContent) {
29631        const isInputMasked = shouldMaskInput({
29632            type: null,
29633            tagName: parentTagName,
29634            maskInputOptions
29635        });
29636        textContent = maskInputValue({
29637            isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),
29638            element: n,
29639            value: textContent,
29640            maskInputFn
29641        });
29642    }
29643    return {
29644        type: NodeType$1.Text,
29645        textContent: textContent || "",
29646        isStyle,
29647        rootId
29648    };
29649}
29650function serializeElementNode(n, options) {
29651    const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, ignoreCSSAttributes } = options;
29652    const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);
29653    const tagName = getValidTagName(n);
29654    let attributes2 = {};
29655    const len = n.attributes.length;
29656    for(let i2 = 0; i2 < len; i2++){
29657        const attr = n.attributes[i2];
29658        if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {
29659            attributes2[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn, ignoreCSSAttributes);
29660        }
29661    }
29662    if (tagName === "link" && inlineStylesheet) {
29663        const stylesheet = Array.from(doc.styleSheets).find((s)=>{
29664            return s.href === n.href;
29665        });
29666        let cssText = null;
29667        if (stylesheet) {
29668            cssText = stringifyStylesheet(stylesheet);
29669        }
29670        if (cssText) {
29671            attributes2.rel = null;
29672            attributes2.href = null;
29673            attributes2.crossorigin = null;
29674            attributes2._cssText = absoluteToStylesheet(cssText, stylesheet.href);
29675        }
29676    }
29677    if (tagName === "style" && n.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element
29678    !(n.innerText || n.textContent || "").trim().length) {
29679        const cssText = stringifyStylesheet(n.sheet);
29680        if (cssText) {
29681            attributes2._cssText = absoluteToStylesheet(cssText, getHref(doc));
29682        }
29683    }
29684    if (tagName === "input" || tagName === "textarea" || tagName === "select" || tagName === "option") {
29685        const el = n;
29686        const type = getInputType(el);
29687        const value = getInputValue(el, toUpperCase(tagName), type);
29688        const checked = el.checked;
29689        if (type !== "submit" && type !== "button" && value) {
29690            const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({
29691                type,
29692                tagName: toUpperCase(tagName),
29693                maskInputOptions
29694            }));
29695            attributes2.value = maskInputValue({
29696                isMasked: forceMask,
29697                element: el,
29698                value,
29699                maskInputFn
29700            });
29701        }
29702        if (checked) {
29703            attributes2.checked = checked;
29704        }
29705    }
29706    if (tagName === "option") {
29707        if (n.selected && !maskInputOptions["select"]) {
29708            attributes2.selected = true;
29709        } else {
29710            delete attributes2.selected;
29711        }
29712    }
29713    if (tagName === "canvas" && recordCanvas) {
29714        if (n.__context === "2d") {
29715            if (!is2DCanvasBlank(n)) {
29716                attributes2.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);
29717            }
29718        } else if (!("__context" in n)) {
29719            const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);
29720            const blankCanvas = doc.createElement("canvas");
29721            blankCanvas.width = n.width;
29722            blankCanvas.height = n.height;
29723            const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);
29724            if (canvasDataURL !== blankCanvasDataURL) {
29725                attributes2.rr_dataURL = canvasDataURL;
29726            }
29727        }
29728    }
29729    if (tagName === "img" && inlineImages) {
29730        if (!canvasService) {
29731            canvasService = doc.createElement("canvas");
29732            canvasCtx = canvasService.getContext("2d");
29733        }
29734        const image = n;
29735        const imageSrc = image.currentSrc || image.getAttribute("src") || "<unknown-src>";
29736        const priorCrossOrigin = image.crossOrigin;
29737        const recordInlineImage = ()=>{
29738            image.removeEventListener("load", recordInlineImage);
29739            try {
29740                canvasService.width = image.naturalWidth;
29741                canvasService.height = image.naturalHeight;
29742                canvasCtx.drawImage(image, 0, 0);
29743                attributes2.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);
29744            } catch (err) {
29745                if (image.crossOrigin !== "anonymous") {
29746                    image.crossOrigin = "anonymous";
29747                    if (image.complete && image.naturalWidth !== 0) recordInlineImage();
29748                    else image.addEventListener("load", recordInlineImage);
29749                    return;
29750                } else {
29751                    console.warn("Cannot inline img src=".concat(imageSrc, "! Error: ").concat(err));
29752                }
29753            }
29754            if (image.crossOrigin === "anonymous") {
29755                priorCrossOrigin ? attributes2.crossOrigin = priorCrossOrigin : image.removeAttribute("crossorigin");
29756            }
29757        };
29758        if (image.complete && image.naturalWidth !== 0) recordInlineImage();
29759        else image.addEventListener("load", recordInlineImage);
29760    }
29761    if (tagName === "audio" || tagName === "video") {
29762        attributes2.rr_mediaState = n.paused ? "paused" : "played";
29763        attributes2.rr_mediaCurrentTime = n.currentTime;
29764    }
29765    if (!newlyAddedElement) {
29766        if (n.scrollLeft) {
29767            attributes2.rr_scrollLeft = n.scrollLeft;
29768        }
29769        if (n.scrollTop) {
29770            attributes2.rr_scrollTop = n.scrollTop;
29771        }
29772    }
29773    if (needBlock) {
29774        const { width, height } = n.getBoundingClientRect();
29775        attributes2 = {
29776            class: attributes2.class,
29777            rr_width: "".concat(width, "px"),
29778            rr_height: "".concat(height, "px")
29779        };
29780    }
29781    if (tagName === "iframe" && !keepIframeSrcFn(attributes2.src)) {
29782        if (!needBlock && !getIFrameContentDocument$1(n)) {
29783            attributes2.rr_src = attributes2.src;
29784        }
29785        delete attributes2.src;
29786    }
29787    let isCustomElement;
29788    try {
29789        if (customElements.get(tagName)) isCustomElement = true;
29790    } catch (e) {}
29791    return {
29792        type: NodeType$1.Element,
29793        tagName,
29794        attributes: attributes2,
29795        childNodes: [],
29796        isSVG: isSVGElement(n) || void 0,
29797        needBlock,
29798        rootId,
29799        isCustom: isCustomElement
29800    };
29801}
29802function lowerIfExists(maybeAttr) {
29803    if (maybeAttr === void 0 || maybeAttr === null) {
29804        return "";
29805    } else {
29806        return maybeAttr.toLowerCase();
29807    }
29808}
29809function slimDOMExcluded(sn, slimDOMOptions) {
29810    if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {
29811        return true;
29812    } else if (sn.type === NodeType$1.Element) {
29813        if (slimDOMOptions.script && // script tag
29814        (sn.tagName === "script" || // (module)preload link
29815        sn.tagName === "link" && (sn.attributes.rel === "preload" || sn.attributes.rel === "modulepreload") || // prefetch link
29816        sn.tagName === "link" && sn.attributes.rel === "prefetch" && typeof sn.attributes.href === "string" && extractFileExtension(sn.attributes.href) === "js")) {
29817            return true;
29818        } else if (slimDOMOptions.headFavicon && (sn.tagName === "link" && sn.attributes.rel === "shortcut icon" || sn.tagName === "meta" && (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) || lowerIfExists(sn.attributes.name) === "application-name" || lowerIfExists(sn.attributes.rel) === "icon" || lowerIfExists(sn.attributes.rel) === "apple-touch-icon" || lowerIfExists(sn.attributes.rel) === "shortcut icon"))) {
29819            return true;
29820        } else if (sn.tagName === "meta") {
29821            if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {
29822                return true;
29823            } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)
29824            lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === "pinterest")) {
29825                return true;
29826            } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === "robots" || lowerIfExists(sn.attributes.name) === "googlebot" || lowerIfExists(sn.attributes.name) === "bingbot")) {
29827                return true;
29828            } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes["http-equiv"] !== void 0) {
29829                return true;
29830            } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === "author" || lowerIfExists(sn.attributes.name) === "generator" || lowerIfExists(sn.attributes.name) === "framework" || lowerIfExists(sn.attributes.name) === "publisher" || lowerIfExists(sn.attributes.name) === "progid" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {
29831                return true;
29832            } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === "google-site-verification" || lowerIfExists(sn.attributes.name) === "yandex-verification" || lowerIfExists(sn.attributes.name) === "csrf-token" || lowerIfExists(sn.attributes.name) === "p:domain_verify" || lowerIfExists(sn.attributes.name) === "verify-v1" || lowerIfExists(sn.attributes.name) === "verification" || lowerIfExists(sn.attributes.name) === "shopify-checkout-api-token")) {
29833                return true;
29834            }
29835        }
29836    }
29837    return false;
29838}
29839function serializeNodeWithId(n, options) {
29840    const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5e3, onBlockedImageLoad, onStylesheetLoad, stylesheetLoadTimeout = 5e3, keepIframeSrcFn = ()=>false, newlyAddedElement = false, ignoreCSSAttributes } = options;
29841    let { preserveWhiteSpace = true } = options;
29842    const _serializedNode = serializeNode(n, {
29843        doc,
29844        mirror,
29845        blockClass,
29846        blockSelector,
29847        maskAllText,
29848        unblockSelector,
29849        maskTextClass,
29850        unmaskTextClass,
29851        maskTextSelector,
29852        unmaskTextSelector,
29853        inlineStylesheet,
29854        maskInputOptions,
29855        maskAttributeFn,
29856        maskTextFn,
29857        maskInputFn,
29858        dataURLOptions,
29859        inlineImages,
29860        recordCanvas,
29861        keepIframeSrcFn,
29862        newlyAddedElement,
29863        ignoreCSSAttributes
29864    });
29865    if (!_serializedNode) {
29866        console.warn(n, "not serialized");
29867        return null;
29868    }
29869    let id;
29870    if (mirror.hasNode(n)) {
29871        id = mirror.getId(n);
29872    } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$1.Text && !_serializedNode.isStyle && !_serializedNode.textContent.trim().length) {
29873        id = IGNORED_NODE;
29874    } else {
29875        id = genId();
29876    }
29877    const serializedNode2 = Object.assign(_serializedNode, {
29878        id
29879    });
29880    mirror.add(n, serializedNode2);
29881    if (id === IGNORED_NODE) {
29882        return null;
29883    }
29884    if (onSerialize) {
29885        onSerialize(n);
29886    }
29887    let recordChild = !skipChild;
29888    if (serializedNode2.type === NodeType$1.Element) {
29889        recordChild = recordChild && !serializedNode2.needBlock;
29890        const shadowRoot = n.shadowRoot;
29891        if (shadowRoot && isNativeShadowDom(shadowRoot)) serializedNode2.isShadowHost = true;
29892    }
29893    if ((serializedNode2.type === NodeType$1.Document || serializedNode2.type === NodeType$1.Element) && recordChild) {
29894        if (slimDOMOptions.headWhitespace && serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === "head") {
29895            preserveWhiteSpace = false;
29896        }
29897        const bypassOptions = {
29898            doc,
29899            mirror,
29900            blockClass,
29901            blockSelector,
29902            maskAllText,
29903            unblockSelector,
29904            maskTextClass,
29905            unmaskTextClass,
29906            maskTextSelector,
29907            unmaskTextSelector,
29908            skipChild,
29909            inlineStylesheet,
29910            maskInputOptions,
29911            maskAttributeFn,
29912            maskTextFn,
29913            maskInputFn,
29914            slimDOMOptions,
29915            dataURLOptions,
29916            inlineImages,
29917            recordCanvas,
29918            preserveWhiteSpace,
29919            onSerialize,
29920            onIframeLoad,
29921            iframeLoadTimeout,
29922            onBlockedImageLoad,
29923            onStylesheetLoad,
29924            stylesheetLoadTimeout,
29925            keepIframeSrcFn,
29926            ignoreCSSAttributes
29927        };
29928        const childNodes = n.childNodes ? Array.from(n.childNodes) : [];
29929        for (const childN of childNodes){
29930            const serializedChildNode = serializeNodeWithId(childN, bypassOptions);
29931            if (serializedChildNode) {
29932                serializedNode2.childNodes.push(serializedChildNode);
29933            }
29934        }
29935        if (isElement$1(n) && n.shadowRoot) {
29936            for (const childN of Array.from(n.shadowRoot.childNodes)){
29937                const serializedChildNode = serializeNodeWithId(childN, bypassOptions);
29938                if (serializedChildNode) {
29939                    isNativeShadowDom(n.shadowRoot) && (serializedChildNode.isShadow = true);
29940                    serializedNode2.childNodes.push(serializedChildNode);
29941                }
29942            }
29943        }
29944    }
29945    if (n.parentNode && isShadowRoot(n.parentNode) && isNativeShadowDom(n.parentNode)) {
29946        serializedNode2.isShadow = true;
29947    }
29948    if (serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === "iframe" && !serializedNode2.needBlock) {
29949        onceIframeLoaded(n, ()=>{
29950            const iframeDoc = getIFrameContentDocument$1(n);
29951            if (iframeDoc && onIframeLoad) {
29952                const serializedIframeNode = serializeNodeWithId(iframeDoc, {
29953                    doc: iframeDoc,
29954                    mirror,
29955                    blockClass,
29956                    blockSelector,
29957                    unblockSelector,
29958                    maskAllText,
29959                    maskTextClass,
29960                    unmaskTextClass,
29961                    maskTextSelector,
29962                    unmaskTextSelector,
29963                    skipChild: false,
29964                    inlineStylesheet,
29965                    maskInputOptions,
29966                    maskAttributeFn,
29967                    maskTextFn,
29968                    maskInputFn,
29969                    slimDOMOptions,
29970                    dataURLOptions,
29971                    inlineImages,
29972                    recordCanvas,
29973                    preserveWhiteSpace,
29974                    onSerialize,
29975                    onIframeLoad,
29976                    iframeLoadTimeout,
29977                    onStylesheetLoad,
29978                    stylesheetLoadTimeout,
29979                    keepIframeSrcFn,
29980                    ignoreCSSAttributes
29981                });
29982                if (serializedIframeNode) {
29983                    onIframeLoad(n, serializedIframeNode);
29984                }
29985            }
29986        }, iframeLoadTimeout);
29987    }
29988    if (serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === "img" && !n.complete && serializedNode2.needBlock) {
29989        const image = n;
29990        const updateImageDimensions = ()=>{
29991            if (image.isConnected && !image.complete && onBlockedImageLoad) {
29992                try {
29993                    const rect = image.getBoundingClientRect();
29994                    if (rect.width > 0 && rect.height > 0) {
29995                        onBlockedImageLoad(image, serializedNode2, rect);
29996                    }
29997                } catch (error) {}
29998            }
29999            image.removeEventListener("load", updateImageDimensions);
30000        };
30001        if (image.isConnected) {
30002            image.addEventListener("load", updateImageDimensions);
30003        }
30004    }
30005    if (serializedNode2.type === NodeType$1.Element && serializedNode2.tagName === "link" && typeof serializedNode2.attributes.rel === "string" && (serializedNode2.attributes.rel === "stylesheet" || serializedNode2.attributes.rel === "preload" && typeof serializedNode2.attributes.href === "string" && extractFileExtension(serializedNode2.attributes.href) === "css")) {
30006        onceStylesheetLoaded(n, ()=>{
30007            if (onStylesheetLoad) {
30008                const serializedLinkNode = serializeNodeWithId(n, {
30009                    doc,
30010                    mirror,
30011                    blockClass,
30012                    blockSelector,
30013                    unblockSelector,
30014                    maskAllText,
30015                    maskTextClass,
30016                    unmaskTextClass,
30017                    maskTextSelector,
30018                    unmaskTextSelector,
30019                    skipChild: false,
30020                    inlineStylesheet,
30021                    maskInputOptions,
30022                    maskAttributeFn,
30023                    maskTextFn,
30024                    maskInputFn,
30025                    slimDOMOptions,
30026                    dataURLOptions,
30027                    inlineImages,
30028                    recordCanvas,
30029                    preserveWhiteSpace,
30030                    onSerialize,
30031                    onIframeLoad,
30032                    iframeLoadTimeout,
30033                    onStylesheetLoad,
30034                    stylesheetLoadTimeout,
30035                    keepIframeSrcFn,
30036                    ignoreCSSAttributes
30037                });
30038                if (serializedLinkNode) {
30039                    onStylesheetLoad(n, serializedLinkNode);
30040                }
30041            }
30042        }, stylesheetLoadTimeout);
30043    }
30044    if (serializedNode2.type === NodeType$1.Element) {
30045        delete serializedNode2.needBlock;
30046    }
30047    return serializedNode2;
30048}
30049function snapshot(n, options) {
30050    const { mirror = new Mirror(), blockClass = "rr-block", blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = "rr-mask", unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onBlockedImageLoad, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = ()=>false, ignoreCSSAttributes = /* @__PURE__ */ new Set([]) } = options || {};
30051    const maskInputOptions = maskAllInputs === true ? {
30052        color: true,
30053        date: true,
30054        "datetime-local": true,
30055        email: true,
30056        month: true,
30057        number: true,
30058        range: true,
30059        search: true,
30060        tel: true,
30061        text: true,
30062        time: true,
30063        url: true,
30064        week: true,
30065        textarea: true,
30066        select: true
30067    } : maskAllInputs === false ? {} : maskAllInputs;
30068    const slimDOMOptions = slimDOM === true || slimDOM === "all" ? // if true: set of sensible options that should not throw away any information
30069    {
30070        script: true,
30071        comment: true,
30072        headFavicon: true,
30073        headWhitespace: true,
30074        headMetaDescKeywords: slimDOM === "all",
30075        // destructive
30076        headMetaSocial: true,
30077        headMetaRobots: true,
30078        headMetaHttpEquiv: true,
30079        headMetaAuthorship: true,
30080        headMetaVerification: true
30081    } : slimDOM === false ? {} : slimDOM;
30082    return serializeNodeWithId(n, {
30083        doc: n,
30084        mirror,
30085        blockClass,
30086        blockSelector,
30087        unblockSelector,
30088        maskAllText,
30089        maskTextClass,
30090        unmaskTextClass,
30091        maskTextSelector,
30092        unmaskTextSelector,
30093        skipChild: false,
30094        inlineStylesheet,
30095        maskInputOptions,
30096        maskAttributeFn,
30097        maskTextFn,
30098        maskInputFn,
30099        slimDOMOptions,
30100        dataURLOptions,
30101        inlineImages,
30102        recordCanvas,
30103        preserveWhiteSpace,
30104        onSerialize,
30105        onIframeLoad,
30106        iframeLoadTimeout,
30107        onBlockedImageLoad,
30108        onStylesheetLoad,
30109        stylesheetLoadTimeout,
30110        keepIframeSrcFn,
30111        newlyAddedElement: false,
30112        ignoreCSSAttributes
30113    });
30114}
30115function on1(type, fn) {
30116    let target = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : document;
30117    const options = {
30118        capture: true,
30119        passive: true
30120    };
30121    target.addEventListener(type, fn, options);
30122    return ()=>target.removeEventListener(type, fn, options);
30123}
30124const DEPARTED_MIRROR_ACCESS_WARNING = "Please stop import mirror directly. Instead of that,\r\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\r\nor you can use record.mirror to access the mirror instance during recording.";
30125let _mirror = {
30126    map: {},
30127    getId () {
30128        console.error(DEPARTED_MIRROR_ACCESS_WARNING);
30129        return -1;
30130    },
30131    getNode () {
30132        console.error(DEPARTED_MIRROR_ACCESS_WARNING);
30133        return null;
30134    },
30135    removeNodeFromMap () {
30136        console.error(DEPARTED_MIRROR_ACCESS_WARNING);
30137    },
30138    has () {
30139        console.error(DEPARTED_MIRROR_ACCESS_WARNING);
30140        return false;
30141    },
30142    reset () {
30143        console.error(DEPARTED_MIRROR_ACCESS_WARNING);
30144    }
30145};
30146if (typeof window !== "undefined" && window.Proxy && window.Reflect) {
30147    _mirror = new Proxy(_mirror, {
30148        get (target, prop, receiver) {
30149            if (prop === "map") {
30150                console.error(DEPARTED_MIRROR_ACCESS_WARNING);
30151            }
30152            return Reflect.get(target, prop, receiver);
30153        }
30154    });
30155}
30156function throttle$1(func, wait) {
30157    let options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
30158    let timeout = null;
30159    let previous = 0;
30160    return function() {
30161        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
30162            args[_key] = arguments[_key];
30163        }
30164        const now = Date.now();
30165        if (!previous && options.leading === false) {
30166            previous = now;
30167        }
30168        const remaining = wait - (now - previous);
30169        const context = this;
30170        if (remaining <= 0 || remaining > wait) {
30171            if (timeout) {
30172                clearTimeout$2(timeout);
30173                timeout = null;
30174            }
30175            previous = now;
30176            func.apply(context, args);
30177        } else if (!timeout && options.trailing !== false) {
30178            timeout = setTimeout$2(()=>{
30179                previous = options.leading === false ? 0 : Date.now();
30180                timeout = null;
30181                func.apply(context, args);
30182            }, remaining);
30183        }
30184    };
30185}
30186function hookSetter(target, key, d, isRevoked) {
30187    let win = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : window;
30188    const original = win.Object.getOwnPropertyDescriptor(target, key);
30189    win.Object.defineProperty(target, key, isRevoked ? d : {
30190        set (value) {
30191            setTimeout$2(()=>{
30192                d.set.call(this, value);
30193            }, 0);
30194            if (original && original.set) {
30195                original.set.call(this, value);
30196            }
30197        }
30198    });
30199    return ()=>hookSetter(target, key, original || {}, true);
30200}
30201function patch(source, name, replacement) {
30202    try {
30203        if (!(name in source)) {
30204            return ()=>{};
30205        }
30206        const original = source[name];
30207        const wrapped = replacement(original);
30208        if (typeof wrapped === "function") {
30209            wrapped.prototype = wrapped.prototype || {};
30210            Object.defineProperties(wrapped, {
30211                __rrweb_original__: {
30212                    enumerable: false,
30213                    value: original
30214                }
30215            });
30216        }
30217        source[name] = wrapped;
30218        return ()=>{
30219            source[name] = original;
30220        };
30221    } catch (unused) {
30222        return ()=>{};
30223    }
30224}
30225let nowTimestamp = Date.now;
30226if (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {
30227    nowTimestamp = ()=>/* @__PURE__ */ new Date().getTime();
30228}
30229function getWindowScroll(win) {
30230    var _doc_body_parentElement, _doc_body, _doc_body1, _doc_body_parentElement1, _doc_body2, _doc_body3;
30231    const doc = win.document;
30232    return {
30233        left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollLeft) || (doc === null || doc === void 0 ? void 0 : (_doc_body = doc.body) === null || _doc_body === void 0 ? void 0 : (_doc_body_parentElement = _doc_body.parentElement) === null || _doc_body_parentElement === void 0 ? void 0 : _doc_body_parentElement.scrollLeft) || (doc === null || doc === void 0 ? void 0 : (_doc_body1 = doc.body) === null || _doc_body1 === void 0 ? void 0 : _doc_body1.scrollLeft) || 0,
30234        top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : (doc === null || doc === void 0 ? void 0 : doc.documentElement.scrollTop) || (doc === null || doc === void 0 ? void 0 : (_doc_body2 = doc.body) === null || _doc_body2 === void 0 ? void 0 : (_doc_body_parentElement1 = _doc_body2.parentElement) === null || _doc_body_parentElement1 === void 0 ? void 0 : _doc_body_parentElement1.scrollTop) || (doc === null || doc === void 0 ? void 0 : (_doc_body3 = doc.body) === null || _doc_body3 === void 0 ? void 0 : _doc_body3.scrollTop) || 0
30235    };
30236}
30237function getWindowHeight() {
30238    return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;
30239}
30240function getWindowWidth() {
30241    return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;
30242}
30243function closestElementOfNode$1(node) {
30244    if (!node) {
30245        return null;
30246    }
30247    try {
30248        const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;
30249        return el;
30250    } catch (error) {
30251        return null;
30252    }
30253}
30254function isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {
30255    if (!node) {
30256        return false;
30257    }
30258    const el = closestElementOfNode$1(node);
30259    if (!el) {
30260        return false;
30261    }
30262    const blockedPredicate = createMatchPredicate(blockClass, blockSelector);
30263    if (!checkAncestors) {
30264        const isUnblocked = unblockSelector && el.matches(unblockSelector);
30265        return blockedPredicate(el) && !isUnblocked;
30266    }
30267    const blockDistance = distanceToMatch(el, blockedPredicate);
30268    let unblockDistance = -1;
30269    if (blockDistance < 0) {
30270        return false;
30271    }
30272    if (unblockSelector) {
30273        unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));
30274    }
30275    if (blockDistance > -1 && unblockDistance < 0) {
30276        return true;
30277    }
30278    return blockDistance < unblockDistance;
30279}
30280function isSerialized(n, mirror) {
30281    return mirror.getId(n) !== -1;
30282}
30283function isIgnored(n, mirror) {
30284    return mirror.getId(n) === IGNORED_NODE;
30285}
30286function isAncestorRemoved(target, mirror) {
30287    if (isShadowRoot(target)) {
30288        return false;
30289    }
30290    const id = mirror.getId(target);
30291    if (!mirror.has(id)) {
30292        return true;
30293    }
30294    if (target.parentNode && target.parentNode.nodeType === target.DOCUMENT_NODE) {
30295        return false;
30296    }
30297    if (!target.parentNode) {
30298        return true;
30299    }
30300    return isAncestorRemoved(target.parentNode, mirror);
30301}
30302function legacy_isTouchEvent(event) {
30303    return Boolean(event.changedTouches);
30304}
30305function polyfill() {
30306    let win = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : window;
30307    if ("NodeList" in win && !win.NodeList.prototype.forEach) {
30308        win.NodeList.prototype.forEach = Array.prototype.forEach;
30309    }
30310    if ("DOMTokenList" in win && !win.DOMTokenList.prototype.forEach) {
30311        win.DOMTokenList.prototype.forEach = Array.prototype.forEach;
30312    }
30313    if (!Node.prototype.contains) {
30314        var _this = this;
30315        Node.prototype.contains = function() {
30316            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
30317                args[_key] = arguments[_key];
30318            }
30319            let node = args[0];
30320            if (!(0 in args)) {
30321                throw new TypeError("1 argument is required");
30322            }
30323            do {
30324                if (_this === node) {
30325                    return true;
30326                }
30327            }while (node = node && node.parentNode)
30328            return false;
30329        };
30330    }
30331}
30332function isSerializedIframe(n, mirror) {
30333    return Boolean(n.nodeName === "IFRAME" && mirror.getMeta(n));
30334}
30335function isSerializedStylesheet(n, mirror) {
30336    return Boolean(n.nodeName === "LINK" && n.nodeType === n.ELEMENT_NODE && n.getAttribute && n.getAttribute("rel") === "stylesheet" && mirror.getMeta(n));
30337}
30338function hasShadowRoot(n) {
30339    return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);
30340}
30341class StyleSheetMirror {
30342    getId(stylesheet) {
30343        var _this_styleIDMap_get;
30344        return (_this_styleIDMap_get = this.styleIDMap.get(stylesheet)) !== null && _this_styleIDMap_get !== void 0 ? _this_styleIDMap_get : -1;
30345    }
30346    has(stylesheet) {
30347        return this.styleIDMap.has(stylesheet);
30348    }
30349    /**
30350   * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.
30351   */ add(stylesheet, id) {
30352        if (this.has(stylesheet)) return this.getId(stylesheet);
30353        let newId;
30354        if (id === void 0) {
30355            newId = this.id++;
30356        } else newId = id;
30357        this.styleIDMap.set(stylesheet, newId);
30358        this.idStyleMap.set(newId, stylesheet);
30359        return newId;
30360    }
30361    getStyle(id) {
30362        return this.idStyleMap.get(id) || null;
30363    }
30364    reset() {
30365        this.styleIDMap = /* @__PURE__ */ new WeakMap();
30366        this.idStyleMap = /* @__PURE__ */ new Map();
30367        this.id = 1;
30368    }
30369    generateId() {
30370        return this.id++;
30371    }
30372    constructor(){
30373        this.id = 1;
30374        this.styleIDMap = /* @__PURE__ */ new WeakMap();
30375        this.idStyleMap = /* @__PURE__ */ new Map();
30376    }
30377}
30378function getShadowHost(n) {
30379    var _n_getRootNode, _n_getRootNode1;
30380    let shadowHost = null;
30381    if (((_n_getRootNode1 = n.getRootNode) === null || _n_getRootNode1 === void 0 ? void 0 : (_n_getRootNode = _n_getRootNode1.call(n)) === null || _n_getRootNode === void 0 ? void 0 : _n_getRootNode.nodeType) === N
vendor: 6,487 bytes, lines 30381-30525
30381ode.DOCUMENT_FRAGMENT_NODE && n.getRootNode().host) shadowHost = n.getRootNode().host;
30382    return shadowHost;
30383}
30384function getRootShadowHost(n) {
30385    let rootShadowHost = n;
30386    let shadowHost;
30387    while(shadowHost = getShadowHost(rootShadowHost))rootShadowHost = shadowHost;
30388    return rootShadowHost;
30389}
30390function shadowHostInDom(n) {
30391    const doc = n.ownerDocument;
30392    if (!doc) return false;
30393    const shadowHost = getRootShadowHost(n);
30394    return doc.contains(shadowHost);
30395}
30396function inDom(n) {
30397    const doc = n.ownerDocument;
30398    if (!doc) return false;
30399    return doc.contains(n) || shadowHostInDom(n);
30400}
30401const cachedImplementations1 = {};
30402function getImplementation(name) {
30403    const cached = cachedImplementations1[name];
30404    if (cached) {
30405        return cached;
30406    }
30407    const document2 = window.document;
30408    let impl = window[name];
30409    if (document2 && typeof document2.createElement === "function") {
30410        try {
30411            const sandbox = document2.createElement("iframe");
30412            sandbox.hidden = true;
30413            document2.head.appendChild(sandbox);
30414            const contentWindow = sandbox.contentWindow;
30415            if (contentWindow && contentWindow[name]) {
30416                impl = contentWindow[name];
30417            }
30418            document2.head.removeChild(sandbox);
30419        } catch (e) {}
30420    }
30421    return cachedImplementations1[name] = impl.bind(window);
30422}
30423function onRequestAnimationFrame() {
30424    for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
30425        rest[_key] = arguments[_key];
30426    }
30427    return getImplementation("requestAnimationFrame")(...rest);
30428}
30429function setTimeout$2() {
30430    for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
30431        rest[_key] = arguments[_key];
30432    }
30433    return getImplementation("setTimeout")(...rest);
30434}
30435function clearTimeout$2() {
30436    for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
30437        rest[_key] = arguments[_key];
30438    }
30439    return getImplementation("clearTimeout")(...rest);
30440}
30441var EventType = /* @__PURE__ */ ((EventType2)=>{
30442    EventType2[EventType2["DomContentLoaded"] = 0] = "DomContentLoaded";
30443    EventType2[EventType2["Load"] = 1] = "Load";
30444    EventType2[EventType2["FullSnapshot"] = 2] = "FullSnapshot";
30445    EventType2[EventType2["IncrementalSnapshot"] = 3] = "IncrementalSnapshot";
30446    EventType2[EventType2["Meta"] = 4] = "Meta";
30447    EventType2[EventType2["Custom"] = 5] = "Custom";
30448    EventType2[EventType2["Plugin"] = 6] = "Plugin";
30449    return EventType2;
30450})(EventType || {});
30451var IncrementalSource = /* @__PURE__ */ ((IncrementalSource2)=>{
30452    IncrementalSource2[IncrementalSource2["Mutation"] = 0] = "Mutation";
30453    IncrementalSource2[IncrementalSource2["MouseMove"] = 1] = "MouseMove";
30454    IncrementalSource2[IncrementalSource2["MouseInteraction"] = 2] = "MouseInteraction";
30455    IncrementalSource2[IncrementalSource2["Scroll"] = 3] = "Scroll";
30456    IncrementalSource2[IncrementalSource2["ViewportResize"] = 4] = "ViewportResize";
30457    IncrementalSource2[IncrementalSource2["Input"] = 5] = "Input";
30458    IncrementalSource2[IncrementalSource2["TouchMove"] = 6] = "TouchMove";
30459    IncrementalSource2[IncrementalSource2["MediaInteraction"] = 7] = "MediaInteraction";
30460    IncrementalSource2[IncrementalSource2["StyleSheetRule"] = 8] = "StyleSheetRule";
30461    IncrementalSource2[IncrementalSource2["CanvasMutation"] = 9] = "CanvasMutation";
30462    IncrementalSource2[IncrementalSource2["Font"] = 10] = "Font";
30463    IncrementalSource2[IncrementalSource2["Log"] = 11] = "Log";
30464    IncrementalSource2[IncrementalSource2["Drag"] = 12] = "Drag";
30465    IncrementalSource2[IncrementalSource2["StyleDeclaration"] = 13] = "StyleDeclaration";
30466    IncrementalSource2[IncrementalSource2["Selection"] = 14] = "Selection";
30467    IncrementalSource2[IncrementalSource2["AdoptedStyleSheet"] = 15] = "AdoptedStyleSheet";
30468    IncrementalSource2[IncrementalSource2["CustomElement"] = 16] = "CustomElement";
30469    return IncrementalSource2;
30470})(IncrementalSource || {});
30471var MouseInteractions = /* @__PURE__ */ ((MouseInteractions2)=>{
30472    MouseInteractions2[MouseInteractions2["MouseUp"] = 0] = "MouseUp";
30473    MouseInteractions2[MouseInteractions2["MouseDown"] = 1] = "MouseDown";
30474    MouseInteractions2[MouseInteractions2["Click"] = 2] = "Click";
30475    MouseInteractions2[MouseInteractions2["ContextMenu"] = 3] = "ContextMenu";
30476    MouseInteractions2[MouseInteractions2["DblClick"] = 4] = "DblClick";
30477    MouseInteractions2[MouseInteractions2["Focus"] = 5] = "Focus";
30478    MouseInteractions2[MouseInteractions2["Blur"] = 6] = "Blur";
30479    MouseInteractions2[MouseInteractions2["TouchStart"] = 7] = "TouchStart";
30480    MouseInteractions2[MouseInteractions2["TouchMove_Departed"] = 8] = "TouchMove_Departed";
30481    MouseInteractions2[MouseInteractions2["TouchEnd"] = 9] = "TouchEnd";
30482    MouseInteractions2[MouseInteractions2["TouchCancel"] = 10] = "TouchCancel";
30483    return MouseInteractions2;
30484})(MouseInteractions || {});
30485var PointerTypes = /* @__PURE__ */ ((PointerTypes2)=>{
30486    PointerTypes2[PointerTypes2["Mouse"] = 0] = "Mouse";
30487    PointerTypes2[PointerTypes2["Pen"] = 1] = "Pen";
30488    PointerTypes2[PointerTypes2["Touch"] = 2] = "Touch";
30489    return PointerTypes2;
30490})(PointerTypes || {});
30491var MediaInteractions = /* @__PURE__ */ ((MediaInteractions2)=>{
30492    MediaInteractions2[MediaInteractions2["Play"] = 0] = "Play";
30493    MediaInteractions2[MediaInteractions2["Pause"] = 1] = "Pause";
30494    MediaInteractions2[MediaInteractions2["Seeked"] = 2] = "Seeked";
30495    MediaInteractions2[MediaInteractions2["VolumeChange"] = 3] = "VolumeChange";
30496    MediaInteractions2[MediaInteractions2["RateChange"] = 4] = "RateChange";
30497    return MediaInteractions2;
30498})(MediaInteractions || {});
30499let errorHandler;
30500function registerErrorHandler(handler) {
30501    errorHandler = handler;
30502}
30503function unregisterErrorHandler() {
30504    errorHandler = void 0;
30505}
30506const callbackWrapper = (cb)=>{
30507    if (!errorHandler) {
30508        return cb;
30509    }
30510    const rrwebWrapped = function() {
30511        for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
30512            rest[_key] = arguments[_key];
30513        }
30514        try {
30515            return cb(...rest);
30516        } catch (error) {
30517            if (errorHandler && errorHandler(error) === true) {
30518                return ()=>{};
30519            }
30520            throw error;
30521        }
30522    };
30523    return rrwebWrapped;
30524};
30525var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
30525+/";
30526var lookup = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
30527for(var i1 = 0; i1 < chars.length; i1++){
30528    lookup[chars.charCodeAt(i1)] = i1;
30529}
30530class CanvasManagerNoop {
30531    reset() {}
30532    freeze() {}
30533    unfreeze() {}
30534    lock() {}
30535    unlock() {}
30536    snapshot() {}
30537    addWindow() {}
30538    addShadowRoot() {}
30539    resetShadowRoots() {}
30540}
30541function getIFrameContentDocument(iframe) {
30542    try {
30543        return iframe.contentDocument;
30544    } catch (e2) {}
30545}
30546function getIFrameContentWindow(iframe) {
30547    try {
30548        return iframe.contentWindow;
30549    } catch (e2) {}
30550}
30551class StyleDeclarationParser {
30552    parse(styleText) {
30553        return this.parseWithConstructableStylesheet(styleText) || this.parseWithDetachedElement(styleText);
30554    }
30555    parseWithConstructableStylesheet(styleText) {
30556        if (typeof CSSStyleSheet === "undefined" || typeof CSSStyleSheet.prototype.replaceSync !== "function") {
30557            return null;
30558        }
30559        try {
30560            const sheet = new CSSStyleSheet();
30561            sheet.replaceSync("x { ".concat(styleText, " }"));
30562            const rule = sheet.cssRules[0];
30563            if (!rule || rule.type !== CSSRule.STYLE_RULE) {
30564                return null;
30565            }
30566            return rule.style;
30567        } catch (unused) {
30568            return null;
30569        }
30570    }
30571    parseWithDetachedElement(styleText) {
30572        const old = this.getUnattachedDoc().createElement("span");
30573        old.setAttribute("style", styleText);
30574        return old.style;
30575    }
30576    getUnattachedDoc() {
30577        if (!this.unattachedDoc) {
30578            try {
30579                this.unattachedDoc = document.implementation.createHTMLDocument();
30580            } catch (unused) {
30581                this.unattachedDoc = this.doc;
30582            }
30583        }
30584        return this.unattachedDoc;
30585    }
30586    constructor(doc){
30587        this.doc = doc;
30588        this.unattachedDoc = null;
30589    }
30590}
30591function isNodeInLinkedList(n2) {
30592    return "__ln" in n2;
30593}
30594class DoubleLinkedList {
30595    get(position) {
30596        if (position >= this.length) {
30597            throw new Error("Position outside of list range");
30598        }
30599        let current = this.head;
30600        for(let index = 0; index < position; index++){
30601            current = (current === null || current === void 0 ? void 0 : current.next) || null;
30602        }
30603        return current;
30604    }
30605    addNode(n2) {
30606        const node = {
30607            value: n2,
30608            previous: null,
30609            next: null
30610        };
30611        n2.__ln = node;
30612        if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {
30613            const current = n2.previousSibling.__ln.next;
30614            node.next = current;
30615            node.previous = n2.previousSibling.__ln;
30616            n2.previousSibling.__ln.next = node;
30617            if (current) {
30618                current.previous = node;
30619            }
30620        } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {
30621            const current = n2.nextSibling.__ln.previous;
30622            node.previous = current;
30623            node.next = n2.nextSibling.__ln;
30624            n2.nextSibling.__ln.previous = node;
30625            if (current) {
30626                current.next = node;
30627            }
30628        } else {
30629            if (this.head) {
30630                this.head.previous = node;
30631            }
30632            node.next = this.head;
30633            this.head = node;
30634        }
30635        if (node.next === null) {
30636            this.tail = node;
30637        }
30638        this.length++;
30639    }
30640    removeNode(n2) {
30641        const current = n2.__ln;
30642        if (!this.head) {
30643            return;
30644        }
30645        if (!current.previous) {
30646            this.head = current.next;
30647            if (this.head) {
30648                this.head.previous = null;
30649            } else {
30650                this.tail = null;
30651            }
30652        } else {
30653            current.previous.next = current.next;
30654            if (current.next) {
30655                current.next.previous = current.previous;
30656            } else {
30657                this.tail = current.previous;
30658            }
30659        }
30660        if (n2.__ln) {
30661            delete n2.__ln;
30662        }
30663        this.length--;
30664    }
30665    constructor(){
30666        this.length = 0;
30667        this.head = null;
30668        this.tail = null;
30669    }
30670}
30671const moveKey = (id, parentId)=>"".concat(id, "@").concat(parentId);
30672class MutationBuffer {
30673    init(options) {
30674        [
30675            "mutationCb",
30676            "blockClass",
30677            "blockSelector",
30678            "unblockSelector",
30679            "maskAllText",
30680            "maskTextClass",
30681            "unmaskTextClass",
30682            "maskTextSelector",
30683            "unmaskTextSelector",
30684            "inlineStylesheet",
30685            "maskInputOptions",
30686            "maskAttributeFn",
30687            "maskTextFn",
30688            "maskInputFn",
30689            "keepIframeSrcFn",
30690            "recordCanvas",
30691            "inlineImages",
30692            "slimDOMOptions",
30693            "dataURLOptions",
30694            "doc",
30695            "mirror",
30696            "iframeManager",
30697            "stylesheetManager",
30698            "shadowDomManager",
30699            "canvasManager",
30700            "processedNodeManager",
30701            "ignoreCSSAttributes"
vendor: 39,888 bytes, lines 30702-31619
30702        ].forEach((key)=>{
30703            this[key] = options[key];
30704        });
30705        this.styleDeclarationParser = new StyleDeclarationParser(this.doc);
30706    }
30707    freeze() {
30708        this.frozen = true;
30709        this.canvasManager.freeze();
30710    }
30711    unfreeze() {
30712        this.frozen = false;
30713        this.canvasManager.unfreeze();
30714        this.emit();
30715    }
30716    isFrozen() {
30717        return this.frozen;
30718    }
30719    lock() {
30720        this.locked = true;
30721        this.canvasManager.lock();
30722    }
30723    unlock() {
30724        this.locked = false;
30725        this.canvasManager.unlock();
30726        this.emit();
30727    }
30728    reset() {
30729        this.shadowDomManager.reset();
30730        this.canvasManager.reset();
30731    }
30732    constructor(){
30733        this.frozen = false;
30734        this.locked = false;
30735        this.texts = [];
30736        this.attributes = [];
30737        this.attributeMap = /* @__PURE__ */ new WeakMap();
30738        this.removes = [];
30739        this.mapRemoves = [];
30740        this.movedMap = {};
30741        this.addedSet = /* @__PURE__ */ new Set();
30742        this.movedSet = /* @__PURE__ */ new Set();
30743        this.droppedSet = /* @__PURE__ */ new Set();
30744        this.processMutations = (mutations)=>{
30745            mutations.forEach(this.processMutation);
30746            this.emit();
30747        };
30748        this.emit = ()=>{
30749            if (this.frozen || this.locked) {
30750                return;
30751            }
30752            const adds = [];
30753            const addedIds = /* @__PURE__ */ new Set();
30754            const addList = new DoubleLinkedList();
30755            const getNextId = (n2)=>{
30756                let ns = n2;
30757                let nextId = IGNORED_NODE;
30758                while(nextId === IGNORED_NODE){
30759                    ns = ns && ns.nextSibling;
30760                    nextId = ns && this.mirror.getId(ns);
30761                }
30762                return nextId;
30763            };
30764            const pushAdd = (n2)=>{
30765                if (!n2.parentNode || !inDom(n2)) {
30766                    return;
30767                }
30768                const parentId = isShadowRoot(n2.parentNode) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(n2.parentNode);
30769                const nextId = getNextId(n2);
30770                if (parentId === -1 || nextId === -1) {
30771                    return addList.addNode(n2);
30772                }
30773                const sn = serializeNodeWithId(n2, {
30774                    doc: this.doc,
30775                    mirror: this.mirror,
30776                    blockClass: this.blockClass,
30777                    blockSelector: this.blockSelector,
30778                    maskAllText: this.maskAllText,
30779                    unblockSelector: this.unblockSelector,
30780                    maskTextClass: this.maskTextClass,
30781                    unmaskTextClass: this.unmaskTextClass,
30782                    maskTextSelector: this.maskTextSelector,
30783                    unmaskTextSelector: this.unmaskTextSelector,
30784                    skipChild: true,
30785                    newlyAddedElement: true,
30786                    inlineStylesheet: this.inlineStylesheet,
30787                    maskInputOptions: this.maskInputOptions,
30788                    maskAttributeFn: this.maskAttributeFn,
30789                    maskTextFn: this.maskTextFn,
30790                    maskInputFn: this.maskInputFn,
30791                    slimDOMOptions: this.slimDOMOptions,
30792                    dataURLOptions: this.dataURLOptions,
30793                    recordCanvas: this.recordCanvas,
30794                    inlineImages: this.inlineImages,
30795                    onSerialize: (currentN)=>{
30796                        if (isSerializedIframe(currentN, this.mirror) && !isBlocked(currentN, this.blockClass, this.blockSelector, this.unblockSelector, false)) {
30797                            this.iframeManager.addIframe(currentN);
30798                        }
30799                        if (isSerializedStylesheet(currentN, this.mirror)) {
30800                            this.stylesheetManager.trackLinkElement(currentN);
30801                        }
30802                        if (hasShadowRoot(n2)) {
30803                            this.shadowDomManager.addShadowRoot(n2.shadowRoot, this.doc);
30804                        }
30805                    },
30806                    onIframeLoad: (iframe, childSn)=>{
30807                        if (isBlocked(iframe, this.blockClass, this.blockSelector, this.unblockSelector, false)) {
30808                            return;
30809                        }
30810                        this.iframeManager.attachIframe(iframe, childSn);
30811                        const contentWindow = getIFrameContentWindow(iframe);
30812                        if (contentWindow) {
30813                            this.canvasManager.addWindow(contentWindow);
30814                        }
30815                        this.shadowDomManager.observeAttachShadow(iframe);
30816                    },
30817                    onStylesheetLoad: (link, childSn)=>{
30818                        this.stylesheetManager.attachLinkElement(link, childSn);
30819                    },
30820                    onBlockedImageLoad: (_imageEl, serializedNode, param)=>{
30821                        let { width, height } = param;
30822                        this.mutationCb({
30823                            adds: [],
30824                            removes: [],
30825                            texts: [],
30826                            attributes: [
30827                                {
30828                                    id: serializedNode.id,
30829                                    attributes: {
30830                                        style: {
30831                                            width: "".concat(width, "px"),
30832                                            height: "".concat(height, "px")
30833                                        }
30834                                    }
30835                                }
30836                            ]
30837                        });
30838                    },
30839                    ignoreCSSAttributes: this.ignoreCSSAttributes
30840                });
30841                if (sn) {
30842                    adds.push({
30843                        parentId,
30844                        nextId,
30845                        node: sn
30846                    });
30847                    addedIds.add(sn.id);
30848                }
30849            };
30850            while(this.mapRemoves.length){
30851                this.mirror.removeNodeFromMap(this.mapRemoves.shift());
30852            }
30853            for (const n2 of this.movedSet){
30854                if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(n2.parentNode)) {
30855                    continue;
30856                }
30857                pushAdd(n2);
30858            }
30859            for (const n2 of this.addedSet){
30860                if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) {
30861                    pushAdd(n2);
30862                } else if (isAncestorInSet(this.movedSet, n2)) {
30863                    pushAdd(n2);
30864                } else {
30865                    this.droppedSet.add(n2);
30866                }
30867            }
30868            let candidate = null;
30869            while(addList.length){
30870                let node = null;
30871                if (candidate) {
30872                    const parentId = this.mirror.getId(candidate.value.parentNode);
30873                    const nextId = getNextId(candidate.value);
30874                    if (parentId !== -1 && nextId !== -1) {
30875                        node = candidate;
30876                    }
30877                }
30878                if (!node) {
30879                    let tailNode = addList.tail;
30880                    while(tailNode){
30881                        const _node = tailNode;
30882                        tailNode = tailNode.previous;
30883                        if (_node) {
30884                            const parentId = this.mirror.getId(_node.value.parentNode);
30885                            const nextId = getNextId(_node.value);
30886                            if (nextId === -1) continue;
30887                            else if (parentId !== -1) {
30888                                node = _node;
30889                                break;
30890                            } else {
30891                                const unhandledNode = _node.value;
30892                                if (unhandledNode.parentNode && unhandledNode.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
30893                                    const shadowHost = unhandledNode.parentNode.host;
30894                                    const parentId2 = this.mirror.getId(shadowHost);
30895                                    if (parentId2 !== -1) {
30896                                        node = _node;
30897                                        break;
30898                                    }
30899                                }
30900                            }
30901                        }
30902                    }
30903                }
30904                if (!node) {
30905                    while(addList.head){
30906                        addList.removeNode(addList.head.value);
30907                    }
30908                    break;
30909                }
30910                candidate = node.previous;
30911                addList.removeNode(node.value);
30912                pushAdd(node.value);
30913            }
30914            const payload = {
30915                texts: this.texts.map((text)=>({
30916                        id: this.mirror.getId(text.node),
30917                        value: text.value
30918                    })).filter((text)=>!addedIds.has(text.id)).filter((text)=>this.mirror.has(text.id)),
30919                attributes: this.attributes.map((attribute)=>{
30920                    const { attributes } = attribute;
30921                    if (typeof attributes.style === "string") {
30922                        const diffAsStr = JSON.stringify(attribute.styleDiff);
30923                        const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);
30924                        if (diffAsStr.length < attributes.style.length) {
30925                            if ((diffAsStr + unchangedAsStr).split("var(").length === attributes.style.split("var(").length) {
30926                                attributes.style = attribute.styleDiff;
30927                            }
30928                        }
30929                    }
30930                    return {
30931                        id: this.mirror.getId(attribute.node),
30932                        attributes
30933                    };
30934                }).filter((attribute)=>!addedIds.has(attribute.id)).filter((attribute)=>this.mirror.has(attribute.id)),
30935                removes: this.removes,
30936                adds
30937            };
30938            if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {
30939                return;
30940            }
30941            this.texts = [];
30942            this.attributes = [];
30943            this.attributeMap = /* @__PURE__ */ new WeakMap();
30944            this.removes = [];
30945            this.addedSet = /* @__PURE__ */ new Set();
30946            this.movedSet = /* @__PURE__ */ new Set();
30947            this.droppedSet = /* @__PURE__ */ new Set();
30948            this.movedMap = {};
30949            this.mutationCb(payload);
30950        };
30951        this.processMutation = (m)=>{
30952            if (isIgnored(m.target, this.mirror)) {
30953                return;
30954            }
30955            switch(m.type){
30956                case "characterData":
30957                    {
30958                        const value = m.target.textContent;
30959                        if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) && value !== m.oldValue) {
30960                            this.texts.push({
30961                                value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode$1(m.target)) : value.replace(/[\S]/g, "*") : value,
30962                                node: m.target
30963                            });
30964                        }
30965                        break;
30966                    }
30967                case "attributes":
30968                    {
30969                        const target = m.target;
30970                        let attributeName = m.attributeName;
30971                        let value = m.target.getAttribute(attributeName);
30972                        if (attributeName === "value") {
30973                            const type = getInputType(target);
30974                            const tagName = target.tagName;
30975                            value = getInputValue(target, tagName, type);
30976                            const isInputMasked = shouldMaskInput({
30977                                maskInputOptions: this.maskInputOptions,
30978                                tagName,
30979                                type
30980                            });
30981                            const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);
30982                            value = maskInputValue({
30983                                isMasked: forceMask,
30984                                element: target,
30985                                value,
30986                                maskInputFn: this.maskInputFn
30987                            });
30988                        }
30989                        if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) || value === m.oldValue) {
30990                            return;
30991                        }
30992                        let item = this.attributeMap.get(m.target);
30993                        if (target.tagName === "IFRAME" && attributeName === "src" && !this.keepIframeSrcFn(value)) {
30994                            const iframeDoc = getIFrameContentDocument(target);
30995                            if (!iframeDoc) {
30996                                attributeName = "rr_src";
30997                            } else {
30998                                return;
30999                            }
31000                        }
31001                        if (!item) {
31002                            item = {
31003                                node: m.target,
31004                                attributes: {},
31005                                styleDiff: {},
31006                                _unchangedStyles: {}
31007                            };
31008                            this.attributes.push(item);
31009                            this.attributeMap.set(m.target, item);
31010                        }
31011                        if (attributeName === "type" && target.tagName === "INPUT" && (m.oldValue || "").toLowerCase() === "password") {
31012                            target.setAttribute("data-rr-is-password", "true");
31013                        }
31014                        if (!ignoreAttribute(target.tagName, attributeName)) {
31015                            item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);
31016                            if (attributeName === "style") {
31017                                const oldStyle = m.oldValue ? this.styleDeclarationParser.parse(m.oldValue) : null;
31018                                for (const pname of Array.from(target.style)){
31019                                    const newValue = target.style.getPropertyValue(pname);
31020                                    const newPriority = target.style.getPropertyPriority(pname);
31021                                    if (newValue !== ((oldStyle === null || oldStyle === void 0 ? void 0 : oldStyle.getPropertyValue(pname)) || "") || newPriority !== ((oldStyle === null || oldStyle === void 0 ? void 0 : oldStyle.getPropertyPriority(pname)) || "")) {
31022                                        if (newPriority === "") {
31023                                            item.styleDiff[pname] = newValue;
31024                                        } else {
31025                                            item.styleDiff[pname] = [
31026                                                newValue,
31027                                                newPriority
31028                                            ];
31029                                        }
31030                                    } else {
31031                                        item._unchangedStyles[pname] = [
31032                                            newValue,
31033                                            newPriority
31034                                        ];
31035                                    }
31036                                }
31037                                if (oldStyle) {
31038                                    for (const pname of Array.from(oldStyle)){
31039                                        if (target.style.getPropertyValue(pname) === "") {
31040                                            item.styleDiff[pname] = false;
31041                                        }
31042                                    }
31043                                }
31044                            }
31045                        }
31046                        break;
31047                    }
31048                case "childList":
31049                    {
31050                        if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {
31051                            return;
31052                        }
31053                        m.addedNodes.forEach((n2)=>this.genAdds(n2, m.target));
31054                        m.removedNodes.forEach((n2)=>{
31055                            const nodeId = this.mirror.getId(n2);
31056                            const parentId = isShadowRoot(m.target) ? this.mirror.getId(m.target.host) : this.mirror.getId(m.target);
31057                            if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) || isIgnored(n2, this.mirror) || !isSerialized(n2, this.mirror)) {
31058                                return;
31059                            }
31060                            if (this.addedSet.has(n2)) {
31061                                deepDelete(this.addedSet, n2);
31062                                this.droppedSet.add(n2);
31063                            } else if (this.addedSet.has(m.target) && nodeId === -1) ;
31064                            else if (isAncestorRemoved(m.target, this.mirror)) ;
31065                            else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {
31066                                deepDelete(this.movedSet, n2);
31067                            } else {
31068                                this.removes.push({
31069                                    parentId,
31070                                    id: nodeId,
31071                                    isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0
31072                                });
31073                            }
31074                            this.mapRemoves.push(n2);
31075                        });
31076                        break;
31077                    }
31078            }
31079        };
31080        this.genAdds = (n2, target)=>{
31081            if (this.processedNodeManager.inOtherBuffer(n2, this)) return;
31082            if (this.addedSet.has(n2) || this.movedSet.has(n2)) return;
31083            if (this.mirror.hasNode(n2)) {
31084                if (isIgnored(n2, this.mirror)) {
31085                    return;
31086                }
31087                this.movedSet.add(n2);
31088                let targetId = null;
31089                if (target && this.mirror.hasNode(target)) {
31090                    targetId = this.mirror.getId(target);
31091                }
31092                if (targetId && targetId !== -1) {
31093                    this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;
31094                }
31095            } else {
31096                this.addedSet.add(n2);
31097                this.droppedSet.delete(n2);
31098            }
31099            if (!isBlocked(n2, this.blockClass, this.blockSelector, this.unblockSelector, false)) {
31100                if (n2.childNodes) {
31101                    n2.childNodes.forEach((childN)=>this.genAdds(childN));
31102                }
31103                if (hasShadowRoot(n2)) {
31104                    n2.shadowRoot.childNodes.forEach((childN)=>{
31105                        this.processedNodeManager.add(childN, this);
31106                        this.genAdds(childN, n2);
31107                    });
31108                }
31109            }
31110        };
31111    }
31112}
31113function deepDelete(addsSet, n2) {
31114    var _n2_childNodes;
31115    addsSet.delete(n2);
31116    (_n2_childNodes = n2.childNodes) === null || _n2_childNodes === void 0 ? void 0 : _n2_childNodes.forEach((childN)=>deepDelete(addsSet, childN));
31117}
31118function isParentRemoved(removes, n2, mirror2) {
31119    if (removes.length === 0) return false;
31120    return _isParentRemoved(removes, n2, mirror2);
31121}
31122function _isParentRemoved(removes, n2, mirror2) {
31123    let node = n2.parentNode;
31124    while(node){
31125        const parentId = mirror2.getId(node);
31126        if (removes.some((r2)=>r2.id === parentId)) {
31127            return true;
31128        }
31129        node = node.parentNode;
31130    }
31131    return false;
31132}
31133function isAncestorInSet(set, n2) {
31134    if (set.size === 0) return false;
31135    return _isAncestorInSet(set, n2);
31136}
31137function _isAncestorInSet(set, n2) {
31138    const { parentNode } = n2;
31139    if (!parentNode) {
31140        return false;
31141    }
31142    if (set.has(parentNode)) {
31143        return true;
31144    }
31145    return _isAncestorInSet(set, parentNode);
31146}
31147const mutationBuffers = [];
31148function getEventTarget1(event) {
31149    try {
31150        if ("composedPath" in event) {
31151            const path = event.composedPath();
31152            if (path.length) {
31153                return path[0];
31154            }
31155        } else if ("path" in event && event.path.length) {
31156            return event.path[0];
31157        }
31158    } catch (unused) {}
31159    return event && event.target;
31160}
31161function initMutationObserver(options, rootEl) {
31162    var _window_Zone___symbol__, _window_Zone, _window;
31163    const mutationBuffer = new MutationBuffer();
31164    mutationBuffers.push(mutationBuffer);
31165    mutationBuffer.init(options);
31166    let mutationObserverCtor = window.MutationObserver || /**
31167  * Some websites may disable MutationObserver by removing it from the window object.
31168  * If someone is using rrweb to build a browser extention or things like it, they
31169  * could not change the website's code but can have an opportunity to inject some
31170  * code before the website executing its JS logic.
31171  * Then they can do this to store the native MutationObserver:
31172  * window.__rrMutationObserver = MutationObserver
31173  */ window.__rrMutationObserver;
31174    const angularZoneSymbol = (_window = window) === null || _window === void 0 ? void 0 : (_window_Zone = _window.Zone) === null || _window_Zone === void 0 ? void 0 : (_window_Zone___symbol__ = _window_Zone.__symbol__) === null || _window_Zone___symbol__ === void 0 ? void 0 : _window_Zone___symbol__.call(_window_Zone, "MutationObserver");
31175    if (angularZoneSymbol && window[angularZoneSymbol]) {
31176        mutationObserverCtor = window[angularZoneSymbol];
31177    }
31178    const observer = new mutationObserverCtor(callbackWrapper((mutations)=>{
31179        if (options.onMutation && options.onMutation(mutations) === false) {
31180            return;
31181        }
31182        mutationBuffer.processMutations.bind(mutationBuffer)(mutations);
31183    }));
31184    observer.observe(rootEl, {
31185        attributes: true,
31186        attributeOldValue: true,
31187        characterData: true,
31188        characterDataOldValue: true,
31189        childList: true,
31190        subtree: true
31191    });
31192    return observer;
31193}
31194function initMoveObserver(param) {
31195    let { mousemoveCb, sampling, doc, mirror: mirror2 } = param;
31196    if (sampling.mousemove === false) {
31197        return ()=>{};
31198    }
31199    const threshold = typeof sampling.mousemove === "number" ? sampling.mousemove : 50;
31200    const callbackThreshold = typeof sampling.mousemoveCallback === "number" ? sampling.mousemoveCallback : 500;
31201    let positions = [];
31202    let timeBaseline;
31203    const wrappedCb = throttle$1(callbackWrapper((source)=>{
31204        const totalOffset = Date.now() - timeBaseline;
31205        mousemoveCb(positions.map((p)=>{
31206            p.timeOffset -= totalOffset;
31207            return p;
31208        }), source);
31209        positions = [];
31210        timeBaseline = null;
31211    }), callbackThreshold);
31212    const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt)=>{
31213        const target = getEventTarget1(evt);
31214        const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;
31215        if (!timeBaseline) {
31216            timeBaseline = nowTimestamp();
31217        }
31218        positions.push({
31219            x: clientX,
31220            y: clientY,
31221            id: mirror2.getId(target),
31222            timeOffset: nowTimestamp() - timeBaseline
31223        });
31224        wrappedCb(typeof DragEvent !== "undefined" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove);
31225    }), threshold, {
31226        trailing: false
31227    }));
31228    const handlers = [
31229        on1("mousemove", updatePosition, doc),
31230        on1("touchmove", updatePosition, doc),
31231        on1("drag", updatePosition, doc)
31232    ];
31233    return callbackWrapper(()=>{
31234        handlers.forEach((h)=>h());
31235    });
31236}
31237function initMouseInteractionObserver(param) {
31238    let { mouseInteractionCb, doc, mirror: mirror2, blockClass, blockSelector, unblockSelector, sampling } = param;
31239    if (sampling.mouseInteraction === false) {
31240        return ()=>{};
31241    }
31242    const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;
31243    const handlers = [];
31244    let currentPointerType = null;
31245    const getHandler = (eventKey)=>{
31246        return (event)=>{
31247            const target = getEventTarget1(event);
31248            if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {
31249                return;
31250            }
31251            let pointerType = null;
31252            let thisEventKey = eventKey;
31253            if ("pointerType" in event) {
31254                switch(event.pointerType){
31255                    case "mouse":
31256                        pointerType = PointerTypes.Mouse;
31257                        break;
31258                    case "touch":
31259                        pointerType = PointerTypes.Touch;
31260                        break;
31261                    case "pen":
31262                        pointerType = PointerTypes.Pen;
31263                        break;
31264                }
31265                if (pointerType === PointerTypes.Touch) {
31266                    if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {
31267                        thisEventKey = "TouchStart";
31268                    } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {
31269                        thisEventKey = "TouchEnd";
31270                    }
31271                } else if (pointerType === PointerTypes.Pen) ;
31272            } else if (legacy_isTouchEvent(event)) {
31273                pointerType = PointerTypes.Touch;
31274            }
31275            if (pointerType !== null) {
31276                currentPointerType = pointerType;
31277                if (thisEventKey.startsWith("Touch") && pointerType === PointerTypes.Touch || thisEventKey.startsWith("Mouse") && pointerType === PointerTypes.Mouse) {
31278                    pointerType = null;
31279                }
31280            } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {
31281                pointerType = currentPointerType;
31282                currentPointerType = null;
31283            }
31284            const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;
31285            if (!e2) {
31286                return;
31287            }
31288            const id = mirror2.getId(target);
31289            const { clientX, clientY } = e2;
31290            callbackWrapper(mouseInteractionCb)({
31291                type: MouseInteractions[thisEventKey],
31292                id,
31293                x: clientX,
31294                y: clientY,
31295                ...pointerType !== null && {
31296                    pointerType
31297                }
31298            });
31299        };
31300    };
31301    Object.keys(MouseInteractions).filter((key)=>Number.isNaN(Number(key)) && !key.endsWith("_Departed") && disableMap[key] !== false).forEach((eventKey)=>{
31302        let eventName = toLowerCase(eventKey);
31303        const handler = getHandler(eventKey);
31304        if (window.PointerEvent) {
31305            switch(MouseInteractions[eventKey]){
31306                case MouseInteractions.MouseDown:
31307                case MouseInteractions.MouseUp:
31308                    eventName = eventName.replace("mouse", "pointer");
31309                    break;
31310                case MouseInteractions.TouchStart:
31311                case MouseInteractions.TouchEnd:
31312                    return;
31313            }
31314        }
31315        handlers.push(on1(eventName, handler, doc));
31316    });
31317    return callbackWrapper(()=>{
31318        handlers.forEach((h)=>h());
31319    });
31320}
31321function initScrollObserver(param) {
31322    let { scrollCb, doc, mirror: mirror2, blockClass, blockSelector, unblockSelector, sampling } = param;
31323    const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt)=>{
31324        const target = getEventTarget1(evt);
31325        if (!target || isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {
31326            return;
31327        }
31328        const id = mirror2.getId(target);
31329        if (target === doc && doc.defaultView) {
31330            const scrollLeftTop = getWindowScroll(doc.defaultView);
31331            scrollCb({
31332                id,
31333                x: scrollLeftTop.left,
31334                y: scrollLeftTop.top
31335            });
31336        } else {
31337            scrollCb({
31338                id,
31339                x: target.scrollLeft,
31340                y: target.scrollTop
31341            });
31342        }
31343    }), sampling.scroll || 100));
31344    return on1("scroll", updatePosition, doc);
31345}
31346function initViewportResizeObserver(param, param1) {
31347    let { viewportResizeCb } = param, { win } = param1;
31348    let lastH = -1;
31349    let lastW = -1;
31350    const updateDimension = callbackWrapper(throttle$1(callbackWrapper(()=>{
31351        const height = getWindowHeight();
31352        const width = getWindowWidth();
31353        if (lastH !== height || lastW !== width) {
31354            viewportResizeCb({
31355                width: Number(width),
31356                height: Number(height)
31357            });
31358            lastH = height;
31359            lastW = width;
31360        }
31361    }), 200));
31362    return on1("resize", updateDimension, win);
31363}
31364const INPUT_TAGS = [
31365    "INPUT",
31366    "TEXTAREA",
31367    "SELECT"
31368];
31369const lastInputValueMap = /* @__PURE__ */ new WeakMap();
31370function initInputObserver(param) {
31371    let { inputCb, doc, mirror: mirror2, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector } = param;
31372    function eventHandler(event) {
31373        let target = getEventTarget1(event);
31374        const userTriggered = event.isTrusted;
31375        const tagName = target && toUpperCase(target.tagName);
31376        if (tagName === "OPTION") target = target.parentElement;
31377        if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {
31378            return;
31379        }
31380        const el = target;
31381        if (el.classList.contains(ignoreClass) || ignoreSelector && el.matches(ignoreSelector)) {
31382            return;
31383        }
31384        const type = getInputType(target);
31385        let text = getInputValue(el, tagName, type);
31386        let isChecked = false;
31387        const isInputMasked = shouldMaskInput({
31388            maskInputOptions,
31389            tagName,
31390            type
31391        });
31392        const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);
31393        if (type === "radio" || type === "checkbox") {
31394            isChecked = target.checked;
31395        }
31396        text = maskInputValue({
31397            isMasked: forceMask,
31398            element: target,
31399            value: text,
31400            maskInputFn
31401        });
31402        cbWithDedup(target, userTriggeredOnInput ? {
31403            text,
31404            isChecked,
31405            userTriggered
31406        } : {
31407            text,
31408            isChecked
31409        });
31410        const name = target.name;
31411        if (type === "radio" && name && isChecked) {
31412            doc.querySelectorAll('input[type="radio"][name="'.concat(name, '"]')).forEach((el2)=>{
31413                if (el2 !== target) {
31414                    const text2 = maskInputValue({
31415                        // share mask behavior of `target`
31416                        isMasked: forceMask,
31417                        element: el2,
31418                        value: getInputValue(el2, tagName, type),
31419                        maskInputFn
31420                    });
31421                    cbWithDedup(el2, userTriggeredOnInput ? {
31422                        text: text2,
31423                        isChecked: !isChecked,
31424                        userTriggered: false
31425                    } : {
31426                        text: text2,
31427                        isChecked: !isChecked
31428                    });
31429                }
31430            });
31431        }
31432    }
31433    function cbWithDedup(target, v2) {
31434        const lastInputValue = lastInputValueMap.get(target);
31435        if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {
31436            lastInputValueMap.set(target, v2);
31437            const id = mirror2.getId(target);
31438            callbackWrapper(inputCb)({
31439                ...v2,
31440                id
31441            });
31442        }
31443    }
31444    const events = sampling.input === "last" ? [
31445        "change"
31446    ] : [
31447        "input",
31448        "change"
31449    ];
31450    const handlers = events.map((eventName)=>on1(eventName, callbackWrapper(eventHandler), doc));
31451    const currentWindow = doc.defaultView;
31452    if (!currentWindow) {
31453        return ()=>{
31454            handlers.forEach((h)=>h());
31455        };
31456    }
31457    const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, "value");
31458    const hookProperties = [
31459        [
31460            currentWindow.HTMLInputElement.prototype,
31461            "value"
31462        ],
31463        [
31464            currentWindow.HTMLInputElement.prototype,
31465            "checked"
31466        ],
31467        [
31468            currentWindow.HTMLSelectElement.prototype,
31469            "value"
31470        ],
31471        [
31472            currentWindow.HTMLTextAreaElement.prototype,
31473            "value"
31474        ],
31475        // Some UI library use selectedIndex to set select value
31476        [
31477            currentWindow.HTMLSelectElement.prototype,
31478            "selectedIndex"
31479        ],
31480        [
31481            currentWindow.HTMLOptionElement.prototype,
31482            "selected"
31483        ]
31484    ];
31485    if (propertyDescriptor && propertyDescriptor.set) {
31486        handlers.push(...hookProperties.map((p)=>hookSetter(p[0], p[1], {
31487                set () {
31488                    callbackWrapper(eventHandler)({
31489                        target: this,
31490                        isTrusted: false
31491                    });
31492                }
31493            }, false, currentWindow)));
31494    }
31495    return callbackWrapper(()=>{
31496        handlers.forEach((h)=>h());
31497    });
31498}
31499function getNestedCSSRulePositions(rule) {
31500    const positions = [];
31501    function recurse(childRule, pos) {
31502        if (hasNestedCSSRule("CSSGroupingRule") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule("CSSMediaRule") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule("CSSSupportsRule") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule("CSSConditionRule") && childRule.parentRule instanceof CSSConditionRule) {
31503            const rules2 = Array.from(childRule.parentRule.cssRules);
31504            const index = rules2.indexOf(childRule);
31505            pos.unshift(index);
31506        } else if (childRule.parentStyleSheet) {
31507            const rules2 = Array.from(childRule.parentStyleSheet.cssRules);
31508            const index = rules2.indexOf(childRule);
31509            pos.unshift(index);
31510        }
31511        return pos;
31512    }
31513    return recurse(rule, positions);
31514}
31515function getIdAndStyleId(sheet, mirror2, styleMirror) {
31516    let id, styleId;
31517    if (!sheet) return {};
31518    if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);
31519    else styleId = styleMirror.getId(sheet);
31520    return {
31521        styleId,
31522        id
31523    };
31524}
31525function initStyleSheetObserver(param, param1) {
31526    let { styleSheetRuleCb, mirror: mirror2, stylesheetManager } = param, { win } = param1;
31527    if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {
31528        return ()=>{};
31529    }
31530    const insertRule = win.CSSStyleSheet.prototype.insertRule;
31531    win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {
31532        apply: callbackWrapper((target, thisArg, argumentsList)=>{
31533            const [rule, index] = argumentsList;
31534            const { id, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror);
31535            if (id && id !== -1 || styleId && styleId !== -1) {
31536                styleSheetRuleCb({
31537                    id,
31538                    styleId,
31539                    adds: [
31540                        {
31541                            rule,
31542                            index
31543                        }
31544                    ]
31545                });
31546            }
31547            return target.apply(thisArg, argumentsList);
31548        })
31549    });
31550    const deleteRule = win.CSSStyleSheet.prototype.deleteRule;
31551    win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {
31552        apply: callbackWrapper((target, thisArg, argumentsList)=>{
31553            const [index] = argumentsList;
31554            const { id, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror);
31555            if (id && id !== -1 || styleId && styleId !== -1) {
31556                styleSheetRuleCb({
31557                    id,
31558                    styleId,
31559                    removes: [
31560                        {
31561                            index
31562                        }
31563                    ]
31564                });
31565            }
31566            return target.apply(thisArg, argumentsList);
31567        })
31568    });
31569    let replace;
31570    if (win.CSSStyleSheet.prototype.replace) {
31571        replace = win.CSSStyleSheet.prototype.replace;
31572        win.CSSStyleSheet.prototype.replace = new Proxy(replace, {
31573            apply: callbackWrapper((target, thisArg, argumentsList)=>{
31574                const [text] = argumentsList;
31575                const { id, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror);
31576                if (id && id !== -1 || styleId && styleId !== -1) {
31577                    styleSheetRuleCb({
31578                        id,
31579                        styleId,
31580                        replace: text
31581                    });
31582                }
31583                return target.apply(thisArg, argumentsList);
31584            })
31585        });
31586    }
31587    let replaceSync;
31588    if (win.CSSStyleSheet.prototype.replaceSync) {
31589        replaceSync = win.CSSStyleSheet.prototype.replaceSync;
31590        win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {
31591            apply: callbackWrapper((target, thisArg, argumentsList)=>{
31592                const [text] = argumentsList;
31593                const { id, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror);
31594                if (id && id !== -1 || styleId && styleId !== -1) {
31595                    styleSheetRuleCb({
31596                        id,
31597                        styleId,
31598                        replaceSync: text
31599                    });
31600                }
31601                return target.apply(thisArg, argumentsList);
31602            })
31603        });
31604    }
31605    const supportedNestedCSSRuleTypes = {};
31606    if (canMonkeyPatchNestedCSSRule("CSSGroupingRule")) {
31607        supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;
31608    } else {
31609        if (canMonkeyPatchNestedCSSRule("CSSMediaRule")) {
31610            supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;
31611        }
31612        if (canMonkeyPatchNestedCSSRule("CSSConditionRule")) {
31613            supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;
31614        }
31615        if (canMonkeyPatchNestedCSSRule("CSSSupportsRule")) {
31616            supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;
31617        }
31618    }
31619    const unmodifiedFunctions = {};
31620    Object.entries(supportedNestedCSSRuleTypes).forEach((param)=>{
31621        let [typeKey, type] = param;
31622        unmodifiedFunctions[typeKey] = {
31623            // eslint-disable-next-line @typescript-eslint/unbound-method
31624            insertRule: type.prototype.insertRule,
31625            // eslint-disable-next-line @typescript-eslint/unbound-method
31626            deleteRule: type.prototype.deleteRule
31627        };
31628        type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {
31629            apply: callbackWrapper((target, thisArg, argumentsList)=>{
31630                const [rule, index] = argumentsList;
31631                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror);
31632                if (id && id !== -1 || styleId && styleId !== -1) {
31633                    styleSheetRuleCb({
31634                        id,
31635                        styleId,
31636                        adds: [
31637                            {
31638                                rule,
31639                                index: [
31640                                    ...getNestedCSSRulePositions(thisArg),
31641                                    index || 0
31642                                ]
31643                            }
31644                        ]
31645                    });
31646                }
31647                return target.apply(thisArg, argumentsList);
31648            })
31649        });
31650        type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {
31651            apply: callbackWrapper((target, thisArg, argumentsList)=>{
31652                const [index] = argumentsList;
31653                const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror);
31654                if (id && id !== -1 || styleId && styleId !== -1) {
31655                    styleSheetRuleCb({
31656                        id,
31657                        styleId,
31658                        removes: [
31659                            {
31660                                index: [
31661                                    ...getNestedCSSRulePositions(thisArg),
31662                                    index
31663                                ]
31664                            }
31665                        ]
31666                    });
31667                }
31668                return target.apply(thisArg, argumentsList);
31669            })
31670        });
31671    });
31672    return callbackWrapper(()=>{
31673        win.CSSStyleSheet.prototype.insertRule = insertRule;
31674        win.CSSStyleSheet.prototype.deleteRule = deleteRule;
31675        replace && (win.CSSStyleSheet.prototype.replace = replace);
31676        replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);
31677        Object.entries(supportedNestedCSSRuleTypes).forEach((param)=>{
31678            let [typeKey, type] = param;
31679            type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;
31680            type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;
31681        });
31682    });
31683}
31684function initAdoptedStyleSheetObserver(param, host) {
31685    let { mirror: mirror2, stylesheetManager } = param;
31686    var _host_defaultView, _host_ownerDocument_defaultView, _host_ownerDocument;
31687    let hostId = null;
31688    if (host.nodeName === "#document") hostId = mirror2.getId(host);
31689    else hostId = mirror2.getId(host.host);
31690    const patchTarget = host.nodeName === "#document" ? (_host_defaultView = host.defaultView) === null || _host_defaultView === void 0 ? void 0 : _host_defaultView.Document : (_host_ownerDocument = host.ownerDocument) === null || _host_ownerDocument === void 0 ? void 0 : (_host_ownerDocument_defaultView = _host_ownerDocument.defaultView) === null || _host_ownerDocument_defaultView === void 0 ? void 0 : _host_ownerDocument_defaultView.ShadowRoot;
31691    const originalPropertyDescriptor = (patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype) ? Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, "adoptedStyleSheets") : void 0;
31692    if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor) return ()=>{};
vendor: 5,166 bytes, lines 31693-31800
31693    Object.defineProperty(host, "adoptedStyleSheets", {
31694        configurable: originalPropertyDescriptor.configurable,
31695        enumerable: originalPropertyDescriptor.enumerable,
31696        get () {
31697            var _originalPropertyDescriptor_get;
31698            return (_originalPropertyDescriptor_get = originalPropertyDescriptor.get) === null || _originalPropertyDescriptor_get === void 0 ? void 0 : _originalPropertyDescriptor_get.call(this);
31699        },
31700        set (sheets) {
31701            var _originalPropertyDescriptor_set;
31702            const result = (_originalPropertyDescriptor_set = originalPropertyDescriptor.set) === null || _originalPropertyDescriptor_set === void 0 ? void 0 : _originalPropertyDescriptor_set.call(this, sheets);
31703            if (hostId !== null && hostId !== -1) {
31704                try {
31705                    stylesheetManager.adoptStyleSheets(sheets, hostId);
31706                } catch (e2) {}
31707            }
31708            return result;
31709        }
31710    });
31711    return callbackWrapper(()=>{
31712        Object.defineProperty(host, "adoptedStyleSheets", {
31713            configurable: originalPropertyDescriptor.configurable,
31714            enumerable: originalPropertyDescriptor.enumerable,
31715            // eslint-disable-next-line @typescript-eslint/unbound-method
31716            get: originalPropertyDescriptor.get,
31717            // eslint-disable-next-line @typescript-eslint/unbound-method
31718            set: originalPropertyDescriptor.set
31719        });
31720    });
31721}
31722function initStyleDeclarationObserver(param, param1) {
31723    let { styleDeclarationCb, mirror: mirror2, ignoreCSSAttributes, stylesheetManager } = param, { win } = param1;
31724    const setProperty = win.CSSStyleDeclaration.prototype.setProperty;
31725    win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {
31726        apply: callbackWrapper((target, thisArg, argumentsList)=>{
31727            var _thisArg_parentRule;
31728            const [property, value, priority] = argumentsList;
31729            if (ignoreCSSAttributes.has(property)) {
31730                return setProperty.apply(thisArg, [
31731                    property,
31732                    value,
31733                    priority
31734                ]);
31735            }
31736            const { id, styleId } = getIdAndStyleId((_thisArg_parentRule = thisArg.parentRule) === null || _thisArg_parentRule === void 0 ? void 0 : _thisArg_parentRule.parentStyleSheet, mirror2, stylesheetManager.styleMirror);
31737            if (id && id !== -1 || styleId && styleId !== -1) {
31738                styleDeclarationCb({
31739                    id,
31740                    styleId,
31741                    set: {
31742                        property,
31743                        value,
31744                        priority
31745                    },
31746                    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
31747                    index: getNestedCSSRulePositions(thisArg.parentRule)
31748                });
31749            }
31750            return target.apply(thisArg, argumentsList);
31751        })
31752    });
31753    const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;
31754    win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {
31755        apply: callbackWrapper((target, thisArg, argumentsList)=>{
31756            var _thisArg_parentRule;
31757            const [property] = argumentsList;
31758            if (ignoreCSSAttributes.has(property)) {
31759                return removeProperty.apply(thisArg, [
31760                    property
31761                ]);
31762            }
31763            const { id, styleId } = getIdAndStyleId((_thisArg_parentRule = thisArg.parentRule) === null || _thisArg_parentRule === void 0 ? void 0 : _thisArg_parentRule.parentStyleSheet, mirror2, stylesheetManager.styleMirror);
31764            if (id && id !== -1 || styleId && styleId !== -1) {
31765                styleDeclarationCb({
31766                    id,
31767                    styleId,
31768                    remove: {
31769                        property
31770                    },
31771                    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
31772                    index: getNestedCSSRulePositions(thisArg.parentRule)
31773                });
31774            }
31775            return target.apply(thisArg, argumentsList);
31776        })
31777    });
31778    return callbackWrapper(()=>{
31779        win.CSSStyleDeclaration.prototype.setProperty = setProperty;
31780        win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;
31781    });
31782}
31783function initMediaInteractionObserver(param) {
31784    let { mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror: mirror2, sampling, doc } = param;
31785    const handler = callbackWrapper((type)=>throttle$1(callbackWrapper((event)=>{
31786            const target = getEventTarget1(event);
31787            if (!target || isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {
31788                return;
31789            }
31790            const { currentTime, volume, muted, playbackRate } = target;
31791            mediaInteractionCb({
31792                type,
31793                id: mirror2.getId(target),
31794                currentTime,
31795                volume,
31796                muted,
31797                playbackRate
31798            });
31799        }), sampling.media || 500));
31800    const handlers = [
vendor: 14,174 bytes, lines 31801-32148
31801        on1("play", handler(MediaInteractions.Play), doc),
31802        on1("pause", handler(MediaInteractions.Pause), doc),
31803        on1("seeked", handler(MediaInteractions.Seeked), doc),
31804        on1("volumechange", handler(MediaInteractions.VolumeChange), doc),
31805        on1("ratechange", handler(MediaInteractions.RateChange), doc)
31806    ];
31807    return callbackWrapper(()=>{
31808        handlers.forEach((h)=>h());
31809    });
31810}
31811function initFontObserver(param) {
31812    let { fontCb, doc } = param;
31813    const win = doc.defaultView;
31814    if (!win) {
31815        return ()=>{};
31816    }
31817    const handlers = [];
31818    const fontMap = /* @__PURE__ */ new WeakMap();
31819    const originalFontFace = win.FontFace;
31820    win.FontFace = function FontFace2(family, source, descriptors) {
31821        const fontFace = new originalFontFace(family, source, descriptors);
31822        fontMap.set(fontFace, {
31823            family,
31824            buffer: typeof source !== "string",
31825            descriptors,
31826            fontSource: typeof source === "string" ? source : JSON.stringify(Array.from(new Uint8Array(source)))
31827        });
31828        return fontFace;
31829    };
31830    const restoreHandler = patch(doc.fonts, "add", function(original) {
31831        return function(fontFace) {
31832            setTimeout$2(callbackWrapper(()=>{
31833                const p = fontMap.get(fontFace);
31834                if (p) {
31835                    fontCb(p);
31836                    fontMap.delete(fontFace);
31837                }
31838            }), 0);
31839            return original.apply(this, [
31840                fontFace
31841            ]);
31842        };
31843    });
31844    handlers.push(()=>{
31845        win.FontFace = originalFontFace;
31846    });
31847    handlers.push(restoreHandler);
31848    return callbackWrapper(()=>{
31849        handlers.forEach((h)=>h());
31850    });
31851}
31852function initSelectionObserver(param) {
31853    const { doc, mirror: mirror2, blockClass, blockSelector, unblockSelector, selectionCb } = param;
31854    let collapsed = true;
31855    const updateSelection = callbackWrapper(()=>{
31856        const selection = doc.getSelection();
31857        if (!selection || collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)) return;
31858        collapsed = selection.isCollapsed || false;
31859        const ranges = [];
31860        const count = selection.rangeCount || 0;
31861        for(let i2 = 0; i2 < count; i2++){
31862            const range = selection.getRangeAt(i2);
31863            const { startContainer, startOffset, endContainer, endOffset } = range;
31864            const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) || isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);
31865            if (blocked) continue;
31866            ranges.push({
31867                start: mirror2.getId(startContainer),
31868                startOffset,
31869                end: mirror2.getId(endContainer),
31870                endOffset
31871            });
31872        }
31873        selectionCb({
31874            ranges
31875        });
31876    });
31877    updateSelection();
31878    return on1("selectionchange", updateSelection);
31879}
31880function initCustomElementObserver(param) {
31881    let { doc, customElementCb } = param;
31882    const win = doc.defaultView;
31883    if (!win || !win.customElements) return ()=>{};
31884    const restoreHandler = patch(win.customElements, "define", function(original) {
31885        return function(name, constructor, options) {
31886            try {
31887                customElementCb({
31888                    define: {
31889                        name
31890                    }
31891                });
31892            } catch (e2) {}
31893            return original.apply(this, [
31894                name,
31895                constructor,
31896                options
31897            ]);
31898        };
31899    });
31900    return restoreHandler;
31901}
31902function initObservers(o2) {
31903    let _hooks = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
31904    const currentWindow = o2.doc.defaultView;
31905    if (!currentWindow) {
31906        return ()=>{};
31907    }
31908    let mutationObserver;
31909    if (o2.recordDOM) {
31910        mutationObserver = initMutationObserver(o2, o2.doc);
31911    }
31912    const mousemoveHandler = initMoveObserver(o2);
31913    const mouseInteractionHandler = initMouseInteractionObserver(o2);
31914    const scrollHandler = initScrollObserver(o2);
31915    const viewportResizeHandler = initViewportResizeObserver(o2, {
31916        win: currentWindow
31917    });
31918    const inputHandler = initInputObserver(o2);
31919    const mediaInteractionHandler = initMediaInteractionObserver(o2);
31920    let styleSheetObserver = ()=>{};
31921    let adoptedStyleSheetObserver = ()=>{};
31922    let styleDeclarationObserver = ()=>{};
31923    let fontObserver = ()=>{};
31924    if (o2.recordDOM) {
31925        styleSheetObserver = initStyleSheetObserver(o2, {
31926            win: currentWindow
31927        });
31928        adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);
31929        styleDeclarationObserver = initStyleDeclarationObserver(o2, {
31930            win: currentWindow
31931        });
31932        if (o2.collectFonts) {
31933            fontObserver = initFontObserver(o2);
31934        }
31935    }
31936    const selectionObserver = initSelectionObserver(o2);
31937    const customElementObserver = initCustomElementObserver(o2);
31938    const pluginHandlers = [];
31939    for (const plugin of o2.plugins){
31940        pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));
31941    }
31942    return callbackWrapper(()=>{
31943        mutationBuffers.forEach((b)=>b.reset());
31944        mutationObserver === null || mutationObserver === void 0 ? void 0 : mutationObserver.disconnect();
31945        mousemoveHandler();
31946        mouseInteractionHandler();
31947        scrollHandler();
31948        viewportResizeHandler();
31949        inputHandler();
31950        mediaInteractionHandler();
31951        styleSheetObserver();
31952        adoptedStyleSheetObserver();
31953        styleDeclarationObserver();
31954        fontObserver();
31955        selectionObserver();
31956        customElementObserver();
31957        pluginHandlers.forEach((h)=>h());
31958    });
31959}
31960function hasNestedCSSRule(prop) {
31961    return typeof window[prop] !== "undefined";
31962}
31963function canMonkeyPatchNestedCSSRule(prop) {
31964    return Boolean(typeof window[prop] !== "undefined" && // Note: Generally, this check _shouldn't_ be necessary
31965    // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here
31966    window[prop].prototype && "insertRule" in window[prop].prototype && "deleteRule" in window[prop].prototype);
31967}
31968class CrossOriginIframeMirror {
31969    getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {
31970        const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);
31971        const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);
31972        let id = idToRemoteIdMap.get(remoteId);
31973        if (!id) {
31974            id = this.generateIdFn();
31975            idToRemoteIdMap.set(remoteId, id);
31976            remoteIdToIdMap.set(id, remoteId);
31977        }
31978        return id;
31979    }
31980    getIds(iframe, remoteId) {
31981        const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);
31982        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);
31983        return remoteId.map((id)=>this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));
31984    }
31985    getRemoteId(iframe, id, map) {
31986        const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);
31987        if (typeof id !== "number") return id;
31988        const remoteId = remoteIdToIdMap.get(id);
31989        if (!remoteId) return -1;
31990        return remoteId;
31991    }
31992    getRemoteIds(iframe, ids) {
31993        const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);
31994        return ids.map((id)=>this.getRemoteId(iframe, id, remoteIdToIdMap));
31995    }
31996    reset(iframe) {
31997        if (!iframe) {
31998            this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();
31999            this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();
32000            return;
32001        }
32002        this.iframeIdToRemoteIdMap.delete(iframe);
32003        this.iframeRemoteIdToIdMap.delete(iframe);
32004    }
32005    getIdToRemoteIdMap(iframe) {
32006        let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);
32007        if (!idToRemoteIdMap) {
32008            idToRemoteIdMap = /* @__PURE__ */ new Map();
32009            this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);
32010        }
32011        return idToRemoteIdMap;
32012    }
32013    getRemoteIdToIdMap(iframe) {
32014        let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);
32015        if (!remoteIdToIdMap) {
32016            remoteIdToIdMap = /* @__PURE__ */ new Map();
32017            this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);
32018        }
32019        return remoteIdToIdMap;
32020    }
32021    constructor(generateIdFn){
32022        this.generateIdFn = generateIdFn;
32023        this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();
32024        this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();
32025    }
32026}
32027class IframeManagerNoop {
32028    addIframe() {}
32029    addLoadListener() {}
32030    attachIframe() {}
32031    constructor(){
32032        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);
32033        this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();
32034    }
32035}
32036class IframeManager {
32037    addIframe(iframeEl) {
32038        this.iframes.set(iframeEl, true);
32039        const contentWindow = getIFrameContentWindow(iframeEl);
32040        if (contentWindow) this.crossOriginIframeMap.set(contentWindow, iframeEl);
32041    }
32042    addLoadListener(cb) {
32043        this.loadListener = cb;
32044    }
32045    attachIframe(iframeEl, childSn) {
32046        var _this_loadListener, _this;
32047        this.mutationCb({
32048            adds: [
32049                {
32050                    parentId: this.mirror.getId(iframeEl),
32051                    nextId: null,
32052                    node: childSn
32053                }
32054            ],
32055            removes: [],
32056            texts: [],
32057            attributes: [],
32058            isAttachIframe: true
32059        });
32060        if (this.recordCrossOriginIframes) {
32061            var _getIFrameContentWindow;
32062            (_getIFrameContentWindow = getIFrameContentWindow(iframeEl)) === null || _getIFrameContentWindow === void 0 ? void 0 : _getIFrameContentWindow.addEventListener("message", this.handleMessage.bind(this));
32063        }
32064        (_this_loadListener = (_this = this).loadListener) === null || _this_loadListener === void 0 ? void 0 : _this_loadListener.call(_this, iframeEl);
32065        const iframeDoc = getIFrameContentDocument(iframeEl);
32066        if (iframeDoc && iframeDoc.adoptedStyleSheets && iframeDoc.adoptedStyleSheets.length > 0) this.stylesheetManager.adoptStyleSheets(iframeDoc.adoptedStyleSheets, this.mirror.getId(iframeDoc));
32067    }
32068    handleMessage(message) {
32069        const crossOriginMessageEvent = message;
32070        if (crossOriginMessageEvent.data.type !== "rrweb" || // To filter out the rrweb messages which are forwarded by some sites.
32071        crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin) return;
32072        const iframeSourceWindow = message.source;
32073        if (!iframeSourceWindow) return;
32074        const iframeEl = this.crossOriginIframeMap.get(message.source);
32075        if (!iframeEl) return;
32076        const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);
32077        if (transformedEvent) this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);
32078    }
32079    transformCrossOriginEvent(iframeEl, e2) {
32080        switch(e2.type){
32081            case EventType.FullSnapshot:
32082                {
32083                    this.crossOriginIframeMirror.reset(iframeEl);
32084                    this.crossOriginIframeStyleMirror.reset(iframeEl);
32085                    this.replaceIdOnNode(e2.data.node, iframeEl);
32086                    const rootId = e2.data.node.id;
32087                    this.crossOriginIframeRootIdMap.set(iframeEl, rootId);
32088                    this.patchRootIdOnNode(e2.data.node, rootId);
32089                    return {
32090                        timestamp: e2.timestamp,
32091                        type: EventType.IncrementalSnapshot,
32092                        data: {
32093                            source: IncrementalSource.Mutation,
32094                            adds: [
32095                                {
32096                                    parentId: this.mirror.getId(iframeEl),
32097                                    nextId: null,
32098                                    node: e2.data.node
32099                                }
32100                            ],
32101                            removes: [],
32102                            texts: [],
32103                            attributes: [],
32104                            isAttachIframe: true
32105                        }
32106                    };
32107                }
32108            case EventType.Meta:
32109            case EventType.Load:
32110            case EventType.DomContentLoaded:
32111                {
32112                    return false;
32113                }
32114            case EventType.Plugin:
32115                {
32116                    return e2;
32117                }
32118            case EventType.Custom:
32119                {
32120                    this.replaceIds(e2.data.payload, iframeEl, [
32121                        "id",
32122                        "parentId",
32123                        "previousId",
32124                        "nextId"
32125                    ]);
32126                    return e2;
32127                }
32128            case EventType.IncrementalSnapshot:
32129                {
32130                    switch(e2.data.source){
32131                        case IncrementalSource.Mutation:
32132                            {
32133                                e2.data.adds.forEach((n2)=>{
32134                                    this.replaceIds(n2, iframeEl, [
32135                                        "parentId",
32136                                        "nextId",
32137                                        "previousId"
32138                                    ]);
32139                                    this.replaceIdOnNode(n2.node, iframeEl);
32140                                    const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);
32141                                    rootId && this.patchRootIdOnNode(n2.node, rootId);
32142                                });
32143                                e2.data.removes.forEach((n2)=>{
32144                                    this.replaceIds(n2, iframeEl, [
32145                                        "parentId",
32146                                        "id"
32147                                    ]);
32148                                });
vendor: 4,780 bytes, lines 32149-32255
32149                                e2.data.attributes.forEach((n2)=>{
32150                                    this.replaceIds(n2, iframeEl, [
32151                                        "id"
32152                                    ]);
32153                                });
32154                                e2.data.texts.forEach((n2)=>{
32155                                    this.replaceIds(n2, iframeEl, [
32156                                        "id"
32157                                    ]);
32158                                });
32159                                return e2;
32160                            }
32161                        case IncrementalSource.Drag:
32162                        case IncrementalSource.TouchMove:
32163                        case IncrementalSource.MouseMove:
32164                            {
32165                                e2.data.positions.forEach((p)=>{
32166                                    this.replaceIds(p, iframeEl, [
32167                                        "id"
32168                                    ]);
32169                                });
32170                                return e2;
32171                            }
32172                        case IncrementalSource.ViewportResize:
32173                            {
32174                                return false;
32175                            }
32176                        case IncrementalSource.MediaInteraction:
32177                        case IncrementalSource.MouseInteraction:
32178                        case IncrementalSource.Scroll:
32179                        case IncrementalSource.CanvasMutation:
32180                        case IncrementalSource.Input:
32181                            {
32182                                this.replaceIds(e2.data, iframeEl, [
32183                                    "id"
32184                                ]);
32185                                return e2;
32186                            }
32187                        case IncrementalSource.StyleSheetRule:
32188                        case IncrementalSource.StyleDeclaration:
32189                            {
32190                                this.replaceIds(e2.data, iframeEl, [
32191                                    "id"
32192                                ]);
32193                                this.replaceStyleIds(e2.data, iframeEl, [
32194                                    "styleId"
32195                                ]);
32196                                return e2;
32197                            }
32198                        case IncrementalSource.Font:
32199                            {
32200                                return e2;
32201                            }
32202                        case IncrementalSource.Selection:
32203                            {
32204                                e2.data.ranges.forEach((range)=>{
32205                                    this.replaceIds(range, iframeEl, [
32206                                        "start",
32207                                        "end"
32208                                    ]);
32209                                });
32210                                return e2;
32211                            }
32212                        case IncrementalSource.AdoptedStyleSheet:
32213                            {
32214                                var _e2_data_styles;
32215                                this.replaceIds(e2.data, iframeEl, [
32216                                    "id"
32217                                ]);
32218                                this.replaceStyleIds(e2.data, iframeEl, [
32219                                    "styleIds"
32220                                ]);
32221                                (_e2_data_styles = e2.data.styles) === null || _e2_data_styles === void 0 ? void 0 : _e2_data_styles.forEach((style)=>{
32222                                    this.replaceStyleIds(style, iframeEl, [
32223                                        "styleId"
32224                                    ]);
32225                                });
32226                                return e2;
32227                            }
32228                    }
32229                }
32230        }
32231        return false;
32232    }
32233    replace(iframeMirror, obj, iframeEl, keys) {
32234        for (const key of keys){
32235            if (!Array.isArray(obj[key]) && typeof obj[key] !== "number") continue;
32236            if (Array.isArray(obj[key])) {
32237                obj[key] = iframeMirror.getIds(iframeEl, obj[key]);
32238            } else {
32239                obj[key] = iframeMirror.getId(iframeEl, obj[key]);
32240            }
32241        }
32242        return obj;
32243    }
32244    replaceIds(obj, iframeEl, keys) {
32245        return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);
32246    }
32247    replaceStyleIds(obj, iframeEl, keys) {
32248        return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);
32249    }
32250    replaceIdOnNode(node, iframeEl) {
32251        this.replaceIds(node, iframeEl, [
32252            "id",
32253            "rootId"
32254        ]);
32255        if ("childNodes" in node) {
vendor: 6,904 bytes, lines 32256-32432
32256            node.childNodes.forEach((child)=>{
32257                this.replaceIdOnNode(child, iframeEl);
32258            });
32259        }
32260    }
32261    patchRootIdOnNode(node, rootId) {
32262        if (node.type !== NodeType$1.Document && !node.rootId) node.rootId = rootId;
32263        if ("childNodes" in node) {
32264            node.childNodes.forEach((child)=>{
32265                this.patchRootIdOnNode(child, rootId);
32266            });
32267        }
32268    }
32269    constructor(options){
32270        this.iframes = /* @__PURE__ */ new WeakMap();
32271        this.crossOriginIframeMap = /* @__PURE__ */ new WeakMap();
32272        this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);
32273        this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();
32274        this.mutationCb = options.mutationCb;
32275        this.wrappedEmit = options.wrappedEmit;
32276        this.stylesheetManager = options.stylesheetManager;
32277        this.recordCrossOriginIframes = options.recordCrossOriginIframes;
32278        this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));
32279        this.mirror = options.mirror;
32280        if (this.recordCrossOriginIframes) {
32281            window.addEventListener("message", this.handleMessage.bind(this));
32282        }
32283    }
32284}
32285class ShadowDomManagerNoop {
32286    init() {}
32287    addShadowRoot() {}
32288    observeAttachShadow() {}
32289    reset() {}
32290}
32291class ShadowDomManager {
32292    init() {
32293        this.reset();
32294        this.patchAttachShadow(Element, document);
32295    }
32296    addShadowRoot(shadowRoot, doc) {
32297        if (!isNativeShadowDom(shadowRoot)) return;
32298        if (this.shadowDoms.has(shadowRoot)) return;
32299        this.shadowDoms.add(shadowRoot);
32300        this.bypassOptions.canvasManager.addShadowRoot(shadowRoot);
32301        const observer = initMutationObserver({
32302            ...this.bypassOptions,
32303            doc,
32304            mutationCb: this.mutationCb,
32305            mirror: this.mirror,
32306            shadowDomManager: this
32307        }, shadowRoot);
32308        this.restoreHandlers.push(()=>observer.disconnect());
32309        this.restoreHandlers.push(initScrollObserver({
32310            ...this.bypassOptions,
32311            scrollCb: this.scrollCb,
32312            // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813
32313            // scroll is not allowed to pass the boundary, so we need to listen the shadow document
32314            doc: shadowRoot,
32315            mirror: this.mirror
32316        }));
32317        setTimeout$2(()=>{
32318            if (shadowRoot.adoptedStyleSheets && shadowRoot.adoptedStyleSheets.length > 0) this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));
32319            this.restoreHandlers.push(initAdoptedStyleSheetObserver({
32320                mirror: this.mirror,
32321                stylesheetManager: this.bypassOptions.stylesheetManager
32322            }, shadowRoot));
32323        }, 0);
32324    }
32325    /**
32326   * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.
32327   */ observeAttachShadow(iframeElement) {
32328        const iframeDoc = getIFrameContentDocument(iframeElement);
32329        const iframeWindow = getIFrameContentWindow(iframeElement);
32330        if (!iframeDoc || !iframeWindow) return;
32331        this.patchAttachShadow(iframeWindow.Element, iframeDoc);
32332    }
32333    /**
32334   * Patch 'attachShadow' to observe newly added shadow doms.
32335   */ patchAttachShadow(element, doc) {
32336        const manager = this;
32337        this.restoreHandlers.push(patch(element.prototype, "attachShadow", function(original) {
32338            return function(option) {
32339                const shadowRoot = original.call(this, option);
32340                if (this.shadowRoot && inDom(this)) manager.addShadowRoot(this.shadowRoot, doc);
32341                return shadowRoot;
32342            };
32343        }));
32344    }
32345    reset() {
32346        this.restoreHandlers.forEach((handler)=>{
32347            try {
32348                handler();
32349            } catch (e2) {}
32350        });
32351        this.restoreHandlers = [];
32352        this.shadowDoms = /* @__PURE__ */ new WeakSet();
32353        this.bypassOptions.canvasManager.resetShadowRoots();
32354    }
32355    constructor(options){
32356        this.shadowDoms = /* @__PURE__ */ new WeakSet();
32357        this.restoreHandlers = [];
32358        this.mutationCb = options.mutationCb;
32359        this.scrollCb = options.scrollCb;
32360        this.bypassOptions = options.bypassOptions;
32361        this.mirror = options.mirror;
32362        this.init();
32363    }
32364}
32365class StylesheetManager {
32366    attachLinkElement(linkEl, childSn) {
32367        if ("_cssText" in childSn.attributes) this.mutationCb({
32368            adds: [],
32369            removes: [],
32370            texts: [],
32371            attributes: [
32372                {
32373                    id: childSn.id,
32374                    attributes: childSn.attributes
32375                }
32376            ]
32377        });
32378        this.trackLinkElement(linkEl);
32379    }
32380    trackLinkElement(linkEl) {
32381        if (this.trackedLinkElements.has(linkEl)) return;
32382        this.trackedLinkElements.add(linkEl);
32383        this.trackStylesheetInLinkElement(linkEl);
32384    }
32385    adoptStyleSheets(sheets, hostId) {
32386        if (sheets.length === 0) return;
32387        const adoptedStyleSheetData = {
32388            id: hostId,
32389            styleIds: []
32390        };
32391        const styles = [];
32392        for (const sheet of sheets){
32393            let styleId;
32394            if (!this.styleMirror.has(sheet)) {
32395                styleId = this.styleMirror.add(sheet);
32396                styles.push({
32397                    styleId,
32398                    rules: Array.from(sheet.rules || CSSRule, (r2, index)=>({
32399                            rule: stringifyRule(r2),
32400                            index
32401                        }))
32402                });
32403            } else styleId = this.styleMirror.getId(sheet);
32404            adoptedStyleSheetData.styleIds.push(styleId);
32405        }
32406        if (styles.length > 0) adoptedStyleSheetData.styles = styles;
32407        this.adoptedStyleSheetCb(adoptedStyleSheetData);
32408    }
32409    reset() {
32410        this.styleMirror.reset();
32411        this.trackedLinkElements = /* @__PURE__ */ new WeakSet();
32412    }
32413    // TODO: take snapshot on stylesheet reload by applying event listener
32414    trackStylesheetInLinkElement(_linkEl) {}
32415    constructor(options){
32416        this.trackedLinkElements = /* @__PURE__ */ new WeakSet();
32417        this.styleMirror = new StyleSheetMirror();
32418        this.mutationCb = options.mutationCb;
32419        this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;
32420    }
32421}
32422class ProcessedNodeManager {
32423    inOtherBuffer(node, thisBuffer) {
32424        const buffers = this.nodeMap.get(node);
32425        return buffers && Array.from(buffers).some((buffer)=>buffer !== thisBuffer);
32426    }
32427    add(node, buffer) {
32428        if (!this.active) {
32429            this.active = true;
32430            onRequestAnimationFrame(()=>{
32431                this.nodeMap = /* @__PURE__ */ new WeakMap();
32432                this.active = false;
32433            });
32434        }
32435        this.nodeMap.set(node, (this.nodeMap.get(node) || /* @__PURE__ */ new Set()).add(buffer));
32436    }
32437    destroy() {}
32438    constructor(){
32439        this.nodeMap = /* @__PURE__ */ new WeakMap();
32440        this.active = false;
32441    }
32442}
32443let wrappedEmit;
32444let _takeFullSnapshot;
32445try {
32446    if (Array.from([
32447        1
32448    ], (x)=>x * 2)[0] !== 2) {
32449        var _cleanFrame_contentWindow;
32450        const cleanFrame = document.createElement("iframe");
32451        document.body.appendChild(cleanFrame);
32452        Array.from = ((_cleanFrame_contentWindow = cleanFrame.contentWindow) === null || _cleanFrame_contentWindow === void 0 ? void 0 : _cleanFrame_contentWindow.Array.from) || Array.from;
32453        document.body.removeChild(cleanFrame);
32454    }
32455} catch (err) {
32456    console.debug("Unable to override Array.from", err);
32457}
32458const mirror = createMirror();
32459function record() {
32460    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
32461    const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = "rr-block", blockSelector = null, unblockSelector = null, ignoreClass = "rr-ignore", ignoreSelector = null, maskAllText = false, maskTextClass = "rr-mask", unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === "DOMContentLoaded" ? options.recordAfter : "load", userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = ()=>false, ignoreCSSAttributes = /* @__PURE__ */ new Set([]), errorHandler, onMutation, getCanvasManager } = options;
32462    registerErrorHandler(errorHandler);
32463    const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;
32464    let passEmitsToParent = false;
32465    if (!inEmittingFrame) {
32466        try {
32467            if (window.parent.document) {
32468                passEmitsToParent = false;
32469            }
32470        } catch (e2) {
32471            passEmitsToParent = true;
32472        }
32473    }
32474    if (inEmittingFrame && !emit) {
32475        throw new Error("emit function is required");
32476    }
32477    if (!inEmittingFrame && !passEmitsToParent) {
32478        return ()=>{};
32479    }
32480    if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {
32481        sampling.mousemove = mousemoveWait;
32482    }
32483    mirror.reset();
32484    const maskInputOptions = maskAllInputs === true ? {
32485        color: true,
32486        date: true,
32487        "datetime-local": true,
32488        email: true,
32489        month: true,
32490        number: true,
32491        range: true,
32492        search: true,
32493        tel: true,
32494        text: true,
32495        time: true,
32496        url: true,
32497        week: true,
32498        textarea: true,
32499        select: true,
32500        radio: true,
32501        checkbox: true
32502    } : _maskInputOptions !== void 0 ? _maskInputOptions : {};
32503    const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === "all" ? {
32504        script: true,
32505        comment: true,
32506        headFavicon: true,
32507        headWhitespace: true,
32508        headMetaSocial: true,
32509        headMetaRobots: true,
32510        headMetaHttpEquiv: true,
32511        headMetaVerification: true,
32512        // the following are off for slimDOMOptions === true,
32513        // as they destroy some (hidden) info:
32514        headMetaAuthorship: _slimDOMOptions === "all",
32515        headMetaDescKeywords: _slimDOMOptions === "all"
32516    } : _slimDOMOptions ? _slimDOMOptions : {};
32517    polyfill();
32518    let lastFullSnapshotEvent;
32519    let incrementalSnapshotCount = 0;
32520    const eventProcessor = (e2)=>{
32521        for (const plugin of plugins || []){
32522            if (plugin.eventProcessor) {
32523                e2 = plugin.eventProcessor(e2);
32524            }
32525        }
32526        if (packFn && // Disable packing events which will be emitted to parent frames.
32527        !passEmitsToParent) {
32528            e2 = packFn(e2);
32529        }
32530        return e2;
32531    };
32532    wrappedEmit = (r2, isCheckout)=>{
32533        var _mutationBuffers_;
32534        const e2 = r2;
32535        e2.timestamp = nowTimestamp();
32536        if (((_mutationBuffers_ = mutationBuffers[0]) === null || _mutationBuffers_ === void 0 ? void 0 : _mutationBuffers_.isFrozen()) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {
vendor: 4,392 bytes, lines 32537-32659
32537            mutationBuffers.forEach((buf)=>buf.unfreeze());
32538        }
32539        if (inEmittingFrame) {
32540            emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e2), isCheckout);
32541        } else if (passEmitsToParent) {
32542            const message = {
32543                type: "rrweb",
32544                event: eventProcessor(e2),
32545                origin: window.location.origin,
32546                isCheckout
32547            };
32548            window.parent.postMessage(message, "*");
32549        }
32550        if (e2.type === EventType.FullSnapshot) {
32551            lastFullSnapshotEvent = e2;
32552            incrementalSnapshotCount = 0;
32553        } else if (e2.type === EventType.IncrementalSnapshot) {
32554            if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {
32555                return;
32556            }
32557            incrementalSnapshotCount++;
32558            const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;
32559            const exceedTime = checkoutEveryNms && lastFullSnapshotEvent && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;
32560            if (exceedCount || exceedTime) {
32561                takeFullSnapshot2(true);
32562            }
32563        }
32564    };
32565    const wrappedMutationEmit = (m)=>{
32566        wrappedEmit({
32567            type: EventType.IncrementalSnapshot,
32568            data: {
32569                source: IncrementalSource.Mutation,
32570                ...m
32571            }
32572        });
32573    };
32574    const wrappedScrollEmit = (p)=>wrappedEmit({
32575            type: EventType.IncrementalSnapshot,
32576            data: {
32577                source: IncrementalSource.Scroll,
32578                ...p
32579            }
32580        });
32581    const wrappedCanvasMutationEmit = (p)=>wrappedEmit({
32582            type: EventType.IncrementalSnapshot,
32583            data: {
32584                source: IncrementalSource.CanvasMutation,
32585                ...p
32586            }
32587        });
32588    const wrappedAdoptedStyleSheetEmit = (a2)=>wrappedEmit({
32589            type: EventType.IncrementalSnapshot,
32590            data: {
32591                source: IncrementalSource.AdoptedStyleSheet,
32592                ...a2
32593            }
32594        });
32595    const stylesheetManager = new StylesheetManager({
32596        mutationCb: wrappedMutationEmit,
32597        adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit
32598    });
32599    const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === "boolean" && __RRWEB_EXCLUDE_IFRAME__ ? new IframeManagerNoop() : new IframeManager({
32600        mirror,
32601        mutationCb: wrappedMutationEmit,
32602        stylesheetManager,
32603        recordCrossOriginIframes,
32604        wrappedEmit
32605    });
32606    for (const plugin of plugins || []){
32607        if (plugin.getMirror) plugin.getMirror({
32608            nodeMirror: mirror,
32609            crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,
32610            crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror
32611        });
32612    }
32613    const processedNodeManager = new ProcessedNodeManager();
32614    const canvasManager = _getCanvasManager(getCanvasManager, {
32615        mirror,
32616        win: window,
32617        mutationCb: (p)=>wrappedEmit({
32618                type: EventType.IncrementalSnapshot,
32619                data: {
32620                    source: IncrementalSource.CanvasMutation,
32621                    ...p
32622                }
32623            }),
32624        recordCanvas,
32625        blockClass,
32626        blockSelector,
32627        unblockSelector,
32628        maxCanvasSize,
32629        sampling: sampling["canvas"],
32630        dataURLOptions,
32631        errorHandler
32632    });
32633    const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === "boolean" && __RRWEB_EXCLUDE_SHADOW_DOM__ ? new ShadowDomManagerNoop() : new ShadowDomManager({
32634        mutationCb: wrappedMutationEmit,
32635        scrollCb: wrappedScrollEmit,
32636        bypassOptions: {
32637            onMutation,
32638            blockClass,
32639            blockSelector,
32640            unblockSelector,
32641            maskAllText,
32642            maskTextClass,
32643            unmaskTextClass,
32644            maskTextSelector,
32645            unmaskTextSelector,
32646            inlineStylesheet,
32647            maskInputOptions,
32648            dataURLOptions,
32649            maskAttributeFn,
32650            maskTextFn,
32651            maskInputFn,
32652            recordCanvas,
32653            inlineImages,
32654            sampling,
32655            slimDOMOptions,
32656            iframeManager,
32657            stylesheetManager,
32658            canvasManager,
32659            keepIframeSrcFn,
32660            processedNodeManager,
32661            ignoreCSSAttributes
32662        },
32663        mirror
32664    });
32665    const takeFullSnapshot2 = function() {
32666        let isCheckout = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
32667        if (!recordDOM) {
32668            return;
32669        }
32670        wrappedEmit({
32671            type: EventType.Meta,
32672            data: {
32673                href: window.location.href,
32674                width: getWindowWidth(),
32675                height: getWindowHeight()
32676            }
32677        }, isCheckout);
32678        stylesheetManager.reset();
32679        shadowDomManager.init();
32680        mutationBuffers.forEach((buf)=>buf.lock());
32681        const node = snapshot(document, {
32682            mirror,
32683            blockClass,
32684            blockSelector,
32685            unblockSelector,
32686            maskAllText,
32687            maskTextClass,
32688            unmaskTextClass,
32689            maskTextSelector,
32690            unmaskTextSelector,
32691            inlineStylesheet,
32692            maskAllInputs: maskInputOptions,
32693            maskAttributeFn,
32694            maskInputFn,
32695            maskTextFn,
32696            slimDOM: slimDOMOptions,
32697            dataURLOptions,
32698            recordCanvas,
32699            inlineImages,
32700            onSerialize: (n2)=>{
32701                if (isSerializedIframe(n2, mirror)) {
32702                    iframeManager.addIframe(n2);
32703                }
32704                if (isSerializedStylesheet(n2, mirror)) {
32705                    stylesheetManager.trackLinkElement(n2);
32706                }
32707                if (hasShadowRoot(n2)) {
32708                    shadowDomManager.addShadowRoot(n2.shadowRoot, document);
32709                }
32710            },
32711            onIframeLoad: (iframe, childSn)=>{
32712                iframeManager.attachIframe(iframe, childSn);
32713                const contentWindow = getIFrameContentWindow(iframe);
32714                if (contentWindow) {
32715                    canvasManager.addWindow(contentWindow);
32716                }
32717                shadowDomManager.observeAttachShadow(iframe);
32718            },
32719            onStylesheetLoad: (linkEl, childSn)=>{
32720                stylesheetManager.attachLinkElement(linkEl, childSn);
32721            },
32722            onBlockedImageLoad: (_imageEl, serializedNode, param)=>{
32723                let { width, height } = param;
32724                wrappedMutationEmit({
32725                    adds: [],
32726                    removes: [],
32727                    texts: [],
32728                    attributes: [
32729                        {
32730                            id: serializedNode.id,
32731                            attributes: {
32732                                style: {
32733                                    width: "".concat(width, "px"),
32734                                    height: "".concat(height, "px")
32735                                }
32736                            }
32737                        }
32738                    ]
32739                });
32740            },
32741            keepIframeSrcFn,
32742            ignoreCSSAttributes
32743        });
32744        if (!node) {
32745            return console.warn("Failed to snapshot the document");
32746        }
32747        wrappedEmit({
32748            type: EventType.FullSnapshot,
32749            data: {
32750                node,
32751                initialOffset: getWindowScroll(window)
32752            }
32753        });
32754        mutationBuffers.forEach((buf)=>buf.unlock());
32755        if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));
32756    };
32757    _takeFullSnapshot = takeFullSnapshot2;
32758    try {
32759        const handlers = [];
32760        const observe = (doc)=>{
32761            var _plugins_filter;
32762            return callbackWrapper(initObservers)({
32763                onMutation,
32764                mutationCb: wrappedMutationEmit,
32765                mousemoveCb: (positions, source)=>wrappedEmit({
32766                        type: EventType.IncrementalSnapshot,
32767                        data: {
32768                            source,
32769                            positions
32770                        }
32771                    }),
32772                mouseInteractionCb: (d)=>wrappedEmit({
32773                        type: EventType.IncrementalSnapshot,
32774                        data: {
32775                            source: IncrementalSource.MouseInteraction,
32776                            ...d
32777                        }
32778                    }),
32779                scrollCb: wrappedScrollEmit,
32780                viewportResizeCb: (d)=>wrappedEmit({
32781                        type: EventType.IncrementalSnapshot,
32782                        data: {
32783                            source: IncrementalSource.ViewportResize,
32784                            ...d
32785                        }
32786                    }),
32787                inputCb: (v2)=>wrappedEmit({
32788                        type: EventType.IncrementalSnapshot,
32789                        data: {
32790                            source: IncrementalSource.Input,
32791                            ...v2
32792                        }
32793                    }),
32794                mediaInteractionCb: (p)=>wrappedEmit({
32795                        type: EventType.IncrementalSnapshot,
32796                        data: {
32797                            source: IncrementalSource.MediaInteraction,
32798                            ...p
32799                        }
32800                    }),
32801                styleSheetRuleCb: (r2)=>wrappedEmit({
32802                        type: EventType.IncrementalSnapshot,
32803                        data: {
32804                            source: IncrementalSource.StyleSheetRule,
32805                            ...r2
32806                        }
32807                    }),
32808                styleDeclarationCb: (r2)=>wrappedEmit({
32809                        type: EventType.IncrementalSnapshot,
32810                        data: {
32811                            source: IncrementalSource.StyleDeclaration,
32812                            ...r2
32813                        }
32814                    }),
32815                canvasMutationCb: wrappedCanvasMutationEmit,
32816                fontCb: (p)=>wrappedEmit({
32817                        type: EventType.IncrementalSnapshot,
32818                        data: {
32819                            source: IncrementalSource.Font,
32820                            ...p
32821                        }
32822                    }),
32823                selectionCb: (p)=>{
32824                    wrappedEmit({
32825                        type: EventType.IncrementalSnapshot,
32826                        data: {
32827                            source: IncrementalSource.Selection,
32828                            ...p
32829                        }
32830                    });
32831                },
32832                customElementCb: (c2)=>{
32833                    wrappedEmit({
32834                        type: EventType.IncrementalSnapshot,
32835                        data: {
32836                            source: IncrementalSource.CustomElement,
32837                            ...c2
32838                        }
32839                    });
32840                },
32841                blockClass,
32842                ignoreClass,
32843                ignoreSelector,
32844                maskAllText,
32845                maskTextClass,
32846                unmaskTextClass,
32847                maskTextSelector,
32848                unmaskTextSelector,
32849                maskInputOptions,
32850                inlineStylesheet,
32851                sampling,
32852                recordDOM,
32853                recordCanvas,
32854                inlineImages,
vendor: 10,116 bytes, lines 32855-33133
32855                userTriggeredOnInput,
32856                collectFonts,
32857                doc,
32858                maskAttributeFn,
32859                maskInputFn,
32860                maskTextFn,
32861                keepIframeSrcFn,
32862                blockSelector,
32863                unblockSelector,
32864                slimDOMOptions,
32865                dataURLOptions,
32866                mirror,
32867                iframeManager,
32868                stylesheetManager,
32869                shadowDomManager,
32870                processedNodeManager,
32871                canvasManager,
32872                ignoreCSSAttributes,
32873                plugins: (plugins === null || plugins === void 0 ? void 0 : (_plugins_filter = plugins.filter((p)=>p.observer)) === null || _plugins_filter === void 0 ? void 0 : _plugins_filter.map((p)=>({
32874                        observer: p.observer,
32875                        options: p.options,
32876                        callback: (payload)=>wrappedEmit({
32877                                type: EventType.Plugin,
32878                                data: {
32879                                    plugin: p.name,
32880                                    payload
32881                                }
32882                            })
32883                    }))) || []
32884            }, {});
32885        };
32886        iframeManager.addLoadListener((iframeEl)=>{
32887            try {
32888                handlers.push(observe(iframeEl.contentDocument));
32889            } catch (error) {
32890                console.warn(error);
32891            }
32892        });
32893        const init = ()=>{
32894            takeFullSnapshot2();
32895            handlers.push(observe(document));
32896        };
32897        if (document.readyState === "interactive" || document.readyState === "complete") {
32898            init();
32899        } else {
32900            handlers.push(on1("DOMContentLoaded", ()=>{
32901                wrappedEmit({
32902                    type: EventType.DomContentLoaded,
32903                    data: {}
32904                });
32905                if (recordAfter === "DOMContentLoaded") init();
32906            }));
32907            handlers.push(on1("load", ()=>{
32908                wrappedEmit({
32909                    type: EventType.Load,
32910                    data: {}
32911                });
32912                if (recordAfter === "load") init();
32913            }, window));
32914        }
32915        return ()=>{
32916            handlers.forEach((h)=>h());
32917            processedNodeManager.destroy();
32918            _takeFullSnapshot = void 0;
32919            unregisterErrorHandler();
32920        };
32921    } catch (error) {
32922        console.warn(error);
32923    }
32924}
32925function takeFullSnapshot(isCheckout) {
32926    if (!_takeFullSnapshot) {
32927        throw new Error("please take full snapshot after start recording");
32928    }
32929    _takeFullSnapshot(isCheckout);
32930}
32931record.mirror = mirror;
32932record.takeFullSnapshot = takeFullSnapshot;
32933function _getCanvasManager(getCanvasManagerFn, options) {
32934    try {
32935        return getCanvasManagerFn ? getCanvasManagerFn(options) : new CanvasManagerNoop();
32936    } catch (unused) {
32937        console.warn("Unable to initialize CanvasManager");
32938        return new CanvasManagerNoop();
32939    }
32940}
32941var n1;
32942!function(t2) {
32943    t2[t2.NotStarted = 0] = "NotStarted", t2[t2.Running = 1] = "Running", t2[t2.Stopped = 2] = "Stopped";
32944}(n1 || (n1 = {}));
32945const ReplayEventTypeIncrementalSnapshot = 3;
32946const ReplayEventTypeCustom = 5;
32947function timestampToMs(timestamp) {
32948    const isMs = timestamp > 9999999999;
32949    return isMs ? timestamp : timestamp * 1e3;
32950}
32951function timestampToS(timestamp) {
32952    const isMs = timestamp > 9999999999;
32953    return isMs ? timestamp / 1e3 : timestamp;
32954}
32955function addBreadcrumbEvent(replay, breadcrumb) {
32956    if (breadcrumb.category === "sentry.transaction") {
32957        return;
32958    }
32959    if ([
32960        "ui.click",
32961        "ui.input"
32962    ].includes(breadcrumb.category)) {
32963        replay.triggerUserActivity();
32964    } else {
32965        replay.checkAndHandleExpiredSession();
32966    }
32967    replay.addUpdate(()=>{
32968        replay.throttledAddEvent({
32969            type: EventType.Custom,
32970            // TODO: We were converting from ms to seconds for breadcrumbs, spans,
32971            // but maybe we should just keep them as milliseconds
32972            timestamp: (breadcrumb.timestamp || 0) * 1e3,
32973            data: {
32974                tag: "breadcrumb",
32975                // normalize to max. 10 depth and 1_000 properties per object
32976                payload: (0, __TURBOPACK__imported__module__45968__4["normalize"])(breadcrumb, 10, 1e3)
32977            }
32978        });
32979        return breadcrumb.category === "console";
32980    });
32981}
32982const INTERACTIVE_SELECTOR = "button,a";
32983function getClosestInteractive(element) {
32984    const closestInteractive = element.closest(INTERACTIVE_SELECTOR);
32985    return closestInteractive || element;
32986}
32987function getClickTargetNode(event) {
32988    const target = getTargetNode(event);
32989    if (!target || !(target instanceof Element)) {
32990        return target;
32991    }
32992    return getClosestInteractive(target);
32993}
32994function getTargetNode(event) {
32995    if (isEventWithTarget(event)) {
32996        return event.target;
32997    }
32998    return event;
32999}
33000function isEventWithTarget(event) {
33001    return (0, __TURBOPACK__imported__module__453288__14["isObjectLike"])(event) && "target" in event;
33002}
33003let handlers2;
33004function onWindowOpen(cb) {
33005    if (!handlers2) {
33006        handlers2 = [];
33007        monkeyPatchWindowOpen();
33008    }
33009    handlers2.push(cb);
33010    return ()=>{
33011        const pos = handlers2 ? handlers2.indexOf(cb) : -1;
33012        if (pos > -1) {
33013            handlers2.splice(pos, 1);
33014        }
33015    };
33016}
33017function monkeyPatchWindowOpen() {
33018    (0, __TURBOPACK__imported__module__951497__11["fill"])(WINDOW4, "open", function(originalWindowOpen) {
33019        return function() {
33020            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
33021                args[_key] = arguments[_key];
33022            }
33023            if (handlers2) {
33024                try {
33025                    handlers2.forEach((handler)=>handler());
33026                } catch (unused) {}
33027            }
33028            return originalWindowOpen.apply(WINDOW4, args);
33029        };
33030    });
33031}
33032const IncrementalMutationSources = /* @__PURE__ */ new Set([
33033    IncrementalSource.Mutation,
33034    IncrementalSource.StyleSheetRule,
33035    IncrementalSource.StyleDeclaration,
33036    IncrementalSource.AdoptedStyleSheet,
33037    IncrementalSource.CanvasMutation,
33038    IncrementalSource.Selection,
33039    IncrementalSource.MediaInteraction
33040]);
33041function handleClick(clickDetector, clickBreadcrumb, node) {
33042    clickDetector.handleClick(clickBreadcrumb, node);
33043}
33044class ClickDetector {
33045    /** Register click detection handlers on mutation or scroll. */ addListeners() {
33046        const cleanupWindowOpen = onWindowOpen(()=>{
33047            this._lastMutation = nowInSeconds();
33048        });
33049        this._teardown = ()=>{
33050            cleanupWindowOpen();
33051            this._clicks = [];
33052            this._lastMutation = 0;
33053            this._lastScroll = 0;
33054        };
33055    }
33056    /** Clean up listeners. */ removeListeners() {
33057        if (this._teardown) {
33058            this._teardown();
33059        }
33060        if (this._checkClickTimeout) {
33061            clearTimeout(this._checkClickTimeout);
33062        }
33063    }
33064    /** @inheritDoc */ handleClick(breadcrumb, node) {
33065        if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {
33066            return;
33067        }
33068        const newClick = {
33069            timestamp: timestampToS(breadcrumb.timestamp),
33070            clickBreadcrumb: breadcrumb,
33071            // Set this to 0 so we know it originates from the click breadcrumb
33072            clickCount: 0,
33073            node
33074        };
33075        if (this._clicks.some((click)=>click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)) {
33076            return;
33077        }
33078        this._clicks.push(newClick);
33079        if (this._clicks.length === 1) {
33080            this._scheduleCheckClicks();
33081        }
33082    }
33083    /** @inheritDoc */ registerMutation() {
33084        let timestamp = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Date.now();
33085        this._lastMutation = timestampToS(timestamp);
33086    }
33087    /** @inheritDoc */ registerScroll() {
33088        let timestamp = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Date.now();
33089        this._lastScroll = timestampToS(timestamp);
33090    }
33091    /** @inheritDoc */ registerClick(element) {
33092        const node = getClosestInteractive(element);
33093        this._handleMultiClick(node);
33094    }
33095    /** Count multiple clicks on elements. */ _handleMultiClick(node) {
33096        this._getClicks(node).forEach((click)=>{
33097            click.clickCount++;
33098        });
33099    }
33100    /** Get all pending clicks for a given node. */ _getClicks(node) {
33101        return this._clicks.filter((click)=>click.node === node);
33102    }
33103    /** Check the clicks that happened. */ _checkClicks() {
33104        const timedOutClicks = [];
33105        const now = nowInSeconds();
33106        this._clicks.forEach((click)=>{
33107            if (!click.mutationAfter && this._lastMutation) {
33108                click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : void 0;
33109            }
33110            if (!click.scrollAfter && this._lastScroll) {
33111                click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : void 0;
33112            }
33113            if (click.timestamp + this._timeout <= now) {
33114                timedOutClicks.push(click);
33115            }
33116        });
33117        for (const click of timedOutClicks){
33118            const pos = this._clicks.indexOf(click);
33119            if (pos > -1) {
33120                this._generateBreadcrumbs(click);
33121                this._clicks.splice(pos, 1);
33122            }
33123        }
33124        if (this._clicks.length) {
33125            this._scheduleCheckClicks();
33126        }
33127    }
33128    /** Generate matching breadcrumb(s) for the click. */ _generateBreadcrumbs(click) {
33129        const replay = this._replay;
33130        const hadScroll = click.scrollAfter && click.scrollAfter <= this._scrollTimeout;
33131        const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;
33132        const isSlowClick = !hadScroll && !hadMutation;
33133        const { clickCount, clickBreadcrumb }
vendor: 14,550 bytes, lines 33133-33561
33133 = click;
33134        if (isSlowClick) {
33135            const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1e3;
33136            const endReason = timeAfterClickMs < this._timeout * 1e3 ? "mutation" : "timeout";
33137            const breadcrumb = {
33138                type: "default",
33139                message: clickBreadcrumb.message,
33140                timestamp: clickBreadcrumb.timestamp,
33141                category: "ui.slowClickDetected",
33142                data: {
33143                    ...clickBreadcrumb.data,
33144                    url: WINDOW4.location.href,
33145                    route: replay.getCurrentRoute(),
33146                    timeAfterClickMs,
33147                    endReason,
33148                    // If clickCount === 0, it means multiClick was not correctly captured here
33149                    // - we still want to send 1 in this case
33150                    clickCount: clickCount || 1
33151                }
33152            };
33153            this._addBreadcrumbEvent(replay, breadcrumb);
33154            return;
33155        }
33156        if (clickCount > 1) {
33157            const breadcrumb = {
33158                type: "default",
33159                message: clickBreadcrumb.message,
33160                timestamp: clickBreadcrumb.timestamp,
33161                category: "ui.multiClick",
33162                data: {
33163                    ...clickBreadcrumb.data,
33164                    url: WINDOW4.location.href,
33165                    route: replay.getCurrentRoute(),
33166                    clickCount,
33167                    metric: true
33168                }
33169            };
33170            this._addBreadcrumbEvent(replay, breadcrumb);
33171        }
33172    }
33173    /** Schedule to check current clicks. */ _scheduleCheckClicks() {
33174        if (this._checkClickTimeout) {
33175            clearTimeout(this._checkClickTimeout);
33176        }
33177        this._checkClickTimeout = setTimeout1(()=>this._checkClicks(), 1e3);
33178    }
33179    constructor(replay, slowClickConfig, _addBreadcrumbEvent = addBreadcrumbEvent){
33180        this._lastMutation = 0;
33181        this._lastScroll = 0;
33182        this._clicks = [];
33183        this._timeout = slowClickConfig.timeout / 1e3;
33184        this._threshold = slowClickConfig.threshold / 1e3;
33185        this._scrollTimeout = slowClickConfig.scrollTimeout / 1e3;
33186        this._replay = replay;
33187        this._ignoreSelector = slowClickConfig.ignoreSelector;
33188        this._addBreadcrumbEvent = _addBreadcrumbEvent;
33189    }
33190}
33191const SLOW_CLICK_TAGS = [
33192    "A",
33193    "BUTTON",
33194    "INPUT"
33195];
33196function ignoreElement(node, ignoreSelector) {
33197    if (!SLOW_CLICK_TAGS.includes(node.tagName)) {
33198        return true;
33199    }
33200    if (node.tagName === "INPUT" && ![
33201        "submit",
33202        "button"
33203    ].includes(node.getAttribute("type") || "")) {
33204        return true;
33205    }
33206    if (node.tagName === "A" && (node.hasAttribute("download") || node.hasAttribute("target") && node.getAttribute("target") !== "_self")) {
33207        return true;
33208    }
33209    if (ignoreSelector && node.matches(ignoreSelector)) {
33210        return true;
33211    }
33212    return false;
33213}
33214function isClickBreadcrumb(breadcrumb) {
33215    return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === "number" && breadcrumb.timestamp);
33216}
33217function nowInSeconds() {
33218    return Date.now() / 1e3;
33219}
33220function updateClickDetectorForRecordingEvent(clickDetector, event) {
33221    try {
33222        if (!isIncrementalEvent(event)) {
33223            return;
33224        }
33225        const { source } = event.data;
33226        if (IncrementalMutationSources.has(source)) {
33227            clickDetector.registerMutation(event.timestamp);
33228        }
33229        if (source === IncrementalSource.Scroll) {
33230            clickDetector.registerScroll(event.timestamp);
33231        }
33232        if (isIncrementalMouseInteraction(event)) {
33233            const { type, id } = event.data;
33234            const node = record.mirror.getNode(id);
33235            if (node instanceof HTMLElement && type === MouseInteractions.Click) {
33236                clickDetector.registerClick(node);
33237            }
33238        }
33239    } catch (unused) {}
33240}
33241function isIncrementalEvent(event) {
33242    return event.type === ReplayEventTypeIncrementalSnapshot;
33243}
33244function isIncrementalMouseInteraction(event) {
33245    return event.data.source === IncrementalSource.MouseInteraction;
33246}
33247function createBreadcrumb(breadcrumb) {
33248    return {
33249        timestamp: Date.now() / 1e3,
33250        type: "default",
33251        ...breadcrumb
33252    };
33253}
33254var NodeType = /* @__PURE__ */ ((NodeType2)=>{
33255    NodeType2[NodeType2["Document"] = 0] = "Document";
33256    NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
33257    NodeType2[NodeType2["Element"] = 2] = "Element";
33258    NodeType2[NodeType2["Text"] = 3] = "Text";
33259    NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
33260    NodeType2[NodeType2["Comment"] = 5] = "Comment";
33261    return NodeType2;
33262})(NodeType || {});
33263const ATTRIBUTES_TO_RECORD = /* @__PURE__ */ new Set([
33264    "id",
33265    "class",
33266    "aria-label",
33267    "role",
33268    "name",
33269    "alt",
33270    "title",
33271    "data-test-id",
33272    "data-testid",
33273    "disabled",
33274    "aria-disabled",
33275    "data-sentry-component"
33276]);
33277function getAttributesToRecord(attributes) {
33278    const obj = {};
33279    if (!attributes["data-sentry-component"] && attributes["data-sentry-element"]) {
33280        attributes["data-sentry-component"] = attributes["data-sentry-element"];
33281    }
33282    for(const key in attributes){
33283        if (ATTRIBUTES_TO_RECORD.has(key)) {
33284            let normalizedKey = key;
33285            if (key === "data-testid" || key === "data-test-id") {
33286                normalizedKey = "testId";
33287            }
33288            obj[normalizedKey] = attributes[key];
33289        }
33290    }
33291    return obj;
33292}
33293const handleDomListener = (replay)=>{
33294    return (handlerData)=>{
33295        if (!replay.isEnabled()) {
33296            return;
33297        }
33298        const result = handleDom(handlerData);
33299        if (!result) {
33300            return;
33301        }
33302        const isClick = handlerData.name === "click";
33303        const event = isClick ? handlerData.event : void 0;
33304        if (isClick && replay.clickDetector && (event === null || event === void 0 ? void 0 : event.target) && !event.altKey && !event.metaKey && !event.ctrlKey && !event.shiftKey) {
33305            handleClick(replay.clickDetector, result, getClickTargetNode(handlerData.event));
33306        }
33307        addBreadcrumbEvent(replay, result);
33308    };
33309};
33310function getBaseDomBreadcrumb(target, message) {
33311    const nodeId = record.mirror.getId(target);
33312    const node = nodeId && record.mirror.getNode(nodeId);
33313    const meta = node && record.mirror.getMeta(node);
33314    const element = meta && isElement1(meta) ? meta : null;
33315    return {
33316        message,
33317        data: element ? {
33318            nodeId,
33319            node: {
33320                id: nodeId,
33321                tagName: element.tagName,
33322                textContent: Array.from(element.childNodes).map((node2)=>node2.type === NodeType.Text && node2.textContent).filter(Boolean).map((text)=>text.trim()).join(""),
33323                attributes: getAttributesToRecord(element.attributes)
33324            }
33325        } : {}
33326    };
33327}
33328function handleDom(handlerData) {
33329    const { target, message } = getDomTarget(handlerData);
33330    return createBreadcrumb({
33331        category: "ui.".concat(handlerData.name),
33332        ...getBaseDomBreadcrumb(target, message)
33333    });
33334}
33335function getDomTarget(handlerData) {
33336    const isClick = handlerData.name === "click";
33337    let message;
33338    let target = null;
33339    try {
33340        target = isClick ? getClickTargetNode(handlerData.event) : getTargetNode(handlerData.event);
33341        message = htmlTreeAsString1(target, {
33342            maxStringLength: 200
33343        }) || "<unknown>";
33344    } catch (unused) {
33345        message = "<unknown>";
33346    }
33347    return {
33348        target,
33349        message
33350    };
33351}
33352function isElement1(node) {
33353    return node.type === NodeType.Element;
33354}
33355function handleKeyboardEvent(replay, event) {
33356    if (!replay.isEnabled()) {
33357        return;
33358    }
33359    replay.updateUserActivity();
33360    const breadcrumb = getKeyboardBreadcrumb(event);
33361    if (!breadcrumb) {
33362        return;
33363    }
33364    addBreadcrumbEvent(replay, breadcrumb);
33365}
33366function getKeyboardBreadcrumb(event) {
33367    const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;
33368    if (!target || isInputElement(target) || !key) {
33369        return null;
33370    }
33371    const hasModifierKey = metaKey || ctrlKey || altKey;
33372    const isCharacterKey = key.length === 1;
33373    if (!hasModifierKey && isCharacterKey) {
33374        return null;
33375    }
33376    const message = htmlTreeAsString1(target, {
33377        maxStringLength: 200
33378    }) || "<unknown>";
33379    const baseBreadcrumb = getBaseDomBreadcrumb(target, message);
33380    return createBreadcrumb({
33381        category: "ui.keyDown",
33382        message,
33383        data: {
33384            ...baseBreadcrumb.data,
33385            metaKey,
33386            shiftKey,
33387            ctrlKey,
33388            altKey,
33389            key
33390        }
33391    });
33392}
33393function isInputElement(target) {
33394    return target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable;
33395}
33396const ENTRY_TYPES = {
33397    // @ts-expect-error TODO: entry type does not fit the create* functions entry type
33398    resource: createResourceEntry,
33399    paint: createPaintEntry,
33400    // @ts-expect-error TODO: entry type does not fit the create* functions entry type
33401    navigation: createNavigationEntry
33402};
33403function webVitalHandler(getter, replay) {
33404    return (param)=>{
33405        let { metric } = param;
33406        return void replay.replayPerformanceEntries.push(getter(metric));
33407    };
33408}
33409function createPerformanceEntries(entries) {
33410    return entries.map(createPerformanceEntry).filter(Boolean);
33411}
33412function createPerformanceEntry(entry) {
33413    const entryType = ENTRY_TYPES[entry.entryType];
33414    if (!entryType) {
33415        return null;
33416    }
33417    return entryType(entry);
33418}
33419function getAbsoluteTime1(time) {
33420    return (((0, __TURBOPACK__imported__module__605394__16["browserPerformanceTimeOrigin"])() || WINDOW4.performance.timeOrigin) + time) / 1e3;
33421}
33422function createPaintEntry(entry) {
33423    const { duration, entryType, name, startTime } = entry;
33424    const start = getAbsoluteTime1(startTime);
33425    return {
33426        type: entryType,
33427        name,
33428        start,
33429        end: start + duration,
33430        data: void 0
33431    };
33432}
33433function createNavigationEntry(entry) {
33434    const { entryType, name, decodedBodySize, duration, domComplete, encodedBodySize, domContentLoadedEventStart, domContentLoadedEventEnd, domInteractive, loadEventStart, loadEventEnd, redirectCount, startTime, transferSize, type } = entry;
33435    if (duration === 0) {
33436        return null;
33437    }
33438    return {
33439        type: "".concat(entryType, ".").concat(type),
33440        start: getAbsoluteTime1(startTime),
33441        end: getAbsoluteTime1(domComplete),
33442        name,
33443        data: {
33444            size: transferSize,
33445            decodedBodySize,
33446            encodedBodySize,
33447            duration,
33448            domInteractive,
33449            domContentLoadedEventStart,
33450            domContentLoadedEventEnd,
33451            loadEventStart,
33452            loadEventEnd,
33453            domComplete,
33454            redirectCount
33455        }
33456    };
33457}
33458function createResourceEntry(entry) {
33459    const { entryType, initiatorType, name, responseEnd, startTime, decodedBodySize, encodedBodySize, responseStatus, transferSize } = entry;
33460    if ([
33461        "fetch",
33462        "xmlhttprequest"
33463    ].includes(initiatorType)) {
33464        return null;
33465    }
33466    return {
33467        type: "".concat(entryType, ".").concat(initiatorType),
33468        start: getAbsoluteTime1(startTime),
33469        end: getAbsoluteTime1(responseEnd),
33470        name,
33471        data: {
33472            size: transferSize,
33473            statusCode: responseStatus,
33474            decodedBodySize,
33475            encodedBodySize
33476        }
33477    };
33478}
33479function getLargestContentfulPaint(metric) {
33480    const lastEntry = metric.entries[metric.entries.length - 1];
33481    const node = (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.element) ? [
33482        lastEntry.element
33483    ] : void 0;
33484    return getWebVital(metric, "largest-contentful-paint", node);
33485}
33486function isLayoutShift(entry) {
33487    return entry.sources !== void 0;
33488}
33489function getCumulativeLayoutShift(metric) {
33490    const layoutShifts = [];
33491    const nodes = [];
33492    for (const entry of metric.entries){
33493        if (isLayoutShift(entry)) {
33494            const nodeIds = [];
33495            for (const source of entry.sources){
33496                if (source.node) {
33497                    nodes.push(source.node);
33498                    const nodeId = record.mirror.getId(source.node);
33499                    if (nodeId) {
33500                        nodeIds.push(nodeId);
33501                    }
33502                }
33503            }
33504            layoutShifts.push({
33505                value: entry.value,
33506                nodeIds: nodeIds.length ? nodeIds : void 0
33507            });
33508        }
33509    }
33510    return getWebVital(metric, "cumulative-layout-shift", nodes, layoutShifts);
33511}
33512function getInteractionToNextPaint(metric) {
33513    const lastEntry = metric.entries[metric.entries.length - 1];
33514    const node = (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.target) ? [
33515        lastEntry.target
33516    ] : void 0;
33517    return getWebVital(metric, "interaction-to-next-paint", node);
33518}
33519function getWebVital(metric, name, nodes, attributions) {
33520    const value = metric.value;
33521    const rating = metric.rating;
33522    const end = getAbsoluteTime1(value);
33523    return {
33524        type: "web-vital",
33525        name,
33526        start: end,
33527        end,
33528        data: {
33529            value,
33530            size: value,
33531            rating,
33532            nodeIds: nodes ? nodes.map((node)=>record.mirror.getId(node)) : void 0,
33533            attributions
33534        }
33535    };
33536}
33537function setupPerformanceObserver(replay) {
33538    function addPerformanceEntry(entry) {
33539        if (!replay.performanceEntries.includes(entry)) {
33540            replay.performanceEntries.push(entry);
33541        }
33542    }
33543    function onEntries(param) {
33544        let { entries } = param;
33545        entries.forEach(addPerformanceEntry);
33546    }
33547    const clearCallbacks = [];
33548    [
33549        "navigation",
33550        "paint",
33551        "resource"
33552    ].forEach((type)=>{
33553        clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));
33554    });
33555    clearCallbacks.push(addLcpInstrumentationHandler(webVitalHandler(getLargestContentfulPaint, replay)), addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)), addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay)));
33556    return ()=>{
33557        clearCallbacks.forEach((clearCallback)=>clearCallback());
33558    };
33559}
33560const DEBUG_BUILD3 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__;
33561const t1 = '
vendor: 10,329 bytes, line 33561
33561var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var i=new n(31),s=0;s<31;++s)i[s]=e+=1<<t[s-1];var a=new r(i[30]);for(s=1;s<30;++s)for(var o=i[s];o<i[s+1];++o)a[o]=o-i[s]<<5|s;return{b:i,r:a}},o=a(e,2),h=o.b,f=o.r;h[28]=258,f[258]=28;for(var l=a(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,s=0,a=new n(r);s<i;++s)t[s]&&++a[t[s]-1];var o,h=new n(r);for(s=1;s<r;++s)h[s]=h[s-1]+a[s-1]<<1;if(e){o=new n(1<<r);var f=15-r;for(s=0;s<i;++s)if(t[s])for(var l=s<<4|t[s],c=r-t[s],v=h[t[s]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>f]=l}else for(o=new n(i),s=0;s<i;++s)t[s]&&(o[s]=u[h[t[s]-1]++]>>15-t[s]);return o},p=new t(288);for(c=0;c<144;++c)p[c]=8;for(c=144;c<256;++c)p[c]=9;for(c=256;c<280;++c)p[c]=7;for(c=280;c<288;++c)p[c]=8;var g=new t(32);for(c=0;c<32;++c)g[c]=5;var w=d(p,9,0),y=d(g,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},_=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},x=function(r,e){for(var i=[],s=0;s<r.length;++s)r[s]&&i.push({s:s,f:r[s]});var a=i.length,o=i.slice();if(!a)return{t:F,l:0};if(1==a){var h=new t(i[0].s+1);return h[i[0].s]=1,{t:h,l:1}}i.sort(function(t,n){return t.f-n.f}),i.push({s:-1,f:25001});var f=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:f.f+l.f,l:f,r:l};c!=a-1;)f=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:f.f+l.f,l:f,r:l};var d=o[0].s;for(s=1;s<a;++s)o[s].s>d&&(d=o[s].s);var p=new n(d+1),g=A(i[c-1],p,0);if(g>e){s=0;var w=0,y=g-e,m=1<<y;for(o.sort(function(t,n){return p[n.s]-p[t.s]||t.f-n.f});s<a;++s){var b=o[s].s;if(!(p[b]>e))break;w+=m-(1<<g-p[b]),p[b]=e}for(w>>=y;w>0;){var M=o[s].s;p[M]<e?w-=1<<e-p[M]++-1:++s}for(;s>=0&&w;--s){var E=o[s].s;p[E]==e&&(--p[E],++w)}g=e}return{t:new t(p),l:g}},A=function(t,n,r){return-1==t.s?Math.max(A(t.l,n,r+1),A(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,s=t[0],a=1,o=function(t){e[i++]=t},h=1;h<=r;++h)if(t[h]==s&&h!=r)++a;else{if(!s&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(s),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(s);a=1,s=t[h]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s<e;++s)t[i+s+4]=r[s];return 8*(i+4+e)},U=function(t,r,a,o,h,f,l,u,c,v,m){z(r,m++,a),++h[256];for(var b=x(h,15),M=b.t,E=b.l,A=x(f,15),U=A.t,C=A.l,F=D(M),I=F.c,S=F.n,L=D(U),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=x(q,7),H=G.t,J=G.l,K=19;K>4&&!H[s[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(h,p)+T(f,g)+l,X=T(h,M)+T(f,U)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(U,C,0),R=U;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[s[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=w,P=p,Q=y,R=g;for(B=0;B<u;++B){var rt=o[B];if(rt>255){_(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;_(r,m,Q[et]),m+=R[et],et>3&&(_(r,m,rt>>5&8191),m+=i[et])}else _(r,m,N[rt]),m+=P[rt]}return _(r,m,N[256]),m+P[256]},C=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,s=0|r.length,a=0;a!=s;){for(var o=Math.min(a+2655,s);a<o;++a)i+=e+=r[a];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(s,a,o,h,u){if(!u&&(u={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),v=new t(c.length+s.length);v.set(c),v.set(s,c.length),s=v,u.w=c.length}return function(s,a,o,h,u,c){var v=c.z||s.length,d=new t(h+v+5*(1+Math.ceil(v/7e3))+u),p=d.subarray(h,d.length-u),g=c.l,w=7&(c.r||0);if(a){w&&(p[0]=c.r>>3);for(var y=C[a-1],M=y>>13,E=8191&y,z=(1<<o)-1,_=c.p||new n(32768),x=c.h||new n(z+1),A=Math.ceil(o/3),D=2*A,T=function(t){return(s[t]^s[t+1]<<A^s[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=x[H];if(_[J]=K,x[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!g)){w=U(s,p,0,F,I,S,O,q,G,j-G,w),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(s[j+Q]==s[j+Q-W]){for(var $=0;$<Z&&s[j+$]==s[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-_[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=_[J])&32767}if(R){F[q++]=268435456|f[Q]<<18|l[R];var it=31&f[Q],st=31&l[R];O+=e[it]+i[st],++I[257+it],++S[st],B=j+Q,++L}else F[q++]=s[j],++I[s[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=s[j],++I[s[j]];w=U(s,p,g,F,I,S,O,q,G,j-G,w),g||(c.r=7&w|p[w/8|0]<<3,w-=7,c.h=x,c.p=_,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+g;j+=65535){var at=j+65535;at>=v&&(p[w/8|0]=g,at=v),w=k(p,w+1,s.subarray(j,at))}c.i=v}return b(d,0,h+m(w)+u)}(s,null==a.level?6:a.level,null==a.mem?u.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):20:12+a.mem,o,h,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if("function"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var s=this.b.length-this.s.z;this.b.set(n.subarray(0,s),this.s.z),this.s.z=this.b.length,this.p(this.b,!1),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(s),32768),this.s.z=n.length-s+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n.prototype.flush=function(){this.ondata||E(5),this.s.l&&E(4),this.p(this.b,!1),this.s.w=this.s.i,this.s.i-=2},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,s=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),a=s.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(s,n),O(s,a-8,r.d()),O(s,a-4,e),s}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t.prototype.flush=function(){j.prototype.flush.call(this)},t}(),G="undefined"!=typeof TextEncoder&&new TextEncoder,H="undefined"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(G)return G.encode(n);for(var e=n.length,i=new t(n.length+(n.length>>1)),s=0,a=function(t){i[s++]=t},o=0;o<e;++o){if(s+5>i.length){var h=new t(s+8+(e-o<<1));h.set(i),i=h}var f=n.charCodeAt(o);f<128||r?a(f):f<2048?(a(192|f>>6),a(128|63&f)):f>55295&&f<57344?(a(240|(f=65536+(1047552&f)|1023&n.charCodeAt(++o))>>18),a(128|f>>12&63),a(128|f>>6&63),a(128|63&f)):(a(224|f>>12),a(128|f>>6&63),a(128|63&f))}return b(i,0,s)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error("Adding invalid event");const n=this._hasEvents?",":"";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push("]",!0);const t=function(t){let n=0;for(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new B,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new J((t,n)=>{this.deflate.push(t,n)}),this.stream.push("[")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener("message",function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&"function"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}}),postMessage({id:void 0,method:"init",success:!0,response:void 0});
33561';
33562function e1() {
33563    const e2 = new Blob([
33564        t1
33565    ], {
33566        type: "text/javascript"
33567    });
33568    return URL.createObjectURL(e2);
33569}
33570const CONSOLE_LEVELS = [
33571    "log",
33572    "warn",
33573    "error"
33574];
33575const PREFIX = "[Replay] ";
33576function _addBreadcrumb(message) {
33577    let level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "info";
33578    (0, __TURBOPACK__imported__module__183330__1["addBreadcrumb"])({
33579        category: "console",
33580        data: {
33581            logger: "replay"
33582        },
33583        level,
33584        message: "".concat(PREFIX).concat(message)
33585    }, {
33586        level
33587    });
33588}
33589function makeReplayDebugLogger() {
33590    let _capture = false;
33591    let _trace = false;
33592    const _debug = {
33593        exception: ()=>void 0,
33594        infoTick: ()=>void 0,
33595        setConfig: (opts)=>{
33596            _capture = !!opts.captureExceptions;
33597            _trace = !!opts.traceInternals;
33598        }
33599    };
33600    if (DEBUG_BUILD3) {
33601        CONSOLE_LEVELS.forEach((name)=>{
33602            _debug[name] = function() {
33603                for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
33604                    args[_key] = arguments[_key];
33605                }
33606                __TURBOPACK__imported__module__272598__37["debug"][name](PREFIX, ...args);
33607                if (_trace) {
33608                    _addBreadcrumb(args.join(""), severityLevelFromString(name));
33609                }
33610            };
33611        });
33612        _debug.exception = function(error) {
33613            for(var _len = arguments.length, message = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
33614                message[_key - 1] = arguments[_key];
33615            }
33616            if (message.length && _debug.error) {
33617                _debug.error(...message);
33618            }
33619            __TURBOPACK__imported__module__272598__37["debug"].error(PREFIX, error);
33620            if (_capture) {
33621                (0, __TURBOPACK__imported__module__662537__6["captureException"])(error, {
33622                    mechanism: {
33623                        handled: true,
33624                        type: "auto.function.replay.debug"
33625                    }
33626                });
33627            } else if (_trace) {
33628                _addBreadcrumb(error, "error");
33629            }
33630        };
33631        _debug.infoTick = function() {
33632            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
33633                args[_key] = arguments[_key];
33634            }
33635            __TURBOPACK__imported__module__272598__37["debug"].log(PREFIX, ...args);
33636            if (_trace) {
33637                setTimeout(()=>_addBreadcrumb(args[0]), 0);
33638            }
33639        };
33640    } else {
33641        CONSOLE_LEVELS.forEach((name)=>{
33642            _debug[name] = ()=>void 0;
33643        });
33644    }
33645    return _debug;
33646}
33647const debug = makeReplayDebugLogger();
33648class EventBufferSizeExceededError extends Error {
33649    constructor(){
33650        super("Event buffer exceeded maximum size of ".concat(REPLAY_MAX_EVENT_BUFFER_SIZE, "."));
33651    }
33652}
33653class WorkerDestroyedError extends Error {
33654    constructor(){
33655        super("Worker destroyed");
33656    }
33657}
33658class EventBufferArray {
33659    /** @inheritdoc */ get hasEvents() {
33660        return this.events.length > 0;
33661    }
33662    /** @inheritdoc */ get type() {
33663        return "sync";
33664    }
33665    /** @inheritdoc */ destroy() {
33666        this.events = [];
33667    }
33668    /** @inheritdoc */ async addEvent(event) {
33669        const eventSize = JSON.stringify(event).length;
33670        this._totalSize += eventSize;
33671        if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {
33672            throw new EventBufferSizeExceededError();
33673        }
33674        this.events.push(event);
33675    }
33676    /** @inheritdoc */ finish() {
33677        return new Promise((resolve)=>{
33678            const eventsRet = this.events;
33679            this.clear();
33680            resolve(JSON.stringify(eventsRet));
33681        });
33682    }
33683    /** @inheritdoc */ clear() {
33684        this.events = [];
33685        this._totalSize = 0;
33686        this.hasCheckout = false;
33687    }
33688    /** @inheritdoc */ getEarliestTimestamp() {
33689        let ts = null;
33690        for (const { timestamp } of this.events){
33691            if (ts === null || timestamp < ts) ts = timestamp;
33692        }
33693        return ts === null ? ts : timestampToMs(ts);
33694    }
33695    constructor(){
33696        this.events = [];
33697        this._totalSize = 0;
33698        this.hasCheckout = false;
33699        this.waitForCheckout = false;
33700    }
33701}
33702class WorkerHandler {
33703    /**
33704   * Ensure the worker is ready (or not).
33705   * This will either resolve when the worker is ready, or reject if an error occurred.
33706   */ ensureReady() {
33707        if (this._ensureReadyPromise) {
33708            return this._ensureReadyPromise;
33709        }
33710        this._ensureReadyPromise = new Promise((resolve, reject)=>{
33711            this._worker.addEventListener("message", (param)=>{
33712                let { data } = param;
33713                if (data.success) {
33714                    resolve();
33715                } else {
33716                    DEBUG_BUILD3 && debug.warn("Received worker message with unsuccessful status", data);
33717                    reject(new Error("Received worker message with unsuccessful status"));
33718                }
33719            }, {
33720                once: true
33721            });
33722            this._worker.addEventListener("error", (error)=>{
33723                DEBUG_BUILD3 && debug.warn("Failed to load Replay compression worker", error);
33724                reject(new Error("Failed to load Replay compression worker: ".concat(error instanceof ErrorEvent && error.message ? error.message : "Unknown error. This can happen due to CSP policy restrictions, network issues, or the worker script failing to load.")));
33725            }, {
33726                once: true
33727            });
33728        });
33729        return this._ensureReadyPromise;
33730    }
33731    /**
33732   * Destroy the worker.
33733   */ destroy() {
33734        DEBUG_BUILD3 && debug.log("Destroying compression worker");
33735        this._worker.removeEventListener("message", this._onMessage);
33736        this._pending.forEach((pending)=>pending.reject(new WorkerDestroyedError()));
33737        this._pending.clear();
33738        this._worker.terminate();
33739    }
33740    /**
33741   * Post message to worker and wait for response before resolving promise.
33742   */ postMessage(method, arg) {
33743        const id = this._getAndIncrementId();
33744        return new Promise((resolve, reject)=>{
33745            this._pending.set(id, {
33746                method,
33747                resolve,
33748                reject
33749            });
33750            try {
33751                this._worker.postMessage({
33752                    id,
33753                    method,
33754                    arg
33755                });
33756            } catch (error) {
33757                this._pending.delete(id);
33758                reject(error);
33759            }
33760        });
33761    }
33762    /** Get the current ID and increment it for the next call. */ _getAndIncrementId() {
33763        return this._id++;
33764    }
33765    constructor(worker){
33766        this._onMessage = (param)=>{
33767            let { data } = param;
33768            const response = data;
33769            if (typeof response.id !== "number") {
33770                return;
33771            }
33772            const pending = this._pending.get(response.id);
33773            if (!pending || pending.method !== response.method) {
33774                return;
33775            }
33776            this._pending.delete(response.id);
33777            if (!response.success) {
33778                DEBUG_BUILD3 && debug.error("Error in compression worker: ", response.response);
33779                pending.reject(new Error("Error in compression worker"));
33780                return;
33781            }
33782            pending.resolve(response.response);
33783        };
33784        this._worker = worker;
33785        this._id = 0;
33786        this._pending = /* @__PURE__ */ new Map();
33787        this._worker.addEventListener("message", this._onMessage);
33788    }
33789}
33790class EventBufferCompressionWorker {
33791    /** @inheritdoc */ get hasEvents() {
33792        return !!this._earliestTimestamp;
33793    }
33794    /** @inheritdoc */ get type() {
33795        return "worker";
33796    }
33797    /**
33798   * Ensure the worker is ready (or not).
33799   * This will either resolve when the worker is ready, or reject if an error occurred.
33800   */ ensureReady() {
33801        return this._worker.ensureReady();
33802    }
33803    /**
33804   * Destroy the event buffer.
33805   */ destroy() {
33806        this._worker.destroy();
33807    }
33808    /**
33809   * Add an event to the event buffer.
33810   *
33811   * Returns true if event was successfully received and processed by worker.
33812   */ addEvent(event) {
33813        const timestamp = timestampToMs(event.timestamp);
33814        if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {
33815            this._earliestTimestamp = timestamp;
33816        }
33817        const data = JSON.stringify(event);
33818        this._totalSize += data.length;
33819        if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {
33820            return Promise.reject(new EventBufferSizeExceededError());
33821        }
33822        return this._sendEventToWorker(data);
33823    }
33824    /**
33825   * Finish the event buffer and return the compressed data.
33826   */ finish() {
33827        return this._finishRequest();
33828    }
33829    /** @inheritdoc */ clear() {
33830        this._earliestTimestamp = null;
33831        this._totalSize = 0;
33832        this.hasCheckout = false;
33833        this._worker.postMessage("clear").then(null, (e)=>{
33834            DEBUG_BUILD3 && debug.exception(e, 'Sending "clear" message to worker failed', e);
33835        });
33836    }
33837    /** @inheritdoc */ getEarliestTimestamp() {
33838        return this._earliestTimestamp;
33839    }
33840    /**
33841   * Send the event to the worker.
33842   */ _sendEventToWorker(data) {
33843        return this._worker.postMessage("addEvent", data);
33844    }
33845    /**
33846   * Finish the request and return the compressed data from the worker.
33847   */ async _finishRequest() {
33848        const response = await this._worker.postMessage("finish");
33849        this._earliestTimestamp = null;
33850        this._totalSize = 0;
33851        return response;
33852    }
33853    constructor(worker){
33854        this._worker = new WorkerHandler(worker);
33855        this._earliestTimestamp = null;
33856        this._totalSize = 0;
33857        this.hasCheckout = false;
33858        this.waitForCheckout = false;
33859    }
33860}
33861class EventBufferProxy {
33862    /** @inheritdoc */ get waitForCheckout() {
33863        return this._used.waitForCheckout;
33864    }
33865    /** @inheritdoc */ get type() {
33866        return this._used.type;
33867    }
33868    /** @inheritDoc */ get hasEvents() {
33869        return this._used.hasEvents;
33870    }
33871    /** @inheritdoc */ get hasCheckout() {
33872        return this._used.hasCheckout;
33873    }
33874    /** @inheritdoc */ set hasCheckout(value) {
33875        this._used.hasCheckout = value;
33876    }
33877    /** @inheritdoc */ // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures
33878    set waitForCheckout(value) {
33879        this._used.waitForCheckout = value;
33880    }
33881    /** @inheritDoc */ destroy() {
33882        this._fallback.destroy();
33883        this._compression.destroy();
33884    }
33885    /** @inheritdoc */ clear() {
33886        return this._used.clear();
33887    }
33888    /** @inheritdoc */ getEarliestTimestamp() {
33889        return this._used.getEarliestTimestamp();
33890    }
33891    /**
33892   * Add an event to the event buffer.
33893   *
33894   * Returns true if event was successfully added.
vendor: 4,376 bytes, lines 33895-34024
33895   */ addEvent(event) {
33896        return this._used.addEvent(event);
33897    }
33898    /** @inheritDoc */ async finish() {
33899        await this.ensureWorkerIsLoaded();
33900        return this._used.finish();
33901    }
33902    /** Ensure the worker has loaded. */ ensureWorkerIsLoaded() {
33903        return this._ensureWorkerIsLoadedPromise;
33904    }
33905    /** Actually check if the worker has been loaded. */ async _ensureWorkerIsLoaded() {
33906        try {
33907            await this._compression.ensureReady();
33908        } catch (error) {
33909            DEBUG_BUILD3 && debug.exception(error, "Failed to load the compression worker, falling back to simple buffer");
33910            return;
33911        }
33912        await this._switchToCompressionWorker();
33913    }
33914    /** Switch the used buffer to the compression worker. */ async _switchToCompressionWorker() {
33915        const { events, hasCheckout, waitForCheckout } = this._fallback;
33916        const addEventPromises = [];
33917        for (const event of events){
33918            addEventPromises.push(this._compression.addEvent(event));
33919        }
33920        this._compression.hasCheckout = hasCheckout;
33921        this._compression.waitForCheckout = waitForCheckout;
33922        this._used = this._compression;
33923        try {
33924            await Promise.all(addEventPromises);
33925            this._fallback.clear();
33926        } catch (error) {
33927            if (error instanceof WorkerDestroyedError) {
33928                return;
33929            }
33930            DEBUG_BUILD3 && debug.exception(error, "Failed to add events when switching buffers.");
33931        }
33932    }
33933    constructor(worker){
33934        this._fallback = new EventBufferArray();
33935        this._compression = new EventBufferCompressionWorker(worker);
33936        this._used = this._fallback;
33937        this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();
33938    }
33939}
33940function createEventBuffer(param) {
33941    let { useCompression, workerUrl: customWorkerUrl } = param;
33942    if (useCompression && // eslint-disable-next-line no-restricted-globals
33943    window.Worker) {
33944        const worker = _loadWorker(customWorkerUrl);
33945        if (worker) {
33946            return worker;
33947        }
33948    }
33949    DEBUG_BUILD3 && debug.log("Using simple buffer");
33950    return new EventBufferArray();
33951}
33952function _loadWorker(customWorkerUrl) {
33953    try {
33954        const workerUrl = customWorkerUrl || _getWorkerUrl();
33955        if (!workerUrl) {
33956            return;
33957        }
33958        DEBUG_BUILD3 && debug.log("Using compression worker".concat(customWorkerUrl ? " from ".concat(customWorkerUrl) : ""));
33959        const worker = new Worker(workerUrl);
33960        return new EventBufferProxy(worker);
33961    } catch (error) {
33962        DEBUG_BUILD3 && debug.exception(error, "Failed to create compression worker");
33963    }
33964}
33965function _getWorkerUrl() {
33966    if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === "undefined" || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {
33967        return e1();
33968    }
33969    return "";
33970}
33971function hasSessionStorage() {
33972    try {
33973        return "sessionStorage" in WINDOW4 && !!WINDOW4.sessionStorage;
33974    } catch (unused) {
33975        return false;
33976    }
33977}
33978function clearSession(replay) {
33979    deleteSession();
33980    replay.session = void 0;
33981}
33982function deleteSession() {
33983    if (!hasSessionStorage()) {
33984        return;
33985    }
33986    try {
33987        WINDOW4.sessionStorage.removeItem(REPLAY_SESSION_KEY);
33988    } catch (unused) {}
33989}
33990function isSampled(sampleRate) {
33991    if (sampleRate === void 0) {
33992        return false;
33993    }
33994    return Math.random() < sampleRate;
33995}
33996function saveSession(session) {
33997    if (!hasSessionStorage()) {
33998        return;
33999    }
34000    try {
34001        WINDOW4.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));
34002    } catch (unused) {}
34003}
34004function makeSession(session) {
34005    const now = Date.now();
34006    const id = session.id || (0, __TURBOPACK__imported__module__682564__7["uuid4"])();
34007    const started = session.started || now;
34008    const lastActivity = session.lastActivity || now;
34009    const segmentId = session.segmentId || 0;
34010    const sampled = session.sampled;
34011    const previousSessionId = session.previousSessionId;
34012    const dirty = session.dirty || false;
34013    return {
34014        id,
34015        started,
34016        lastActivity,
34017        segmentId,
34018        sampled,
34019        previousSessionId,
34020        dirty
34021    };
34022}
34023function getSessionSampleType(sessionSampleRate, allowBuffering) {
34024    return isSampled(sessionSampleRate) ? "session" : allowBuffering ? "buffer" : false;
34025}
34026function createSession(param) {
34027    let { sessionSampleRate, allowBuffering, stickySession = false } = param, { previousSessionId } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
34028    const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);
34029    const session = makeSession({
34030        sampled,
34031        previousSessionId
34032    });
34033    if (stickySession) {
34034        saveSession(session);
34035    }
34036    return session;
34037}
34038function fetchSession() {
34039    if (!hasSessionStorage()) {
34040        return null;
34041    }
34042    try {
34043        const sessionStringFromStorage = WINDOW4.sessionStorage.getItem(REPLAY_SESSION_KEY);
34044        if (!sessionStringFromStorage) {
34045            return null;
34046        }
34047        const sessionObj = JSON.parse(sessionStringFromStorage);
34048        DEBUG_BUILD3 && debug.infoTick("Loading existing session");
34049        return makeSession(sessionObj);
34050    } catch (unused) {
34051        return null;
34052    }
34053}
34054function isExpired(initialTime, expiry) {
34055    let targetTime = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : +/* @__PURE__ */ new Date();
34056    if (initialTime === null || expiry === void 0 || expiry < 0) {
34057        return true;
34058    }
34059    if (expiry === 0) {
34060        return false;
34061    }
34062    return initialTime + expiry <= targetTime;
34063}
34064function isSessionExpired(session, param) {
34065    let { maxReplayDuration, sessionIdleExpire, targetTime = Date.now() } = param;
34066    return(// First, check that maximum session length has not been exceeded
34067    isExpired(session.started, maxReplayDuration, targetTime) || // check that the idle timeout has not been exceeded (i.e. user has
34068    // performed an action within the last `sessionIdleExpire` ms)
34069    isExpired(session.lastActivity, sessionIdleExpire, targetTime));
34070}
34071function shouldRefreshSession(session, param) {
34072    let { sessionIdleExpire, maxReplayDuration } = param;
34073    if (!isSessionExpired(session, {
34074        sessionIdleExpire,
34075        maxReplayDuration
34076    })) {
34077        return false;
34078    }
34079    if (session.sampled === "buffer" && session.segmentId === 0) {
34080        return false;
34081    }
34082    return true;
34083}
34084function loadOrCreateSession(param, sessionOptions) {
34085    let { sessionIdleExpire, maxReplayDuration, previousSessionId } = param;
34086    const existingSession = sessionOptions.stickySession && fetchSession();
34087    if (!existingSession) {
34088        DEBUG_BUILD3 && debug.infoTick("Creating new session");
34089        return createSession(sessionOptions, {
34090            previousSessionId
34091        });
34092    }
34093    if (!shouldRefreshSession(existingSession, {
34094        sessionIdleExpire,
34095        maxReplayDuration
34096    })) {
34097        return existingSession;
34098    }
34099    DEBUG_BUILD3 && debug.infoTick("Session in sessionStorage is expired, creating new one...");
34100    return createSession(sessionOptions, {
34101        previousSessionId: existingSession.id
34102    });
34103}
34104function isCustomEvent(event) {
34105    return event.type === EventType.Custom;
34106}
34107function addEventSync(replay, event, isCheckout) {
34108    if (!shouldAddEvent(replay, event)) {
34109        return false;
34110    }
34111    _addEvent(replay, event, isCheckout);
34112    return true;
34113}
34114function addEvent(replay, event, isCheckout) {
34115    if (!shouldAddEvent(replay, event)) {
34116        return Promise.resolve(null);
34117    }
34118    return _addEvent(replay, event, isCheckout);
34119}
34120async function _addEvent(replay, event, isCheckout) {
34121    const { eventBuffer } = replay;
34122    if (!eventBuffer || eventBuffer.waitForCheckout && !isCheckout) {
34123        return null;
34124    }
34125    const isBufferMode = replay.recordingMode === "buffer";
34126    try {
34127        if (isCheckout && isBufferMode) {
34128            eventBuffer.clear();
34129        }
34130        if (isCheckout) {
34131            eventBuffer.hasCheckout = true;
34132            eventBuffer.waitForCheckout = false;
34133        }
34134        const replayOptions = replay.getOptions();
34135        const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);
34136        if (!eventAfterPossibleCallback) {
34137            return;
34138        }
34139        return await eventBuffer.addEvent(eventAfterPossibleCallback);
34140    } catch (error) {
34141        if (!replay.isEnabled()) {
34142            replay.handleException(error);
34143            return null;
34144        }
34145        const isExceeded = error && error instanceof EventBufferSizeExceededError;
34146        const reason = isExceeded ? "eventBufferOverflow" : "eventBufferError";
34147        const client = (0, __TURBOPACK__imported__module__250804__26["getClient"])();
34148        if (client) {
34149            const dropReason = isExceeded ? "buffer_overflow" : "internal_sdk_error";
34150            client.recordDroppedEvent(dropReason, "replay");
34151        }
34152        if (isExceeded && isBufferMode) {
34153            eventBuffer.clear();
34154            eventBuffer.waitForCheckout = true;
34155            return null;
34156        }
34157        replay.handleException(error);
34158        await replay.stop({
34159            reason
34160        });
34161    }
34162}
34163function shouldAddEvent(replay, event) {
34164    if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {
34165        return false;
34166    }
34167    const timestampInMs = timestampToMs(event.timestamp);
34168    if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {
34169        return false;
34170    }
34171    if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {
34172        DEBUG_BUILD3 && debug.infoTick("Skipping event with timestamp ".concat(timestampInMs, " because it is after maxReplayDuration"));
34173        return false;
34174    }
34175    return true;
34176}
34177function maybeApplyCallback(event, callback) {
34178    try {
34179        if (typeof callback === "function" && isCustomEvent(event)) {
34180            return callback(event);
34181        }
34182    } catch (error) {
34183        DEBUG_BUILD3 && debug.exception(error, "An error occurred in the `beforeAddRecordingEvent` callback, skipping the event...");
34184        return null;
34185    }
34186    return event;
34187}
34188const MAX_CONTEXT_VALUES = 100;
34189function addSegmentDetailsToContext(replay, traceId, segmentName) {
34190    const replayContext = replay.getContext();
34191    if (traceId && replayContext.traceIds.size < MAX_CONTEXT_VALUES) {
34192        replayContext.traceIds.add(traceId);
34193    }
34194    if (segmentName && replayContext.segmentNames.size < MAX_CONTEXT_VALUES) {
34195        replayContext.segmentNames.add(segmentName);
34196    }
34197}
34198function handleProcessSegmentSpan(replay) {
34199    return (spanJSON)=>{
34200        if (!replay.isEnabled()) {
34201            return;
34202        }
34203        addSegmentDetailsToContext(replay, spanJSON.trace_id, spanJSON.name || void 0);
34204    };
34205}
34206function isErrorEvent1(event) {
34207    return !event.type;
34208}
34209function isTransactionEvent1(event) {
34210    return event.type === "transaction";
34211}
34212function isReplayEvent(event) {
34213    return event.type === "replay_event";
34214}
34215function isFeedbackEvent(event) {
34216    return event.type === "feedback";
34217}
34218function handleAfterSendEvent(replay) {
34219    return (event, sendResponse)=>{
34220        if (!replay.isEnabled() || !isErrorEvent1(event) && !isTransactionEvent1(event)) {
34221            return;
34222        }
34223        const statusCode = sendResponse.statusCode;
34224        if (!statusCode || statusCode < 200 || statusCode >= 300) {
34225            return;
34226        }
34227        if (isTransactionEvent1(event)) {
34228            handleTransactionEvent(replay, event);
34229            return;
34230        }
34231        handleErrorEvent(replay, event);
34232    };
34233}
34234function handleTransactionEvent(replay, event) {
34235    var _event_contexts_trace, _event_contexts;
34236    addSegmentDetailsToContext(replay, (_event_contexts = event.contexts) === null || _event_contexts === void 0 ? void 0 : (_event_contexts_trace = _event_contexts.trace) === null || _event_contexts_trace === void 0 ? void 0 : _event_contexts_trace.trace_id, event.transaction);
34237}
34238function handleErrorEvent(replay, event) {
34239    var _event_tags;
34240    const replayContext = replay.getContext();
34241    if (event.event_id && replayContext.errorIds.size < 100) {
34242        replayContext.errorIds.add(event.event_id);
34243    }
34244    if (replay.recordingMode !== "buffer" || !((_event_tags = event.tags) === null || _event_tags === void 0 ? void 0 : _event_tags.replayId)) {
34245        return;
34246    }
34247    const { beforeErrorSampling } = replay.getOptions();
34248    if (typeof beforeErrorSampling === "function" && !beforeErrorSampling(event)) {
34249        return;
34250    }
34251    setTimeout1(async ()=>{
34252        try {
34253            await replay.sendBufferedReplayOrFlush();
34254        } catch (err) {
34255            replay.handleException(err);
34256        }
34257    });
34258}
34259function handleBeforeSendEvent(replay) {
34260    return (event)=>{
34261        if (!replay.isEnabled() || !isErrorEvent1(event)) {
34262            return;
34263        }
34264        handleHydrationError(replay, event);
34265    };
34266}
34267function handleHydrationError(replay, event) {
34268    var _event_exception_values_, _event_exception_values, _event_exception;
34269    const exceptionValue = (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : (_event_exception_values_ = _event_exception_values[0]) === null || _event_exception_values_ === void 0 ? void 0 : _event_exception_values_.value;
34270    if (typeof exceptionValue !== "string") {
34271        return;
34272    }
34273    if (// Only matches errors in production builds of react-dom
34274    // Example https://reactjs.org/docs/error-decoder.html?invariant=423
34275    // With newer React versions, the messages changed to a different website https://react.dev/errors/418
34276    exceptionValue.match(/(reactjs\.org\/docs\/error-decoder\.html\?invariant=|react\.dev\/errors\/)(418|419|422|423|425)/) || // Development builds of react-dom
34277    // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.
34278    // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.
34279    exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)) {
34280        const breadcrumb = createBreadcrumb({
34281            category: "replay.hydrate-error",
34282            data: {
34283                url: getLocationHref()
34284            }
34285        });
34286        addBreadcrumbEvent(replay, breadcrumb);
34287    }
34288}
34289function handleBreadcrumbs(replay) {
34290    const client = (0, __TURBOPACK__imported__module__250804__26["getClient"])();
34291    if (!client) {
34292        return;
34293    }
34294    client.on("beforeAddBreadcrumb", (breadcrumb)=>beforeAddBreadcrumb(replay, breadcrumb));
34295}
34296function beforeAddBreadcrumb(replay, breadcrumb) {
34297    if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {
34298        return;
34299    }
34300    const result = normalizeBreadcrumb(breadcrumb);
34301    if (result) {
34302        addBreadcrumbEvent(replay, result);
34303    }
34304}
34305function normalizeBreadcrumb(breadcrumb) {
34306    if (!isBreadcrumbWithCategory(breadcrumb) || [
34307        // fetch & xhr are handled separately,in handleNetworkBreadcrumbs
34308        "fetch",
34309        "xhr",
34310        // These two are breadcrumbs for emitted sentry events, we don't care about them
34311        "sentry.event",
34312        "sentry.transaction"
34313    ].includes(breadcrumb.category) || // We capture UI breadcrumbs separately
34314    breadcrumb.category.startsWith("ui.")) {
34315        return null;
34316    }
34317    if (breadcrumb.category === "console") {
34318        return normalizeConsoleBreadcrumb(breadcrumb);
34319    }
34320    return createBreadcrumb(breadcrumb);
34321}
34322function normalizeConsoleBreadcrumb(breadcrumb) {
34323    var _breadcrumb_data;
34324    const args = (_breadcrumb_data = breadcrumb.data) === null || _breadcrumb_data === void 0 ? void 0 : _breadcrumb_data.arguments;
34325    if (!Array.isArray(args) || args.length === 0) {
34326        return createBreadcrumb(breadcrumb);
34327    }
34328    let isTruncated = false;
34329    const normalizedArgs = args.map((arg)=>{
34330        if (!arg) {
34331            return arg;
34332        }
34333        if (typeof arg === "string") {
34334            if (arg.length > CONSOLE_ARG_MAX_SIZE) {
34335                isTruncated = true;
34336                return "".concat(arg.slice(0, CONSOLE_ARG_MAX_SIZE), "…");
34337            }
34338            return arg;
34339        }
34340        if (typeof arg === "object") {
34341            try {
34342                const normalizedArg = (0, __TURBOPACK__imported__module__45968__4["normalize"])(arg, 7);
34343                const stringified = JSON.stringify(normalizedArg);
34344                if (stringified.length > CONSOLE_ARG_MAX_SIZE) {
34345                    isTruncated = true;
34346                    return "".concat(JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE), "…");
34347                }
34348                return normalizedArg;
34349            } catch (unused) {}
34350        }
34351        return arg;
34352    });
34353    return createBreadcrumb({
34354        ...breadcrumb,
34355        data: {
34356            ...breadcrumb.data,
34357            arguments: normalizedArgs,
34358            ...isTruncated ? {
34359                _meta: {
34360                    warnings: [
34361                        "CONSOLE_ARG_TRUNCATED"
34362                    ]
34363                }
34364            } : {}
34365        }
34366    });
34367}
34368function isBreadcrumbWithCategory(breadcrumb) {
34369    return !!breadcrumb.category;
34370}
34371function isRrwebError(event, hint) {
34372    var _event_exception_values, _event_exception, _hint_originalException;
34373    if (event.type || !((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values.length)) {
34374        return false;
34375    }
34376    if ((_hint_originalException = hint.originalException) === null || _hint_originalException === void 0 ? void 0 : _hint_originalException.__rrweb__) {
34377        return true;
34378    }
34379    return false;
34380}
34381function resetReplayIdOnDynamicSamplingContext() {
34382    const dsc = (0, __TURBOPACK__imported__module__250804__26["getCurrentScope"])().getPropagationContext().dsc;
34383    if (dsc) {
34384        delete dsc.replay_id;
34385    }
34386    const activeSpan = (0, __TURBOPACK__imported__module__304661__21["getActiveSpan"])();
34387    if (activeSpan) {
34388        const dsc2 = (0, __TURBOPACK__imported__module__473753__6["getDynamicSamplingContextFromSpan"])(activeSpan);
34389        delete dsc2.replay_id;
34390    }
34391}
34392function setReplayIdOnDynamicSamplingContext(replayId) {
34393    const dsc = (0, __TURBOPACK__imported__module__250804__26["getCurrentScope"])().getPropagationContext().dsc;
34394    if (dsc) {
34395        dsc.replay_id = replayId;
34396    }
34397    const activeSpan = (0, __TURBOPACK__imported__module__304661__21["getActiveSpan"])();
34398    if (activeSpan) {
34399        const dsc2 = (0, __TURBOPACK__imported__module__473753__6["getDynamicSamplingContextFromSpan"])(activeSpan);
34400        dsc2.replay_id = replayId;
34401    }
34402}
34403function addFeedbackBreadcrumb(replay, event) {
34404    replay.triggerUserActivity();
34405    replay.addUpdate(()=>{
34406        if (!event.timestamp) {
34407            return true;
34408        }
34409        replay.throttledAddEvent({
34410            type: EventType.Custom,
34411            timestamp: event.timestamp * 1e3,
34412            data: {
34413                tag: "breadcrumb",
34414                payload: {
34415                    timestamp: event.timestamp,
34416                    type: "default",
34417                    category: "sentry.feedback",
34418                    data: {
34419                        feedbackId: event.event_id
34420                    }
34421                }
34422            }
34423        });
34424        return false;
34425    });
34426}
34427function shouldSampleForBufferEvent(replay, event) {
34428    if (replay.recordingMode !== "buffer") {
34429        return false;
34430    }
34431    if (event.message === UNABLE_TO_SEND_REPLAY) {
34432        return false;
34433    }
34434    if (!event.exception || event.type) {
34435        return false;
34436    }
34437    return isSampled(replay.getOptions().errorSampleRate);
34438}
34439function handleGlobalEventListener(replay) {
34440    return Object.assign((event, hint)=>{
34441        var _replay_session;
34442        if (replay.session && shouldRefreshSession(replay.session, {
34443            maxReplayDuration: replay.getOptions().maxReplayDuration,
34444            sessionIdleExpire: replay.timeouts.sessionIdleExpire
34445        })) {
34446            resetReplayIdOnDynamicSamplingContext();
34447        }
34448        if (!replay.isEnabled() || replay.isPaused()) {
34449            return event;
34450        }
34451        if (isReplayEvent(event)) {
34452            delete event.breadcrumbs;
34453            return event;
34454        }
34455        if (!isErrorEvent1(event) && !isTransactionEvent1(event) && !isFeedbackEvent(event)) {
34456            return event;
34457        }
vendor: 5,282 bytes, lines 34458-34641
34458        const isSessionActive = replay.checkAndHandleExpiredSession();
34459        if (!isSessionActive) {
34460            resetReplayIdOnDynamicSamplingContext();
34461            return event;
34462        }
34463        if (isFeedbackEvent(event)) {
34464            replay.flush();
34465            event.contexts.feedback.replay_id = replay.getSessionId();
34466            addFeedbackBreadcrumb(replay, event);
34467            return event;
34468        }
34469        if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {
34470            DEBUG_BUILD3 && debug.log("Ignoring error from rrweb internals", event);
34471            return null;
34472        }
34473        const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);
34474        const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === "session";
34475        if (shouldTagReplayId) {
34476            event.tags = {
34477                ...event.tags,
34478                replayId: replay.getSessionId()
34479            };
34480        }
34481        if (isErrorEventSampled && replay.recordingMode === "buffer" && ((_replay_session = replay.session) === null || _replay_session === void 0 ? void 0 : _replay_session.sampled) === "buffer") {
34482            const session = replay.session;
34483            session.dirty = true;
34484            if (replay.getOptions().stickySession) {
34485                saveSession(session);
34486            }
34487        }
34488        return event;
34489    }, {
34490        id: "Replay"
34491    });
34492}
34493function createPerformanceSpans(replay, entries) {
34494    return entries.map((param)=>{
34495        let { type, start, end, name, data } = param;
34496        const response = replay.throttledAddEvent({
34497            type: EventType.Custom,
34498            timestamp: start,
34499            data: {
34500                tag: "performanceSpan",
34501                payload: {
34502                    op: type,
34503                    description: name,
34504                    startTimestamp: start,
34505                    endTimestamp: end,
34506                    data
34507                }
34508            }
34509        });
34510        return typeof response === "string" ? Promise.resolve(null) : response;
34511    });
34512}
34513function handleHistory(handlerData) {
34514    const { from, to } = handlerData;
34515    const now = Date.now() / 1e3;
34516    return {
34517        type: "navigation.push",
34518        start: now,
34519        end: now,
34520        name: to,
34521        data: {
34522            previous: from
34523        }
34524    };
34525}
34526function handleHistorySpanListener(replay) {
34527    return (handlerData)=>{
34528        if (!replay.isEnabled()) {
34529            return;
34530        }
34531        const result = handleHistory(handlerData);
34532        if (result === null) {
34533            return;
34534        }
34535        replay.getContext().urls.push(result.name);
34536        replay.triggerUserActivity();
34537        replay.addUpdate(()=>{
34538            createPerformanceSpans(replay, [
34539                result
34540            ]);
34541            return false;
34542        });
34543    };
34544}
34545function shouldFilterRequest(replay, url) {
34546    if (DEBUG_BUILD3 && replay.getOptions()._experiments.traceInternals) {
34547        return false;
34548    }
34549    return isSentryRequestUrl(url, (0, __TURBOPACK__imported__module__250804__26["getClient"])());
34550}
34551function addNetworkBreadcrumb(replay, result) {
34552    if (!replay.isEnabled()) {
34553        return;
34554    }
34555    if (result === null) {
34556        return;
34557    }
34558    if (shouldFilterRequest(replay, result.name)) {
34559        return;
34560    }
34561    replay.addUpdate(()=>{
34562        createPerformanceSpans(replay, [
34563            result
34564        ]);
34565        return true;
34566    });
34567}
34568function getBodySize(body) {
34569    if (!body) {
34570        return void 0;
34571    }
34572    const textEncoder = new TextEncoder();
34573    try {
34574        if (typeof body === "string") {
34575            return textEncoder.encode(body).length;
34576        }
34577        if (body instanceof URLSearchParams) {
34578            return textEncoder.encode(body.toString()).length;
34579        }
34580        if (body instanceof FormData) {
34581            const formDataStr = serializeFormData(body);
34582            return textEncoder.encode(formDataStr).length;
34583        }
34584        if (body instanceof Blob) {
34585            return body.size;
34586        }
34587        if (body instanceof ArrayBuffer) {
34588            return body.byteLength;
34589        }
34590    } catch (unused) {}
34591    return void 0;
34592}
34593function parseContentLengthHeader(header) {
34594    if (!header) {
34595        return void 0;
34596    }
34597    const size = parseInt(header, 10);
34598    return isNaN(size) ? void 0 : size;
34599}
34600function mergeWarning(info, warning) {
34601    if (!info) {
34602        return {
34603            headers: {},
34604            size: void 0,
34605            _meta: {
34606                warnings: [
34607                    warning
34608                ]
34609            }
34610        };
34611    }
34612    const newMeta = {
34613        ...info._meta
34614    };
34615    const existingWarnings = newMeta.warnings || [];
34616    newMeta.warnings = [
34617        ...existingWarnings,
34618        warning
34619    ];
34620    info._meta = newMeta;
34621    return info;
34622}
34623function makeNetworkReplayBreadcrumb(type, data) {
34624    if (!data) {
34625        return null;
34626    }
34627    const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;
34628    const result = {
34629        type,
34630        start: startTimestamp / 1e3,
34631        end: endTimestamp / 1e3,
34632        name: url,
34633        data: {
34634            method,
34635            statusCode,
34636            request,
34637            response
34638        }
34639    };
34640    return result;
34641}
vendor: 4,519 bytes, lines 34642-34778
34642function buildSkippedNetworkRequestOrResponse(bodySize) {
34643    return {
34644        headers: {},
34645        size: bodySize,
34646        _meta: {
34647            warnings: [
34648                "URL_SKIPPED"
34649            ]
34650        }
34651    };
34652}
34653function buildNetworkRequestOrResponse(headers, bodySize, body) {
34654    if (!bodySize && Object.keys(headers).length === 0) {
34655        return void 0;
34656    }
34657    if (!bodySize) {
34658        return {
34659            headers
34660        };
34661    }
34662    if (!body) {
34663        return {
34664            headers,
34665            size: bodySize
34666        };
34667    }
34668    const info = {
34669        headers,
34670        size: bodySize
34671    };
34672    const { body: normalizedBody, warnings } = normalizeNetworkBody(body);
34673    info.body = normalizedBody;
34674    if (warnings === null || warnings === void 0 ? void 0 : warnings.length) {
34675        info._meta = {
34676            warnings
34677        };
34678    }
34679    return info;
34680}
34681function getAllowedHeaders(headers, allowedHeaders) {
34682    return Object.entries(headers).reduce((filteredHeaders, param)=>{
34683        let [key, value] = param;
34684        const normalizedKey = key.toLowerCase();
34685        if (allowedHeaders.includes(normalizedKey) && headers[key]) {
34686            filteredHeaders[normalizedKey] = value;
34687        }
34688        return filteredHeaders;
34689    }, {});
34690}
34691function normalizeNetworkBody(body) {
34692    if (!body || typeof body !== "string") {
34693        return {
34694            body
34695        };
34696    }
34697    const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;
34698    const isProbablyJson = _strIsProbablyJson(body);
34699    if (exceedsSizeLimit) {
34700        const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);
34701        if (isProbablyJson) {
34702            return {
34703                body: truncatedBody,
34704                warnings: [
34705                    "MAYBE_JSON_TRUNCATED"
34706                ]
34707            };
34708        }
34709        return {
34710            body: "".concat(truncatedBody, "…"),
34711            warnings: [
34712                "TEXT_TRUNCATED"
34713            ]
34714        };
34715    }
34716    if (isProbablyJson) {
34717        try {
34718            const jsonBody = JSON.parse(body);
34719            return {
34720                body: jsonBody
34721            };
34722        } catch (unused) {}
34723    }
34724    return {
34725        body
34726    };
34727}
34728function _strIsProbablyJson(str) {
34729    const first = str[0];
34730    const last = str[str.length - 1];
34731    return first === "[" && last === "]" || first === "{" && last === "}";
34732}
34733function urlMatches(url, urls) {
34734    const fullUrl = getFullUrl(url);
34735    return (0, __TURBOPACK__imported__module__821593__6["stringMatchesSomePattern"])(fullUrl, urls);
34736}
34737function getFullUrl(url) {
34738    let baseURI = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : WINDOW4.document.baseURI;
34739    if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith(WINDOW4.location.origin)) {
34740        return url;
34741    }
34742    const fixedUrl = new URL(url, baseURI);
34743    if (fixedUrl.origin !== new URL(baseURI).origin) {
34744        return url;
34745    }
34746    const fullUrl = fixedUrl.href;
34747    if (!url.endsWith("/") && fullUrl.endsWith("/")) {
34748        return fullUrl.slice(0, -1);
34749    }
34750    return fullUrl;
34751}
34752async function captureFetchBreadcrumbToReplay(breadcrumb, hint, options) {
34753    try {
34754        const data = await _prepareFetchData(breadcrumb, hint, options);
34755        const result = makeNetworkReplayBreadcrumb("resource.fetch", data);
34756        addNetworkBreadcrumb(options.replay, result);
34757    } catch (error) {
34758        DEBUG_BUILD3 && debug.exception(error, "Failed to capture fetch breadcrumb");
34759    }
34760}
34761function enrichFetchBreadcrumb(breadcrumb, hint) {
34762    const { input, response } = hint;
34763    const body = input ? getFetchRequestArgBody(input) : void 0;
34764    const reqSize = getBodySize(body);
34765    const resSize = response ? parseContentLengthHeader(response.headers.get("content-length")) : void 0;
34766    if (reqSize !== void 0) {
34767        breadcrumb.data.request_body_size = reqSize;
34768    }
34769    if (resSize !== void 0) {
34770        breadcrumb.data.response_body_size = resSize;
34771    }
34772}
34773async function _prepareFetchData(breadcrumb, hint, options) {
34774    const now = Date.now();
34775    const { startTimestamp = now, endTimestamp = now } = hint;
34776    const { url, method, status_code: statusCode = 0, request_body_size: requestBodySize, response_body_size: responseBodySize } = breadcrumb.data;
34777    const captureDetails = urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);
34778    const request = captureDetails ? _getRequestInfo(options, hint.input, requestBodySize) : buildSkippedNetwork
vendor: 6,276 bytes, lines 34778-34949
34778RequestOrResponse(requestBodySize);
34779    const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);
34780    return {
34781        startTimestamp,
34782        endTimestamp,
34783        url,
34784        method,
34785        statusCode,
34786        request,
34787        response
34788    };
34789}
34790function _getRequestInfo(param, input, requestBodySize) {
34791    let { networkCaptureBodies, networkRequestHeaders } = param;
34792    const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};
34793    if (!networkCaptureBodies) {
34794        return buildNetworkRequestOrResponse(headers, requestBodySize, void 0);
34795    }
34796    const requestBody = getFetchRequestArgBody(input);
34797    const [bodyStr, warning] = getBodyString(requestBody, debug);
34798    const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);
34799    if (warning) {
34800        return mergeWarning(data, warning);
34801    }
34802    return data;
34803}
34804async function _getResponseInfo(captureDetails, param, response, responseBodySize) {
34805    let { networkCaptureBodies, networkResponseHeaders } = param;
34806    if (!captureDetails && responseBodySize !== void 0) {
34807        return buildSkippedNetworkRequestOrResponse(responseBodySize);
34808    }
34809    const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};
34810    if (!response || !networkCaptureBodies && responseBodySize !== void 0) {
34811        return buildNetworkRequestOrResponse(headers, responseBodySize, void 0);
34812    }
34813    const [bodyText, warning] = await _parseFetchResponseBody(response);
34814    const result = getResponseData(bodyText, {
34815        networkCaptureBodies,
34816        responseBodySize,
34817        captureDetails,
34818        headers
34819    });
34820    if (warning) {
34821        return mergeWarning(result, warning);
34822    }
34823    return result;
34824}
34825function getResponseData(bodyText, param) {
34826    let { networkCaptureBodies, responseBodySize, captureDetails, headers } = param;
34827    try {
34828        const size = (bodyText === null || bodyText === void 0 ? void 0 : bodyText.length) && responseBodySize === void 0 ? getBodySize(bodyText) : responseBodySize;
34829        if (!captureDetails) {
34830            return buildSkippedNetworkRequestOrResponse(size);
34831        }
34832        if (networkCaptureBodies) {
34833            return buildNetworkRequestOrResponse(headers, size, bodyText);
34834        }
34835        return buildNetworkRequestOrResponse(headers, size, void 0);
34836    } catch (error) {
34837        DEBUG_BUILD3 && debug.exception(error, "Failed to serialize response body");
34838        return buildNetworkRequestOrResponse(headers, responseBodySize, void 0);
34839    }
34840}
34841async function _parseFetchResponseBody(response) {
34842    const res = _tryCloneResponse(response);
34843    if (!res) {
34844        return [
34845            void 0,
34846            "BODY_PARSE_ERROR"
34847        ];
34848    }
34849    try {
34850        const text = await _tryGetResponseText(res);
34851        return [
34852            text
34853        ];
34854    } catch (error) {
34855        if (error instanceof Error && error.message.indexOf("Timeout") > -1) {
34856            DEBUG_BUILD3 && debug.warn("Parsing text body from response timed out");
34857            return [
34858                void 0,
34859                "BODY_PARSE_TIMEOUT"
34860            ];
34861        }
34862        DEBUG_BUILD3 && debug.exception(error, "Failed to get text body from response");
34863        return [
34864            void 0,
34865            "BODY_PARSE_ERROR"
34866        ];
34867    }
34868}
34869function getAllHeaders(headers, allowedHeaders) {
34870    const allHeaders = {};
34871    allowedHeaders.forEach((header)=>{
34872        if (headers.get(header)) {
34873            allHeaders[header] = headers.get(header);
34874        }
34875    });
34876    return allHeaders;
34877}
34878function getRequestHeaders(fetchArgs, allowedHeaders) {
34879    if (fetchArgs.length === 1 && typeof fetchArgs[0] !== "string") {
34880        return getHeadersFromOptions(fetchArgs[0], allowedHeaders);
34881    }
34882    if (fetchArgs.length === 2) {
34883        return getHeadersFromOptions(fetchArgs[1], allowedHeaders);
34884    }
34885    return {};
34886}
34887function getHeadersFromOptions(input, allowedHeaders) {
34888    if (!input) {
34889        return {};
34890    }
34891    const headers = input.headers;
34892    if (!headers) {
34893        return {};
34894    }
34895    if (headers instanceof Headers) {
34896        return getAllHeaders(headers, allowedHeaders);
34897    }
34898    if (Array.isArray(headers)) {
34899        return {};
34900    }
34901    return getAllowedHeaders(headers, allowedHeaders);
34902}
34903function _tryCloneResponse(response) {
34904    try {
34905        return response.clone();
34906    } catch (error) {
34907        DEBUG_BUILD3 && debug.exception(error, "Failed to clone response body");
34908    }
34909}
34910function _tryGetResponseText(response) {
34911    return new Promise((resolve, reject)=>{
34912        const timeout = setTimeout1(()=>reject(new Error("Timeout while trying to read response body")), 500);
34913        _getResponseText(response).then((txt)=>resolve(txt), (reason)=>reject(reason)).finally(()=>clearTimeout(timeout));
34914    });
34915}
34916async function _getResponseText(response) {
34917    return await response.text();
34918}
34919async function captureXhrBreadcrumbToReplay(breadcrumb, hint, options) {
34920    try {
34921        const data = _prepareXhrData(breadcrumb, hint, options);
34922        const result = makeNetworkReplayBreadcrumb("resource.xhr", data);
34923        addNetworkBreadcrumb(options.replay, result);
34924    } catch (error) {
34925        DEBUG_BUILD3 && debug.exception(error, "Failed to capture xhr breadcrumb");
34926    }
34927}
34928function enrichXhrBreadcrumb(breadcrumb, hint) {
34929    const { xhr, input } = hint;
34930    if (!xhr) {
34931        return;
34932    }
34933    const reqSize = getBodySize(input);
34934    const resSize = xhr.getResponseHeader("content-length") ? parseContentLengthHeader(xhr.getResponseHeader("content-length")) : _getBodySize(xhr.response, xhr.responseType);
34935    if (reqSize !== void 0) {
34936        breadcrumb.data.request_body_size = reqSize;
34937    }
34938    if (resSize !== void 0) {
34939        breadcrumb.data.response_body_size = resSize;
34940    }
34941}
34942function _prepareXhrData(breadcrumb, hint, options) {
34943    const now = Date.now();
34944    const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;
34945    const { url, method, status_code: statusCode = 0, request_body_size: requestBodySize, response_body_size: responseBodySize } = breadcrumb.data;
34946    if (!url) {
34947        return null;
34948    }
34949    if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {
34950        const request2 = buildSkippedNetworkRequestOrResponse(requestBodySize);
34951        const response2 = buildSkippedNetworkRequestOrResponse(responseBodySize);
34952        return {
34953            startTimestamp,
34954            endTimestamp,
34955            url,
34956            method,
34957            statusCode,
34958            request: request2,
34959            response: response2
34960        };
34961    }
34962    const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];
34963    const networkRequestHeaders = xhrInfo ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders) : {};
34964    const networkResponseHeaders = getAllowedHeaders(parseXhrResponseHeaders(xhr), options.networkResponseHeaders);
34965    const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input, debug) : [
34966        void 0
34967    ];
34968    const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [
34969        void 0
34970    ];
34971    const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);
34972    const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);
34973    return {
34974        startTimestamp,
34975        endTimestamp,
34976        url,
34977        method,
34978        statusCode,
34979        request: requestWarning ? mergeWarning(request, requestWarning) : request,
34980        response: responseWarning ? mergeWarning(response, responseWarning) : response
34981    };
34982}
34983function _getXhrResponseBody(xhr) {
34984    const errors = [];
34985    try {
34986        return [
34987            xhr.responseText
34988        ];
34989    } catch (e) {
34990        errors.push(e);
34991    }
34992    try {
34993        return _parseXhrResponse(xhr.response, xhr.responseType);
34994    } catch (e) {
34995        errors.push(e);
34996    }
34997    DEBUG_BUILD3 && debug.warn("Failed to get xhr response body", ...errors);
34998    return [
34999        void 0
35000    ];
35001}
35002function _parseXhrResponse(body, responseType) {
35003    try {
35004        if (typeof body === "string") {
35005            return [
35006                body
35007            ];
35008        }
35009        if (body instanceof Document) {
35010            return [
35011                body.body.outerHTML
35012            ];
35013        }
35014        if (responseType === "json" && (0, __TURBOPACK__imported__module__453288__14["isObjectLike"])(body)) {
35015            return [
35016                JSON.stringify(body)
35017            ];
35018        }
35019        if (!body) {
35020            return [
35021                void 0
35022            ];
35023        }
35024    } catch (error) {
35025        DEBUG_BUILD3 && debug.exception(error, "Failed to serialize body", body);
35026        return [
35027            void 0,
35028            "BODY_PARSE_ERROR"
35029        ];
35030    }
35031    DEBUG_BUILD3 && debug.log("Skipping network body because of body type", body);
35032    return [
35033        void 0,
35034        "UNPARSEABLE_BODY_TYPE"
35035    ];
35036}
35037function _getBodySize(body, responseType) {
35038    try {
35039        const bodyStr = responseType === "json" && (0, __TURBOPACK__imported__module__453288__14["isObjectLike"])(body) ? JSON.stringify(body) : body;
35040        return getBodySize(bodyStr);
35041    } catch (unused) {
35042        return void 0;
35043    }
35044}
35045function handleNetworkBreadcrumbs(replay) {
35046    const client = (0, __TURBOPACK__imported__module__250804__26["getClient"])();
35047    try {
35048        const { networkDetailAllowUrls, networkDetailDenyUrls, networkCaptureBodies, networkRequestHeaders, networkResponseHeaders } = replay.getOptions();
35049        const options = {
35050            replay,
35051            networkDetailAllowUrls,
35052            networkDetailDenyUrls,
35053            networkCaptureBodies,
35054            networkRequestHeaders,
35055            networkResponseHeaders
35056        };
35057        if (client) {
35058            client.on("beforeAddBreadcrumb", (breadcrumb, hint)=>beforeAddNetworkBreadcrumb(options, breadcrumb, hint));
35059        }
35060    } catch (unused) {}
35061}
35062function beforeAddNetworkBreadcrumb(options, breadcrumb, hint) {
35063    if (!breadcrumb.data) {
35064        return;
35065    }
35066    try {
35067        if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {
35068            enrichXhrBreadcrumb(breadcrumb, hint);
35069            captureXhrBreadcrumbToReplay(breadcrumb, hint, options);
35070        }
35071        if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {
35072            enrichFetchBreadcrumb(breadcrumb, hint);
35073            captureFetchBreadcrumbToReplay(breadcrumb, hint, options);
35074        }
35075    } catch (e) {
35076        DEBUG_BUILD3 && debug.exception(e, "Error when enriching network breadcrumb");
35077    }
35078}
35079function _isXhrBreadcrumb(breadcrumb) {
35080    return breadcrumb.category === "xhr";
35081}
35082function _isFetchBreadcrumb(breadcrumb) {
35083    return breadcrumb.category === "fetch";
35084}
35085function _isXhrHint(hint) {
35086    return hint === null || hint === void 0 ? void 0 : hint.xhr;
35087}
35088function _isFetchHint(hint) {
35089    return (hint === null || hint === void 0 ? void 0 : hint.input) !== void 0;
35090}
35091function addGlobalListeners(replay) {
35092    const client = (0, __TURBOPACK__imported__module__250804__26["getClient"])();
35093    addClickKeypressInstrumentationHandler(handleDomListener(replay));
35094    addHistoryInstrumentationHandler(handleHistorySpanListener(replay));
35095    handleBreadcrumbs(replay);
35096    handleNetworkBreadcrumbs(replay);
35097    const eventProcessor = handleGlobalEventListener(replay);
35098    (0, __TURBOPACK__imported__module__662537__6["addEventProcessor"])(eventProcessor);
35099    if (client) {
35100        client.on("beforeSendEvent", handleBeforeSendEvent(replay));
35101        client.on("afterSendEvent", handleAfterSendEvent(replay));
35102        client.on("createDsc", (dsc)=>{
35103            const replayId = replay.getSessionId();
35104            if (replayId && replay.isEnabled() && replay.recordingMode === "session") {
35105                const isSessionActive = replay.checkAndHandleExpiredSession();
35106                if (isSessionActive) {
35107                    dsc.replay_id = replayId;
35108                }
35109            }
35110        });
35111        client.on("processSegmentSpan", handleProcessSegmentSpan(replay));
35112        client.on("spanStart", (span)=>{
35113            replay.lastActiveSpan = span;
35114        });
35115        client.on("spanEnd", (span)=>{
35116            replay.lastActiveSpan = span;
35117        });
35118        client.on("beforeSendFeedback", async (feedbackEvent, options)=>{
35119            var _feedbackEvent_contexts;
35120            const replayId = replay.getSessionId();
35121            if ((options === null || options === void 0 ? void 0 : options.includeReplay) && replay.isEnabled() && replayId && ((_feedbackEvent_contexts = feedbackEvent.contexts) === null || _feedbackEvent_contexts === void 0 ? void 0 : _feedbackEvent_contexts.feedback)) {
35122                if (feedbackEvent.contexts.feedback.source === "api") {
35123                    await replay.sendBufferedReplayOrFlush();
35124                }
35125                feedbackEvent.contexts.feedback.replay_id = replayId;
35126            }
35127        });
35128        client.on("openFeedbackWidget", async ()=>{
35129            await replay.sendBufferedReplayOrFlush();
35130        });
35131    }
35132}
35133async function addMemoryEntry(replay) {
35134    try {
35135        return Promise.all(createPerformanceSpans(replay, [
35136            // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)
35137            createMemoryEntry(WINDOW4.performance.memory)
35138        ]));
35139    } catch (unused) {
35140        return [];
35141    }
35142}
35143function createMemoryEntry(memoryEntry) {
35144    const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;
35145    const time = Date.now() / 1e3;
35146    return {
35147        type: "memory",
35148        name: "memory",
35149        start: time,
35150        end: time,
35151        data: {
35152            memory: {
35153                jsHeapSizeLimit,
35154                totalJSHeapSize,
35155                usedJSHeapSize
35156            }
35157        }
35158    };
35159}
35160function debounce1(func, wait, options) {
35161    return debounce(func, wait, {
35162        ...options,
35163        // @ts-expect-error - Not quite sure why these types do not match, but this is fine
35164        setTimeoutImpl: setTimeout1
35165    });
35166}
35167const NAVIGATOR = __TURBOPACK__imported__module__225304__14["GLOBAL_OBJ"].navigator;
35168function getRecordingSamplingOptions() {
35169    var _ref, _ref1;
35170    if (/iPhone|iPad|iPod/i.test((_ref = NAVIGATOR === null || NAVIGATOR === void 0 ? void 0 : NAVIGATOR.userAgent) !== null && _ref !== void 0 ? _ref : "") || /Macintosh/i.test((_ref1 = NAVIGATOR === null || NAVIGATOR === void 0 ? void 0 : NAVIGATOR.userAgent) !== null && _ref1 !== void 0 ? _ref1 : "") && (NAVIGATOR === null || NAVIGATOR === void 0 ? void 0 : NAVIGATOR.maxTouchPoints) && (NAVIGATOR === null || NAVIGATOR === void 0 ? void 0 : NAVIGATOR.maxTouchPoints) > 1) {
35171        return {
35172            sampling: {
35173                mousemove: false
35174            }
35175        };
35176    }
35177    return {};
35178}
35179function getHandleRecordingEmit(replay) {
35180    let hadFirstEvent = false;
35181    return (event, _isCheckout)=>{
35182        try {
35183            if (!replay.checkAndHandleExpiredSession()) {
35184                DEBUG_BUILD3 && debug.warn("Received replay event after session expired.");
35185                return;
35186            }
35187            const isCheckout = _isCheckout || !hadFirstEvent;
35188            hadFirstEvent = true;
35189            syncMirrorAttributesFromMutationEvent(event);
35190            if (replay.clickDetector) {
35191                updateClickDetectorForRecordingEvent(replay.clickDetector, event);
35192            }
35193            replay.addUpdate(()=>{
35194                if (replay.recordingMode === "buffer" && isCheckout) {
35195                    replay.setInitialState();
35196                }
35197                if (!addEventSync(replay, event, isCheckout)) {
35198                    return true;
35199                }
35200                if (!isCheckout) {
35201                    return false;
35202                }
35203                const session = replay.session;
35204                addSettingsEvent(replay, isCheckout);
35205                if (replay.recordingMode === "buffer" && session && replay.eventBuffer && !session.dirty) {
35206                    const earliestEvent = replay.eventBuffer.getEarliestTimestamp();
35207                    if (earliestEvent) {
35208                        DEBUG_BUILD3 && debug.log("Updating session start time to earliest event in buffer to ".concat(new Date(earliestEvent)));
35209                        session.started = earliestEvent;
35210                        if (replay.getOptions().stickySession) {
35211                            saveSession(session);
35212                        }
35213                    }
35214                }
35215                if (session === null || session === void 0 ? void 0 : session.previousSessionId) {
35216                    return true;
35217                }
35218                if (replay.recordingMode === "session") {
35219                    void replay.flush();
35220                }
35221                return true;
35222            });
35223        } catch (error) {
35224            replay.handleException(error);
35225        }
35226    };
35227}
35228function syncMirrorAttributesFromMutationEvent(event) {
35229    const data = event.data;
35230    if (event.type !== EventType.IncrementalSnapshot || !data || typeof data !== "object" || !("source" in data) || data.source !== IncrementalSource.Mutation || !("attributes" in data) || !Array.isArray(data.attributes)) {
35231        return;
35232    }
35233    for (const mutation of data.attributes){
35234        const node = record.mirror.getNode(mutation.id);
35235        const meta = node && record.mirror.getMeta(node);
35236        if ((meta === null || meta === void 0 ? void 0 : meta.type) !== NodeType.Element) {
35237            continue;
35238        }
35239        for (const [attributeName, value] of Object.entries(mutation.attributes)){
35240            if (value === null) {
35241                delete meta.attributes[attributeName];
35242            } else {
35243                meta.attributes[attributeName] = value;
35244            }
35245        }
35246    }
35247}
35248function createOptionsEvent(replay) {
35249    const options = replay.getOptions();
35250    return {
35251        type: EventType.Custom,
35252        timestamp: Date.now(),
35253        data: {
35254            tag: "options",
35255            payload: {
35256                shouldRecordCanvas: replay.isRecordingCanvas(),
35257                sessionSampleRate: options.sessionSampleRate,
35258                errorSampleRate: options.errorSampleRate,
35259                useCompressionOption: options.useCompression,
35260                blockAllMedia: options.blockAllMedia,
35261                maskAllText: options.maskAllText,
35262                maskAllInputs: options.maskAllInputs,
35263                useCompression: replay.eventBuffer ? replay.eventBuffer.type === "worker" : false,
35264                networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,
35265                networkCaptureBodies: options.networkCaptureBodies,
35266                networkRequestHasHeaders: options.networkRequestHeaders.length > 0,
35267                networkResponseHasHeaders: options.networkResponseHeaders.length > 0
35268            }
35269        }
35270    };
35271}
35272function addSettingsEvent(replay, isCheckout) {
35273    var _replay_session;
35274    if (!isCheckout || ((_replay_session = replay.session) === null || _replay_session === void 0 ? void 0 : _replay_session.segmentId) !== 0) {
35275        return;
35276    }
35277    addEventSync(replay, createOptionsEvent(replay), false);
35278}
35279function closestElementOfNode(node) {
35280    if (!node) {
35281        return null;
35282    }
35283    try {
35284        const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;
35285        return el;
35286    } catch (unused) {
35287        return null;
35288    }
35289}
35290function createReplayEnvelope(replayEvent, recordingData, dsn, tunnel) {
35291    return (0, __TURBOPACK__imported__module__67486__5["createEnvelope"])((0, __TURBOPACK__imported__module__67486__5["createEventEnvelopeHeaders"])(replayEvent, (0, __TURBOPACK__imported__module__67486__5["getSdkMetadataForEnvelopeHeader"])(replayEvent), tunnel, dsn), [
35292        [
35293            {
35294                type: "replay_event"
35295            },
35296            replayEvent
35297        ],
35298        [
35299            {
35300                type: "replay_recording",
35301                // If string then we need to encode to UTF8, otherwise will have
35302                // wrong size. TextEncoder has similar browser support to
35303                // MutationObserver, although it does not accept IE11.
35304                length: typeof recordingData === "string" ? new TextEncoder().encode(recordingData).length : recordingData.length
35305            },
35306            recordingData
35307        ]
35308    ]);
35309}
35310function prepareRecordingData(param) {
35311    let { recordingData, headers } = param;
35312    let payloadWithSequence;
35313    const replayHeaders = "".concat(JSON.stringify(headers), "\n");
35314    if (typeof recordingData === "string") {
35315        payloadWithSequence = "".concat(replayHeaders).concat(recordingData);
35316    } else {
35317        const enc = new TextEncoder();
35318        const sequence = enc.encode(replayHeaders);
35319        payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);
35320        payloadWithSequence.set(sequence);
35321        payloadWithSequence.set(recordingData, sequence.length);
35322    }
35323    return payloadWithSequence;
35324}
35325async function prepareReplayEvent(param) {
35326    let { client, scope, replayId: event_id, event } = param;
35327    const integrations = typeof client["_integrations"] === "object" && client["_integrations"] !== null && !Array.isArray(client["_integrations"]) ? Object.keys(client["_integrations"]) : void 0;
35328    const eventHint = {
35329        event_id,
35330        integrations
35331    };
35332    client.emit("preprocessEvent", event, eventHint);
35333    const preparedEvent = await (0, __TURBOPACK__imported__module__213186__1["prepareEvent"])(client.getOptions(), event, eventHint, scope, client, (0, __TURBOPACK__imported__module__250804__26["getIsolationScope"])());
35334    if (!preparedEvent) {
35335        return null;
35336    }
35337    client.emit("postprocessEvent", preparedEvent, eventHint);
35338    preparedEvent.platform = preparedEvent.platform || "javascript";
35339    const metadata = client.getSdkMetadata();
35340    const { name, version, settings } = (metadata === null || metadata === void 0 ? void 0 : metadata.sdk) || {};
35341    preparedEvent.sdk = {
35342        ...preparedEvent.sdk,
35343        name: name || "sentry.javascript.unknown",
35344        version: version || "0.0.0",
35345        settings
35346    };
35347    return preparedEvent;
35348}
35349async function sendReplayRequest(param) {
35350    let { recordingData, replayId, segmentId: segment_id, eventContext, timestamp, session } = param;
35351    const preparedRecordingData = prepareRecordingData({
35352        recordingData,
35353        headers: {
35354            segment_id
35355        }
35356    });
35357    const { urls, errorIds, traceIds, segmentNames, initialTimestamp } = eventContext;
35358    const client = (0, __TURBOPACK__imported__module__250804__26["getClient"])();
35359    const scope = (0, __TURBOPACK__imported__module__250804__26["getCurrentScope"])();
35360    const transport = client === null || client === void 0 ? void 0 : client.getTransport();
35361    const dsn = client === null || client === void 0 ? void 0 : client.getDsn();
35362    if (!client || !transport || !dsn || !session.sampled) {
35363        return Promise.resolve({});
35364    }
35365    const baseEvent = {
35366        type: REPLAY_EVENT_NAME,
35367        replay_start_timestamp: initialTimestamp / 1e3,
35368        timestamp: timestamp / 1e3,
35369        error_ids: errorIds,
35370        trace_ids: traceIds,
35371        segment_names: segmentNames,
35372        urls,
35373        replay_id: replayId,
35374        segment_id,
35375        replay_type: session.sampled
35376    };
35377    const replayEvent = await prepareReplayEvent({
35378        scope,
35379        client,
35380        replayId,
35381        event: baseEvent
35382    });
35383    if (!replayEvent) {
35384        client.recordDroppedEvent("event_processor", "replay");
35385        DEBUG_BUILD3 && debug.log("An event processor returned `null`, will not send event.");
35386        return Promise.resolve({});
35387    }
35388    delete replayEvent.sdkProcessingMetadata;
35389    const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);
35390    let response;
35391    try {
35392        response = await transport.send(envelope);
35393    } catch (err) {
35394        const error = new Error(UNABLE_TO_SEND_REPLAY);
35395        try {
35396            error.cause = err;
35397        } catch (unused) {}
35398        throw error;
35399    }
35400    const rateLimits = updateRateLimits({}, response);
35401    if (isRateLimited(rateLimits, "replay")) {
35402        throw new RateLimitError(rateLimits);
35403    }
35404    if (typeof response.statusCode === "number" && (response.statusCode < 200 || response.statusCode >= 300)) {
35405        throw new TransportStatusCodeError(response.statusCode);
35406    }
35407    return response;
35408}
35409class TransportStatusCodeError extends Error {
35410    constructor(statusCode){
35411        super("Transport returned status code ".concat(statusCode));
35412    }
35413}
35414class RateLimitError extends Error {
35415    constructor(rateLimits){
35416        super("Rate limit hit");
35417        this.rateLimits = rateLimits;
35418    }
35419}
35420class ReplayDurationLimitError extends Error {
35421    constructor(){
35422        super("Session is too long, not sending replay");
35423    }
35424}
35425async function sendReplay(replayData) {
35426    let retryConfig = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
35427        count: 0,
35428        interval: RETRY_BASE_INTERVAL
35429    };
35430    const { recordingData, onError } = replayData;
35431    if (!recordingData.length) {
35432        return;
35433    }
35434    try {
35435        await sendReplayRequest(replayData);
35436        return true;
35437    } catch (err) {
35438        if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {
35439            throw err;
35440        }
35441        (0, __TURBOPACK__imported__module__662537__6["setContext"])("Replays", {
35442            _retryCount: retryConfig.count
35443        });
35444        if (onError) {
35445            onError(err);
35446        }
35447        if (retryConfig.count >= RETRY_MAX_COUNT) {
35448            const error = new Error("".concat(UNABLE_TO_SEND_REPLAY, " - max retries exceeded"));
35449            try {
35450                error.cause = err;
35451            } catch (unused) {}
35452            throw error;
35453        }
35454        retryConfig.interval *= ++retryConfig.count;
35455        return new Promise((resolve, reject)=>{
35456            setTimeout1(async ()=>{
35457                try {
35458                    await sendReplay(replayData, retryConfig);
35459                    resolve(true);
35460                } catch (err2) {
35461                    reject(err2);
35462                }
35463            }, retryConfig.interval);
35464        });
35465    }
35466}
35467const THROTTLED = "__THROTTLED";
35468const SKIPPED = "__SKIPPED";
35469function throttle(fn, maxCount, durationSeconds) {
35470    const counter = /* @__PURE__ */ new Map();
35471    const _cleanup = (now)=>{
35472        const threshold = now - durationSeconds;
35473        counter.forEach((_value, key)=>{
35474            if (key < threshold) {
35475                counter.delete(key);
35476            }
35477        });
35478    };
35479    const _getTotalCount = ()=>{
35480        return [
35481            ...counter.values()
35482        ].reduce((a, b)=>a + b, 0);
35483    };
35484    let isThrottled = false;
35485    return function() {
35486        for(var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++){
35487            rest[_key] = arguments[_key];
35488        }
35489        const now = Math.floor(Date.now() / 1e3);
35490        _cleanup(now);
35491        if (_getTotalCount() >= maxCount) {
35492            const wasThrottled = isThrottled;
35493            isThrottled = true;
35494            return wasThrottled ? SKIPPED : THROTTLED;
35495        }
35496        isThrottled = false;
35497        const count = counter.get(now) || 0;
35498        counter.set(now, count + 1);
35499        return fn(...rest);
35500    };
35501}
35502class ReplayContainer {
35503    /** Get the event context. */ getContext() {
35504        return this._context;
35505    }
35506    /** If recording is currently enabled. */ isEnabled() {
35507        return this._isEnabled;
35508    }
35509    /** If recording is currently paused. */ isPaused() {
35510        return this._isPaused;
35511    }
35512    /**
35513   * Determine if canvas recording is enabled
35514   */ isRecordingCanvas() {
35515        return Boolean(this._canvas);
35516    }
35517    /** Get the replay integration options. */ getOptions() {
35518        return this._options;
35519    }
35520    /** A wrapper to conditionally capture exceptions. */ handleException(error) {
35521        DEBUG_BUILD3 && debug.exception(error);
35522        if (this._options.onError) {
35523            this._options.onError(error);
35524        }
35525    }
35526    /**
35527   * Initializes the plugin based on sampling configuration. Should not be
35528   * called outside of constructor.
35529   */ initializeSampling(previousSessionId) {
35530        const { errorSampleRate, sessionSampleRate } = this._options;
35531        const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;
35532        this._requiresManualStart = requiresManualStart;
35533        if (requiresManualStart) {
35534            return;
35535        }
35536        this._initializeSessionForSampling(previousSessionId);
35537        if (!this.session) {
35538            DEBUG_BUILD3 && debug.exception(new Error("Unable to initialize and create session"));
35539            return;
35540        }
35541        if (this.session.sampled === false) {
35542            return;
35543        }
35544        this.recordingMode = this.session.sampled === "buffer" && this.session.segmentId === 0 ? "buffer" : "session";
35545        DEBUG_BUILD3 && debug.infoTick("Starting replay in ".concat(this.recordingMode, " mode"));
35546        this._initializeRecording();
35547    }
35548    /**
35549   * Start a replay regardless of sampling rate. Calling this will always
35550   * create a new session. Will log a message if replay is already in progress.
35551   *
35552   * Creates or loads a session, attaches listeners to varying events (DOM,
35553   * _performanceObserver, Recording, Sentry SDK, etc)
35554   */ start() {
35555        if (this._isEnabled && this.recordingMode === "session") {
35556            DEBUG_BUILD3 && debug.log("Recording is already in progress");
35557            return;
35558        }
35559        if (this._isEnabled && this.recordingMode === "buffer") {
35560            DEBUG_BUILD3 && debug.log("Buffering is in progress, call `flush()` to save the replay");
35561            return;
35562        }
35563        DEBUG_BUILD3 && debug.infoTick("Starting replay in session mode");
35564        this._updateUserActivity();
35565        const session = loadOrCreateSession({
35566            maxReplayDuration: this._options.maxReplayDuration,
35567            sessionIdleExpire: this.timeouts.sessionIdleExpire
35568        }, {
35569            stickySession: this._options.stickySession,
35570            // This is intentional: create a new session-based replay when calling `start()`
35571            sessionSampleRate: 1,
35572            allowBuffering: false
35573        });
35574        this.session = session;
35575        this.recordingMode = "session";
35576        this._initializeRecording();
35577    }
35578    /**
35579   * Start replay buffering. Buffers until `flush()` is called or, if
35580   * `replaysOnErrorSampleRate` > 0, an error occurs.
vendor: 1,051 bytes, lines 35581-35608
35581   */ startBuffering() {
35582        if (this._isEnabled) {
35583            DEBUG_BUILD3 && debug.log("Buffering is in progress, call `flush()` to save the replay");
35584            return;
35585        }
35586        DEBUG_BUILD3 && debug.infoTick("Starting replay in buffer mode");
35587        const session = loadOrCreateSession({
35588            sessionIdleExpire: this.timeouts.sessionIdleExpire,
35589            maxReplayDuration: this._options.maxReplayDuration
35590        }, {
35591            stickySession: this._options.stickySession,
35592            sessionSampleRate: 0,
35593            allowBuffering: true
35594        });
35595        this.session = session;
35596        this.recordingMode = "buffer";
35597        this._initializeRecording();
35598    }
35599    /**
35600   * Start recording.
35601   *
35602   * Note that this will cause a new DOM checkout
35603   */ startRecording() {
35604        try {
35605            const canvasOptions = this._canvas;
35606            this._stopRecording = record({
35607                ...this._recordingOptions,
35608                // When running in error sampling mode, we need to overwrite `checkoutEveryNms`
35609                // Without this, it would record forever, until an error happens, which we don't want
35610                // instead, we'll always keep the last 60 seconds of replay before an error happened
35611                ...this.recordingMode === "buffer" ? {
35612                    checkoutEveryNms: BUFFER_CHECKOUT_TIME
35613                } : // Otherwise, use experimental option w/ min checkout time of 6 minutes
35614                // This is to improve playback seeking as there could potentially be
35615                // less mutations to process in the worse cases.
35616                //
35617                // checkout by "N" events is probably ideal, but means we have less
35618                // control about the number of checkouts we make (which generally
35619                // increases replay size)
35620                this._options._experiments.continuousCheckout && {
35621                    // Minimum checkout time is 6 minutes
35622                    checkoutEveryNms: Math.max(36e4, this._options._experiments.continuousCheckout)
35623                },
35624                emit: getHandleRecordingEmit(this),
35625                ...getRecordingSamplingOptions(),
35626                onMutation: this._onMutationHandler.bind(this),
35627                ...canvasOptions ? {
35628                    recordCanvas: canvasOptions.recordCanvas,
35629                    getCanvasManager: canvasOptions.getCanvasManager,
35630                    sampling: canvasOptions.sampling,
35631                    dataURLOptions: canvasOptions.dataURLOptions
35632                } : {}
35633            });
35634        } catch (err) {
35635            this.handleException(err);
35636        }
35637    }
35638    /**
35639   * Stops the recording, if it was running.
35640   *
35641   * Returns true if it was previously stopped, or is now stopped,
35642   * otherwise false.
35643   */ stopRecording() {
35644        try {
35645            if (this._stopRecording) {
35646                this._stopRecording();
35647                this._stopRecording = void 0;
35648            }
35649            return true;
35650        } catch (err) {
35651            this.handleException(err);
35652            return false;
35653        }
35654    }
35655    /**
35656   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK
35657   * does not support a teardown
35658   */ async stop() {
35659        let { forceFlush = false, reason } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
35660        var _this_session, _getClient;
35661        if (!this._isEnabled) {
35662            return;
35663        }
35664        this._isEnabled = false;
35665        this.recordingMode = "buffer";
35666        const stopReason = reason !== null && reason !== void 0 ? reason : "manual";
35667        (_getClient = (0, __TURBOPACK__imported__module__250804__26["getClient"])()) === null || _getClient === void 0 ? void 0 : _getClient.emit("replayEnd", {
35668            sessionId: (_this_session = this.session) === null || _this_session === void 0 ? void 0 : _this_session.id,
35669            reason: stopReason
35670        });
35671        try {
35672            var _this_eventBuffer;
35673            DEBUG_BUILD3 && debug.log("Stopping Replay triggered by ".concat(stopReason));
35674            resetReplayIdOnDynamicSamplingContext();
35675            this._removeListeners();
35676            this.stopRecording();
35677            this._debouncedFlush.cancel();
35678            if (forceFlush) {
35679                await this._flush({
35680                    force: true
35681                });
35682            }
35683            (_this_eventBuffer = this.eventBuffer) === null || _this_eventBuffer === void 0 ? void 0 : _this_eventBuffer.destroy();
35684            this.eventBuffer = null;
35685            clearSession(this);
35686        } catch (err) {
35687            this.handleException(err);
35688        }
35689    }
35690    /**
35691   * Pause some replay functionality. See comments for `_isPaused`.
35692   * This differs from stop as this only stops DOM recording, it is
35693   * not as thorough of a shutdown as `stop()`.
35694   */ pause() {
35695        if (this._isPaused) {
35696            return;
35697        }
35698        this._isPaused = true;
35699        this.stopRecording();
35700        DEBUG_BUILD3 && debug.log("Pausing replay");
35701    }
35702    /**
35703   * Resumes recording, see notes for `pause().
35704   *
35705   * Note that calling `startRecording()` here will cause a
35706   * new DOM checkout.`
35707   */ resume() {
35708        if (!this._isPaused || !this._checkSession()) {
35709            return;
35710        }
35711        this._isPaused = false;
35712        this.startRecording();
35713        DEBUG_BUILD3 && debug.log("Resuming replay");
35714    }
35715    /**
35716   * If not in "session" recording mode, flush event buffer which will create a new replay.
35717   * Unless `continueRecording` is false, the replay will continue to record and
35718   * behave as a "session"-based replay.
35719   *
35720   * Otherwise, queue up a flush.
35721   */ async sendBufferedReplayOrFlush() {
35722        let { continueRecording = true } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
35723        if (this.recordingMode === "session") {
35724            return this.flushImmediate();
35725        }
35726        const activityTime = Date.now();
35727        DEBUG_BUILD3 && debug.log("Converting buffer to session");
35728        await this.flushImmediate();
35729        const hasStoppedRecording = this.stopRecording();
35730        if (!continueRecording || !hasStoppedRecording) {
35731            return;
35732        }
35733        if (this.recordingMode === "session") {
35734            return;
35735        }
35736        this.recordingMode = "session";
35737        if (this.session) {
35738            this.session.dirty = false;
35739            this._updateUserActivity(activityTime);
35740            this._updateSessionActivity(activityTime);
35741            this._maybeSaveSession();
35742            setReplayIdOnDynamicSamplingContext(this.session.id);
35743        }
35744        this.startRecording();
35745    }
35746    /**
35747   * We want to batch uploads of replay events. Save events only if
35748   * `<flushMinDelay>` milliseconds have elapsed since the last event
35749   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.
35750   *
35751   * Accepts a callback to perform side-effects and returns true to stop batch
35752   * processing and hand back control to caller.
35753   */ addUpdate(cb) {
35754        const cbResult = cb();
35755        if (this.recordingMode === "buffer" || !this._isEnabled) {
35756            return;
35757        }
35758        if (cbResult === true) {
35759            return;
35760        }
35761        this._debouncedFlush();
35762    }
35763    /**
35764   * Updates the user activity timestamp and resumes recording. This should be
35765   * called in an event handler for a user action that we consider as the user
35766   * being "active" (e.g. a mouse click).
35767   */ triggerUserActivity() {
35768        this._updateUserActivity();
35769        if (!this._stopRecording) {
35770            if (!this._checkSession()) {
35771                return;
35772            }
35773            this.resume();
35774            return;
35775        }
35776        this.checkAndHandleExpiredSession();
35777        this._updateSessionActivity();
35778    }
35779    /**
35780   * Updates the user activity timestamp *without* resuming
35781   * recording. Some user events (e.g. keydown) can be create
35782   * low-value replays that only contain the keypress as a
35783   * breadcrumb. Instead this would require other events to
35784   * create a new replay after a session has expired.
35785   */ updateUserActivity() {
35786        this._updateUserActivity();
35787        this._updateSessionActivity();
35788    }
35789    /**
35790   * Only flush if `this.recordingMode === 'session'`
35791   */ conditionalFlush() {
35792        if (this.recordingMode === "buffer") {
35793            return Promise.resolve();
35794        }
35795        return this.flushImmediate();
35796    }
35797    /**
35798   * Flush using debounce flush
35799   */ flush() {
35800        return this._debouncedFlush();
35801    }
35802    /**
35803   * Always flush via `_debouncedFlush` so that we do not have flushes triggered
35804   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be
35805   * cases of multiple flushes happening closely together.
35806   */ flushImmediate() {
35807        this._debouncedFlush();
35808        return this._debouncedFlush.flush();
35809    }
35810    /**
35811   * Cancels queued up flushes.
35812   */ cancelFlush() {
35813        this._debouncedFlush.cancel();
35814    }
35815    /** Get the current session (=replay) ID
35816   *
35817   * @param onlyIfSampled - If true, will only return the session ID if the session is sampled.
35818   */ getSessionId(onlyIfSampled) {
35819        var _this_session, _this_session1;
35820        if (onlyIfSampled && ((_this_session = this.session) === null || _this_session === void 0 ? void 0 : _this_session.sampled) === false) {
35821            return void 0;
35822        }
35823        return (_this_session1 = this.session) === null || _this_session1 === void 0 ? void 0 : _this_session1.id;
35824    }
35825    /**
35826   * Checks if recording should be stopped due to user inactivity. Otherwise
35827   * check if session is expired and create a new session if so. Triggers a new
35828   * full snapshot on new session.
35829   *
35830   * Returns true if session is not expired, false otherwise.
35831   * @hidden
35832   */ checkAndHandleExpiredSession() {
35833        var _this_session;
35834        if (this._lastActivity && isExpired(this._lastActivity, this.timeouts.sessionIdlePause) && ((_this_session = this.session) === null || _this_session === void 0 ? void 0 : _this_session.sampled) === "session") {
35835            this.pause();
35836            return;
35837        }
35838        if (!this._checkSession()) {
35839            return false;
35840        }
35841        return true;
35842    }
35843    /**
35844   * Capture some initial state that can change throughout the lifespan of the
35845   * replay. This is required because otherwise they would be captured at the
35846   * first flush.
35847   */ setInitialState() {
35848        const urlPath = "".concat(WINDOW4.location.pathname).concat(WINDOW4.location.hash).concat(WINDOW4.location.search);
35849        const url = "".concat(WINDOW4.location.origin).concat(urlPath);
35850        this.performanceEntries = [];
35851        this.replayPerformanceEntries = [];
35852        this._clearContext();
35853        this._context.initialUrl = url;
35854        this._context.initialTimestamp = Date.now();
35855        this._context.urls.push(url);
35856    }
35857    /**
35858   * Add a breadcrumb event, that may be throttled.
35859   * If it was throttled, we add a custom breadcrumb to indicate that.
35860   */ throttledAddEvent(event, isCheckout) {
35861        const res = this._throttledAddEvent(event, isCheckout);
35862        if (res === THROTTLED) {
35863            const breadcrumb = createBreadcrumb({
35864                category: "replay.throttled"
35865            });
35866            this.addUpdate(()=>{
35867                return !addEventSync(this, {
35868                    type: ReplayEventTypeCustom,
35869                    timestamp: breadcrumb.timestamp || 0,
35870                    data: {
35871                        tag: "breadcrumb",
35872                        payload: breadcrumb,
35873                        metric: true
35874                    }
35875                });
35876            });
35877        }
35878        return res;
35879    }
35880    /**
35881   * This will get the parametrized route name of the current page.
35882   * This is only available if performance is enabled, and if an instrumented router is used.
35883   */ getCurrentRoute() {
35884        const lastActiveSpan = this.lastActiveSpan || (0, __TURBOPACK__imported__module__304661__21["getActiveSpan"])();
35885        const lastRootSpan = lastActiveSpan && (0, __TURBOPACK__imported__module__304661__21["getRootSpan"])(lastActiveSpan);
35886        const attributes = lastRootSpan && (0, __TURBOPACK__imported__module__304661__21["spanToJSON"])(lastRootSpan).data || {};
35887        const source = attributes[__TURBOPACK__imported__module__519988__20["SEMANTIC_ATTRIBUTE_SENTRY_SOURCE"]];
35888        if (!lastRootSpan || !source || ![
35889            "route",
35890            "custom"
35891        ].includes(source)) {
35892            return void 0;
35893        }
35894        return (0, __TURBOPACK__imported__module__304661__21["spanToJSON"])(lastRootSpan).description;
35895    }
35896    /**
35897   * Initialize and start all listeners to varying events (DOM,
35898   * Performance Observer, Recording, Sentry SDK, etc)
35899   */ _initializeRecording() {
35900        this.setInitialState();
35901        this._updateSessionActivity();
35902        this.eventBuffer = createEventBuffer({
35903            useCompression: this._options.useCompression,
35904            workerUrl: this._options.workerUrl
35905        });
35906        this._removeListeners();
35907        this._addListeners();
35908        this._isEnabled = true;
35909        this._isPaused = false;
35910        if (this.session) {
35911            var _getClient;
35912            (_getClient = (0, __TURBOPACK__imported__module__250804__26["getClient"])()) === null || _getClient === void 0 ? void 0 : _getClient.emit("replayStart", {
35913                sessionId: this.session.id,
35914                recordingMode: this.recordingMode
35915            });
35916        }
35917        this.startRecording();
35918        if (this.recordingMode === "session" && this.session) {
35919            setReplayIdOnDynamicSamplingContext(this.session.id);
35920        }
35921    }
35922    /**
35923   * Loads (or refreshes) the current session.
35924   */ _initializeSessionForSampling(previousSessionId) {
35925        const allowBuffering = this._options.errorSampleRate > 0;
35926        const session = loadOrCreateSession({
35927            sessionIdleExpire: this.timeouts.sessionIdleExpire,
35928            maxReplayDuration: this._options.maxReplayDuration,
35929            previousSessionId
35930        }, {
35931            stickySession: this._options.stickySession,
35932            sessionSampleRate: this._options.sessionSampleRate,
35933            allowBuffering
35934        });
35935        this.session = session;
35936    }
35937    /**
35938   * Checks and potentially refreshes the current session.
35939   * Returns false if session is not recorded.
35940   */ _checkSession() {
35941        if (!this.session) {
35942            return false;
vendor: 5,026 bytes, lines 35943-36075
35943        }
35944        const currentSession = this.session;
35945        if (shouldRefreshSession(currentSession, {
35946            sessionIdleExpire: this.timeouts.sessionIdleExpire,
35947            maxReplayDuration: this._options.maxReplayDuration
35948        })) {
35949            this._refreshSession(currentSession);
35950            return false;
35951        }
35952        return true;
35953    }
35954    /**
35955   * Refresh a session with a new one.
35956   * This stops the current session (without forcing a flush, as that would never work since we are expired),
35957   * and then does a new sampling based on the refreshed session.
35958   */ async _refreshSession(session) {
35959        if (!this._isEnabled) {
35960            return;
35961        }
35962        await this.stop({
35963            reason: "sessionExpired"
35964        });
35965        this.initializeSampling(session.id);
35966    }
35967    /**
35968   * Adds listeners to record events for the replay
35969   */ _addListeners() {
35970        try {
35971            WINDOW4.document.addEventListener("visibilitychange", this._handleVisibilityChange);
35972            WINDOW4.addEventListener("blur", this._handleWindowBlur);
35973            WINDOW4.addEventListener("focus", this._handleWindowFocus);
35974            WINDOW4.addEventListener("keydown", this._handleKeyboardEvent);
35975            if (this.clickDetector) {
35976                this.clickDetector.addListeners();
35977            }
35978            if (!this._hasInitializedCoreListeners) {
35979                addGlobalListeners(this);
35980                this._hasInitializedCoreListeners = true;
35981            }
35982        } catch (err) {
35983            this.handleException(err);
35984        }
35985        this._performanceCleanupCallback = setupPerformanceObserver(this);
35986    }
35987    /**
35988   * Cleans up listeners that were created in `_addListeners`
35989   */ _removeListeners() {
35990        try {
35991            WINDOW4.document.removeEventListener("visibilitychange", this._handleVisibilityChange);
35992            WINDOW4.removeEventListener("blur", this._handleWindowBlur);
35993            WINDOW4.removeEventListener("focus", this._handleWindowFocus);
35994            WINDOW4.removeEventListener("keydown", this._handleKeyboardEvent);
35995            if (this.clickDetector) {
35996                this.clickDetector.removeListeners();
35997            }
35998            if (this._performanceCleanupCallback) {
35999                this._performanceCleanupCallback();
36000            }
36001        } catch (err) {
36002            this.handleException(err);
36003        }
36004    }
36005    /**
36006   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)
36007   */ _doChangeToBackgroundTasks(breadcrumb) {
36008        if (!this.session) {
36009            return;
36010        }
36011        const expired = shouldRefreshSession(this.session, {
36012            maxReplayDuration: this._options.maxReplayDuration,
36013            sessionIdleExpire: this.timeouts.sessionIdleExpire
36014        });
36015        if (expired) {
36016            resetReplayIdOnDynamicSamplingContext();
36017            return;
36018        }
36019        if (breadcrumb) {
36020            this._createCustomBreadcrumb(breadcrumb);
36021        }
36022        void this.conditionalFlush();
36023    }
36024    /**
36025   * Tasks to run when we consider a page to be visible (via focus and/or visibility)
36026   */ _doChangeToForegroundTasks(breadcrumb) {
36027        if (!this.session) {
36028            return;
36029        }
36030        const isSessionActive = this.checkAndHandleExpiredSession();
36031        if (!isSessionActive) {
36032            DEBUG_BUILD3 && debug.log("Document has become active, but session has expired");
36033            return;
36034        }
36035        if (breadcrumb) {
36036            this._createCustomBreadcrumb(breadcrumb);
36037        }
36038    }
36039    /**
36040   * Update user activity (across session lifespans)
36041   */ _updateUserActivity() {
36042        let _lastActivity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Date.now();
36043        this._lastActivity = _lastActivity;
36044    }
36045    /**
36046   * Updates the session's last activity timestamp
36047   */ _updateSessionActivity() {
36048        let _lastActivity = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : Date.now();
36049        if (this.session) {
36050            this.session.lastActivity = _lastActivity;
36051            this._maybeSaveSession();
36052        }
36053    }
36054    /**
36055   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb
36056   */ _createCustomBreadcrumb(breadcrumb) {
36057        this.addUpdate(()=>{
36058            this.throttledAddEvent({
36059                type: EventType.Custom,
36060                timestamp: breadcrumb.timestamp || 0,
36061                data: {
36062                    tag: "breadcrumb",
36063                    payload: breadcrumb
36064                }
36065            });
36066        });
36067    }
36068    /**
36069   * Observed performance events are added to `this.performanceEntries`. These
36070   * are included in the replay event before it is finished and sent to Sentry.
36071   */ _addPerformanceEntries() {
36072        let performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);
36073        this.performanceEntries = [];
36074        this.replayPerformanceEntries = [];
36075        if (this._requiresManualStart) {
36076            const initialTimestampInSeconds = this._context.initialTimestamp / 1e3;
36077            performanceEntries = performanceEntries.filter((entry)=>entry.start >= initialTimestampInSeconds);
36078        }
36079        return Promise.all(createPerformanceSpans(this, performanceEntries));
36080    }
36081    /**
36082   * Clear _context
36083   */ _clearContext() {
36084        this._context.errorIds.clear();
36085        this._context.traceIds.clear();
36086        this._context.segmentNames.clear();
36087        this._context.urls = [];
36088    }
36089    /** Update the initial timestamp based on the buffer content. */ _updateInitialTimestampFromEventBuffer() {
36090        const { session, eventBuffer } = this;
36091        if (!session || !eventBuffer || this._requiresManualStart) {
36092            return;
36093        }
36094        if (session.segmentId) {
36095            return;
36096        }
36097        const earliestEvent = eventBuffer.getEarliestTimestamp();
36098        if (earliestEvent && earliestEvent < this._context.initialTimestamp) {
36099            this._context.initialTimestamp = earliestEvent;
36100        }
36101    }
36102    /**
36103   * Return and clear _context
36104   */ _popEventContext() {
36105        const _context = {
36106            initialTimestamp: this._context.initialTimestamp,
36107            initialUrl: this._context.initialUrl,
36108            errorIds: Array.from(this._context.errorIds),
36109            traceIds: Array.from(this._context.traceIds),
36110            segmentNames: Array.from(this._context.segmentNames),
36111            urls: this._context.urls
36112        };
36113        this._clearContext();
36114        return _context;
36115    }
36116    /**
36117   * Flushes replay event buffer to Sentry.
36118   *
36119   * Performance events are only added right before flushing - this is
36120   * due to the buffered performance observer events.
36121   *
36122   * Should never be called directly, only by `flush`
36123   */ async _runFlush() {
36124        var _this_eventBuffer;
36125        const replayId = this.getSessionId();
36126        if (!this.session || !this.eventBuffer || !replayId) {
36127            DEBUG_BUILD3 && debug.error("No session or eventBuffer found to flush.");
36128            return;
36129        }
36130        await this._addPerformanceEntries();
36131        if (!((_this_eventBuffer = this.eventBuffer) === null || _this_eventBuffer === void 0 ? void 0 : _this_eventBuffer.hasEvents)) {
36132            return;
36133        }
36134        await addMemoryEntry(this);
36135        if (!this.eventBuffer) {
36136            return;
36137        }
36138        if (replayId !== this.getSessionId()) {
36139            return;
36140        }
36141        try {
36142            this._updateInitialTimestampFromEventBuffer();
36143            const timestamp = Date.now();
36144            if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 3e4) {
36145                throw new ReplayDurationLimitError();
36146            }
36147            const eventContext = this._popEventContext();
36148            const segmentId = this.session.segmentId++;
36149            this._maybeSaveSession();
36150            const recordingData = await this.eventBuffer.finish();
36151            await sendReplay({
36152                replayId,
36153                recordingData,
36154                segmentId,
36155                eventContext,
36156                session: this.session,
36157                timestamp,
36158                onError: (err)=>this.handleException(err)
36159            });
36160        } catch (err) {
36161            this.handleException(err);
36162            this.stop({
36163                reason: "sendError"
36164            });
36165            const client = (0, __TURBOPACK__imported__module__250804__26["getClient"])();
36166            if (client) {
36167                let dropReason;
36168                if (err instanceof RateLimitError) {
36169                    dropReason = "ratelimit_backoff";
36170                } else if (err instanceof ReplayDurationLimitError) {
36171                    dropReason = "invalid";
36172                } else {
36173                    dropReason = "send_error";
36174                }
36175                client.recordDroppedEvent(dropReason, "replay");
36176            }
36177        }
36178    }
36179    /**
36180   * Flush recording data to Sentry. Creates a lock so that only a single flush
36181   * can be active at a time. Do not call this directly.
36182   */ async _flush() {
36183        let { force = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
36184        if (!this._isEnabled && !force) {
36185            return;
36186        }
36187        if (!this.checkAndHandleExpiredSession()) {
36188            DEBUG_BUILD3 && debug.error("Attempting to finish replay event after session expired.");
36189            return;
36190        }
36191        if (!this.session) {
36192            return;
36193        }
36194        const start = this.session.started;
36195        const now = Date.now();
36196        const duration = now - start;
36197        this._debouncedFlush.cancel();
36198        const tooShort = duration < this._options.minReplayDuration;
36199        const tooLong = duration > this._options.maxReplayDuration + 5e3;
36200        if (tooShort || tooLong) {
36201            DEBUG_BUILD3 && debug.log("Session duration (".concat(Math.floor(duration / 1e3), "s) is too ").concat(tooShort ? "short" : "long", ", not sending replay."));
36202            if (tooShort) {
36203                this._debouncedFlush();
36204            }
36205            return;
36206        }
36207        const eventBuffer = this.eventBuffer;
36208        if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {
36209            DEBUG_BUILD3 && debug.log("Flushing initial segment without checkout.");
36210        }
36211        const _flushInProgress = !!this._flushLock;
36212        if (!this._flushLock) {
36213            this._flushLock = this._runFlush();
36214        }
36215        try {
36216            await this._flushLock;
36217        } catch (err) {
36218            this.handleException(err);
36219        } finally{
36220            this._flushLock = void 0;
36221            if (_flushInProgress) {
36222                this._debouncedFlush();
36223            }
36224        }
36225    }
36226    /** Save the session, if it is sticky */ _maybeSaveSession() {
36227        if (this.session && this._options.stickySession) {
36228            saveSession(this.session);
36229        }
36230    }
36231    /** Handler for rrweb.record.onMutation */ _onMutationHandler(mutations) {
36232        const { ignoreMutations } = this._options._experiments;
36233        if (ignoreMutations === null || ignoreMutations === void 0 ? void 0 : ignoreMutations.length) {
36234            if (mutations.some((mutation)=>{
36235                const el = closestElementOfNode(mutation.target);
36236                const selector = ignoreMutations.join(",");
36237                return el === null || el === void 0 ? void 0 : el.matches(selector);
36238            })) {
36239                return false;
vendor: 5,698 bytes, lines 36240-36394
36240            }
36241        }
36242        const count = mutations.length;
36243        const mutationLimit = this._options.mutationLimit;
36244        const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;
36245        const overMutationLimit = mutationLimit && count > mutationLimit;
36246        if (count > mutationBreadcrumbLimit || overMutationLimit) {
36247            const breadcrumb = createBreadcrumb({
36248                category: "replay.mutations",
36249                data: {
36250                    count,
36251                    limit: overMutationLimit
36252                }
36253            });
36254            this._createCustomBreadcrumb(breadcrumb);
36255        }
36256        if (overMutationLimit) {
36257            this.stop({
36258                reason: "mutationLimit",
36259                forceFlush: this.recordingMode === "session"
36260            });
36261            return false;
36262        }
36263        return true;
36264    }
36265    constructor({ options, recordingOptions }){
36266        this.eventBuffer = null;
36267        this.performanceEntries = [];
36268        this.replayPerformanceEntries = [];
36269        this.recordingMode = "session";
36270        this.timeouts = {
36271            sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,
36272            sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION
36273        };
36274        this._lastActivity = Date.now();
36275        this._isEnabled = false;
36276        this._isPaused = false;
36277        this._requiresManualStart = false;
36278        this._hasInitializedCoreListeners = false;
36279        this._context = {
36280            errorIds: /* @__PURE__ */ new Set(),
36281            traceIds: /* @__PURE__ */ new Set(),
36282            segmentNames: /* @__PURE__ */ new Set(),
36283            urls: [],
36284            initialTimestamp: Date.now(),
36285            initialUrl: ""
36286        };
36287        this._recordingOptions = recordingOptions;
36288        this._options = options;
36289        this._debouncedFlush = debounce1(()=>this._flush(), this._options.flushMinDelay, {
36290            maxWait: this._options.flushMaxDelay
36291        });
36292        this._throttledAddEvent = throttle((event, isCheckout)=>addEvent(this, event, isCheckout), // Max 300 events...
36293        300, // ... per 5s
36294        5);
36295        const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();
36296        const slowClickConfig = slowClickTimeout ? {
36297            threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),
36298            timeout: slowClickTimeout,
36299            scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,
36300            ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(",") : ""
36301        } : void 0;
36302        if (slowClickConfig) {
36303            this.clickDetector = new ClickDetector(this, slowClickConfig);
36304        }
36305        if (DEBUG_BUILD3) {
36306            const experiments = options._experiments;
36307            debug.setConfig({
36308                captureExceptions: !!experiments.captureExceptions,
36309                traceInternals: !!experiments.traceInternals
36310            });
36311        }
36312        this._handleVisibilityChange = ()=>{
36313            if (WINDOW4.document.visibilityState === "visible") {
36314                this._doChangeToForegroundTasks();
36315            } else {
36316                this._doChangeToBackgroundTasks();
36317            }
36318        };
36319        this._handleWindowBlur = ()=>{
36320            const breadcrumb = createBreadcrumb({
36321                category: "ui.blur"
36322            });
36323            this._doChangeToBackgroundTasks(breadcrumb);
36324        };
36325        this._handleWindowFocus = ()=>{
36326            const breadcrumb = createBreadcrumb({
36327                category: "ui.focus"
36328            });
36329            this._doChangeToForegroundTasks(breadcrumb);
36330        };
36331        this._handleKeyboardEvent = (event)=>{
36332            handleKeyboardEvent(this, event);
36333        };
36334    }
36335}
36336function getOption(selectors, defaultSelectors) {
36337    return [
36338        ...selectors,
36339        // sentry defaults
36340        ...defaultSelectors
36341    ].join(",");
36342}
36343function getPrivacyOptions(param) {
36344    let { mask, unmask, block, unblock, ignore } = param;
36345    const defaultBlockedElements = [
36346        "base",
36347        "iframe[srcdoc]:not([src])"
36348    ];
36349    const maskSelector = getOption(mask, [
36350        ".sentry-mask",
36351        "[data-sentry-mask]"
36352    ]);
36353    const unmaskSelector = getOption(unmask, []);
36354    const options = {
36355        // We are making the decision to make text and input selectors the same
36356        maskTextSelector: maskSelector,
36357        unmaskTextSelector: unmaskSelector,
36358        blockSelector: getOption(block, [
36359            ".sentry-block",
36360            "[data-sentry-block]",
36361            ...defaultBlockedElements
36362        ]),
36363        unblockSelector: getOption(unblock, []),
36364        ignoreSelector: getOption(ignore, [
36365            ".sentry-ignore",
36366            "[data-sentry-ignore]",
36367            'input[type="file"]'
36368        ])
36369    };
36370    return options;
36371}
36372function maskAttribute(param) {
36373    let { el, key, maskAttributes, maskAllText, privacyOptions, value } = param;
36374    if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {
36375        return value;
36376    }
36377    const masksNamedAttribute = maskAttributes.includes(key);
36378    const masksSubmitButtonValue = maskAllText && key === "value" && el.tagName === "INPUT" && [
36379        "submit",
36380        "button"
36381    ].includes(el.getAttribute("type") || "");
36382    if (masksNamedAttribute || masksSubmitButtonValue) {
36383        return value.replace(/[\S]/g, "*");
36384    }
36385    return value;
36386}
36387const MEDIA_SELECTORS = 'img,image,svg,video,object,picture,embed,map,audio,link[rel="icon"],link[rel="apple-touch-icon"]';
36388const DEFAULT_NETWORK_HEADERS = [
36389    "content-length",
36390    "content-type",
36391    "accept"
36392];
36393const ORIGINAL_BODY = /* @__PURE__ */ Symbol.for("sentry__originalRequestBody");
36394let _initialized = false;
36395let _isRequestInstrumented = false;
36396function _INTERNAL_instrumentRequestInterface() {
36397    if (typeof Request === "undefined" || _isRequestInstrumented) {
36398        return;
36399    }
36400    const OriginalRequest = Request;
36401    try {
36402        const SentryRequest = function(input, init) {
36403            const request = new OriginalRequest(input, init);
36404            if ((init === null || init === void 0 ? void 0 : init.body) != null) {
36405                request[ORIGINAL_BODY] = init.body;
36406            }
36407            return request;
36408        };
36409        SentryRequest.prototype = OriginalRequest.prototype;
36410        __TURBOPACK__imported__module__225304__14["GLOBAL_OBJ"].Request = SentryRequest;
36411        _isRequestInstrumented = true;
36412    } catch (unused) {}
36413}
36414const replayIntegration = (options)=>{
36415    return new Replay(options);
36416};
36417class Replay {
36418    /** If replay has already been initialized */ get _isInitialized() {
36419        return _initialized;
36420    }
36421    /** Update _isInitialized */ set _isInitialized(value) {
36422        _initialized = value;
36423    }
36424    /**
36425   * Setup and initialize replay container
36426   */ afterAllSetup(client) {
36427        if (!(0, __TURBOPACK__imported__module__901538__3["isBrowser"])() || this._replay) {
36428            return;
36429        }
36430        if (this._initialOptions.attachRawBodyFromRequest) {
36431            _INTERNAL_instrumentRequestInterface();
36432        }
36433        this._setup(client);
36434        this._initialize(client);
36435    }
36436    /**
36437   * Start a replay regardless of sampling rate. Calling this will always
36438   * create a new session. Will log a message if replay is already in progress.
36439   *
36440   * Creates or loads a session, attaches listeners to varying events (DOM,
36441   * PerformanceObserver, Recording, Sentry SDK, etc)
36442   */ start() {
36443        if (!this._replay) {
36444            return;
36445        }
36446        this._replay.start();
36447    }
36448    /**
36449   * Start replay buffering. Buffers until `flush()` is called or, if
36450   * `replaysOnErrorSampleRate` > 0, until an error occurs.
vendor: 7,182 bytes, lines 36451-36624
36451   */ startBuffering() {
36452        if (!this._replay) {
36453            return;
36454        }
36455        this._replay.startBuffering();
36456    }
36457    /**
36458   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK
36459   * does not support a teardown
36460   *
36461   * @param options.flush - Whether to flush the pending replay segment when stopping.
36462   * When recording in `session` mode, `stop()` flushes the buffered-but-unsent segment by
36463   * default (`flush: true`), matching the previous behavior. Pass `flush: false` to stop
36464   * recording without sending that pending segment — useful when a user withdraws consent
36465   * and no further data should leave the browser.
36466   *
36467   * Note: `flush: false` only prevents the *pending* (final) segment from being sent. It does
36468   * **not** retract segments that were already sent earlier during `session` recording.
36469   */ stop(options) {
36470        var _ref;
36471        if (!this._replay) {
36472            return Promise.resolve();
36473        }
36474        return this._replay.stop({
36475            forceFlush: (_ref = options === null || options === void 0 ? void 0 : options.flush) !== null && _ref !== void 0 ? _ref : this._replay.recordingMode === "session",
36476            reason: "manual"
36477        });
36478    }
36479    /**
36480   * If not in "session" recording mode, flush event buffer which will create a new replay.
36481   * If replay is not enabled, a new session replay is started.
36482   * Unless `continueRecording` is false, the replay will continue to record and
36483   * behave as a "session"-based replay.
36484   *
36485   * Otherwise, queue up a flush.
36486   */ flush(options) {
36487        if (!this._replay) {
36488            return Promise.resolve();
36489        }
36490        if (!this._replay.isEnabled()) {
36491            this._replay.start();
36492            return Promise.resolve();
36493        }
36494        return this._replay.sendBufferedReplayOrFlush(options);
36495    }
36496    /**
36497   * Get the current session ID.
36498   *
36499   * @param onlyIfSampled - If true, will only return the session ID if the session is sampled.
36500   *
36501   */ getReplayId(onlyIfSampled) {
36502        var _this__replay;
36503        if (!((_this__replay = this._replay) === null || _this__replay === void 0 ? void 0 : _this__replay.isEnabled())) {
36504            return;
36505        }
36506        return this._replay.getSessionId(onlyIfSampled);
36507    }
36508    /**
36509   * Get the current recording mode. This can be either `session` or `buffer`.
36510   *
36511   * `session`: Recording the whole session, sending it continuously
36512   * `buffer`: Always keeping the last 60s of recording, requires:
36513   *   - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs
36514   *   - or calling `flush()` to send the replay
36515   */ getRecordingMode() {
36516        var _this__replay;
36517        if (!((_this__replay = this._replay) === null || _this__replay === void 0 ? void 0 : _this__replay.isEnabled())) {
36518            return;
36519        }
36520        return this._replay.recordingMode;
36521    }
36522    processSpan(span) {
36523        const replayId = this.getReplayId(true);
36524        if (replayId) {
36525            safeSetSpanJSONAttributes(span, {
36526                "sentry.replay_id": replayId
36527            });
36528            if (this.getRecordingMode() === "buffer") {
36529                safeSetSpanJSONAttributes(span, {
36530                    "sentry._internal.replay_is_buffering": true
36531                });
36532            }
36533        }
36534    }
36535    /**
36536   * Initializes replay.
36537   */ _initialize(client) {
36538        if (!this._replay) {
36539            return;
36540        }
36541        this._maybeLoadFromReplayCanvasIntegration(client);
36542        this._replay.initializeSampling();
36543    }
36544    /** Setup the integration. */ _setup(client) {
36545        const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client);
36546        this._replay = new ReplayContainer({
36547            options: finalOptions,
36548            recordingOptions: this._recordingOptions
36549        });
36550    }
36551    /** Get canvas options from ReplayCanvas integration, if it is also added. */ _maybeLoadFromReplayCanvasIntegration(client) {
36552        try {
36553            const canvasIntegration = client.getIntegrationByName("ReplayCanvas");
36554            if (!canvasIntegration) {
36555                return;
36556            }
36557            this._replay["_canvas"] = canvasIntegration.getOptions();
36558        } catch (unused) {}
36559    }
36560    constructor({ flushMinDelay = DEFAULT_FLUSH_MIN_DELAY, flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY, minReplayDuration = MIN_REPLAY_DURATION, maxReplayDuration = MAX_REPLAY_DURATION, stickySession = true, useCompression = true, workerUrl, _experiments = {}, maskAllText = true, maskAllInputs = true, blockAllMedia = true, mutationBreadcrumbLimit = 750, mutationLimit = 1e4, slowClickTimeout = 7e3, slowClickIgnoreSelectors = [], networkDetailAllowUrls = [], networkDetailDenyUrls = [], networkCaptureBodies = true, networkRequestHeaders = [], networkResponseHeaders = [], mask = [], maskAttributes = [
36561        "title",
36562        "placeholder",
36563        "aria-label"
36564    ], unmask = [], block = [], unblock = [], ignore = [], maskFn, beforeAddRecordingEvent, beforeErrorSampling, onError, attachRawBodyFromRequest = false } = {}){
36565        this.name = "Replay";
36566        const privacyOptions = getPrivacyOptions({
36567            mask,
36568            unmask,
36569            block,
36570            unblock,
36571            ignore
36572        });
36573        this._recordingOptions = {
36574            maskAllInputs,
36575            maskAllText,
36576            maskInputOptions: {
36577                password: true
36578            },
36579            maskTextFn: maskFn,
36580            maskInputFn: maskFn,
36581            maskAttributeFn: (key, value, el)=>maskAttribute({
36582                    maskAttributes,
36583                    maskAllText,
36584                    privacyOptions,
36585                    key,
36586                    value,
36587                    el
36588                }),
36589            ...privacyOptions,
36590            // Our defaults
36591            slimDOMOptions: "all",
36592            inlineStylesheet: true,
36593            // Disable inline images as it will increase segment/replay size
36594            inlineImages: false,
36595            // collect fonts, but be aware that `sentry.io` needs to be an allowed
36596            // origin for playback
36597            collectFonts: true,
36598            errorHandler: (err)=>{
36599                try {
36600                    err.__rrweb__ = true;
36601                } catch (unused) {}
36602            },
36603            // experimental support for recording iframes from different origins
36604            recordCrossOriginIframes: Boolean(_experiments.recordCrossOriginIframes)
36605        };
36606        this._initialOptions = {
36607            flushMinDelay,
36608            flushMaxDelay,
36609            minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),
36610            maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),
36611            stickySession,
36612            useCompression,
36613            workerUrl,
36614            blockAllMedia,
36615            maskAllInputs,
36616            maskAllText,
36617            mutationBreadcrumbLimit,
36618            mutationLimit,
36619            slowClickTimeout,
36620            slowClickIgnoreSelectors,
36621            networkDetailAllowUrls,
36622            networkDetailDenyUrls,
36623            networkCaptureBodies,
36624            networkRequestHeaders: _getMergedNetworkHeaders(network
36624RequestHeaders),
36625            networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),
36626            beforeAddRecordingEvent,
36627            beforeErrorSampling,
36628            onError,
36629            attachRawBodyFromRequest,
36630            _experiments
36631        };
36632        if (this._initialOptions.blockAllMedia) {
36633            this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector ? MEDIA_SELECTORS : "".concat(this._recordingOptions.blockSelector, ",").concat(MEDIA_SELECTORS);
36634            this._recordingOptions.ignoreCSSAttributes = /* @__PURE__ */ new Set([
36635                "background-image"
36636            ]);
36637        }
36638        if (this._isInitialized && (0, __TURBOPACK__imported__module__901538__3["isBrowser"])()) {
36639            throw new Error("Multiple Sentry Session Replay instances are not supported");
36640        }
36641        this._isInitialized = true;
36642    }
36643}
36644function loadReplayOptionsFromClient(initialOptions, client) {
36645    const opt = client.getOptions();
36646    const finalOptions = {
36647        sessionSampleRate: 0,
36648        errorSampleRate: 0,
36649        ...initialOptions
36650    };
36651    const replaysSessionSampleRate = (0, __TURBOPACK__imported__module__170637__3["parseSampleRate"])(opt.replaysSessionSampleRate);
36652    const replaysOnErrorSampleRate = (0, __TURBOPACK__imported__module__170637__3["parseSampleRate"])(opt.replaysOnErrorSampleRate);
36653    if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {
36654        (0, __TURBOPACK__imported__module__272598__37["consoleSandbox"])(()=>{
36655            console.warn("Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.");
36656        });
36657    }
36658    if (replaysSessionSampleRate != null) {
36659        finalOptions.sessionSampleRate = replaysSessionSampleRate;
36660    }
36661    if (replaysOnErrorSampleRate != null) {
36662        finalOptions.errorSampleRate = replaysOnErrorSampleRate;
36663    }
36664    return finalOptions;
36665}
36666function _getMergedNetworkHeaders(headers) {
36667    return [
36668        ...DEFAULT_NETWORK_HEADERS,
36669        ...headers.map((header)=>header.toLowerCase())
36670    ];
36671}
36672function getReplay() {
36673    const client = (0, __TURBOPACK__imported__module__250804__26["getClient"])();
36674    return client === null || client === void 0 ? void 0 : client.getIntegrationByName("Replay");
36675}
36676;
36677// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integrations/third-party-errors-filter.js [app-client] (ecmascript)
36678;
36679// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/metadata.js [app-client] (ecmascript)
36680;
36681var __TURBOPACK__imported__module__225304__15 = __TURBOPACK__imported__module__225304__;
36682;
36683const filenameMetadataMap = /* @__PURE__ */ new Map();
36684const parsedStacks = /* @__PURE__ */ new Set();
36685function getFilenameToMetadataMap(parser) {
36686    if (!__TURBOPACK__imported__module__225304__15["GLOBAL_OBJ"]._sentryModuleMetadata) {
36687        return {};
36688    }
36689    const filenameMap = {};
36690    for (const stack of Object.keys(__TURBOPACK__imported__module__225304__15["GLOBAL_OBJ"]._sentryModuleMetadata)){
36691        const metadata = __TURBOPACK__imported__module__225304__15["GLOBAL_OBJ"]._sentryModuleMetadata[stack];
36692        const frames = parser(stack);
36693        for (const frame of frames.reverse()){
36694            if (frame.filename) {
36695                filenameMap[frame.filename] = metadata;
36696                break;
36697            }
36698        }
36699    }
36700    return filenameMap;
36701}
36702function ensureMetadataStacksAreParsed(parser) {
36703    if (!__TURBOPACK__imported__module__225304__15["GLOBAL_OBJ"]._sentryModuleMetadata) {
36704        return;
36705    }
36706    for (const stack of Object.keys(__TURBOPACK__imported__module__225304__15["GLOBAL_OBJ"]._sentryModuleMetadata)){
36707        const metadata = __TURBOPACK__imported__module__225304__15["GLOBAL_OBJ"]._sentryModuleMetadata[stack];
36708        if (parsedStacks.has(stack)) {
36709            continue;
36710        }
36711        parsedStacks.add(stack);
36712        const frames = parser(stack);
36713        for (const frame of frames.reverse()){
36714            if (frame.filename) {
36715                filenameMetadataMap.set(frame.filename, metadata);
36716                break;
36717            }
36718        }
36719    }
36720}
36721function getMetadataForUrl(parser, filename) {
36722    ensureMetadataStacksAreParsed(parser);
36723    return filenameMetadataMap.get(filename);
36724}
36725function addMetadataToStackFrames(parser, event) {
36726    var _event_exception_values, _event_exception;
36727    (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values.forEac
36727h((exception)=>{
36728        var _exception_stacktrace_frames, _exception_stacktrace;
36729        (_exception_stacktrace = exception.stacktrace) === null || _exception_stacktrace === void 0 ? void 0 : (_exception_stacktrace_frames = _exception_stacktrace.frames) === null || _exception_stacktrace_frames === void 0 ? void 0 : _exception_stacktrace_frames.forEach((frame)=>{
36730            if (!frame.filename || frame.module_metadata) {
36731                return;
36732            }
36733            const metadata = getMetadataForUrl(parser, frame.filename);
36734            if (metadata) {
36735                frame.module_metadata = metadata;
36736            }
36737        });
36738    });
36739}
36740function stripMetadataFromStackFrames(event) {
36741    var _event_exception_values, _event_exception;
36742    (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values.forEach((exception)=>{
36743        var _exception_stacktrace_frames, _exception_stacktrace;
36744        (_exception_stacktrace = exception.stacktrace) === null || _exception_stacktrace === void 0 ? void 0 : (_exception_stacktrace_frames = _exception_stacktrace.frames) === null || _exception_stacktrace_frames === void 0 ? void 0 : _exception_stacktrace_frames.forEach((frame)=>{
36745            delete frame.module_metadata;
36746        });
36747    });
36748}
36749;
36750var __TURBOPACK__imported__module__67486__6 = __TURBOPACK__imported__module__67486__;
36751var __TURBOPACK__imported__module__936032__7 = __TURBOPACK__imported__module__936032__;
36752var __TURBOPACK__imported__module__225304__16 = __TURBOPACK__imported__module__225304__;
36753;
36754;
36755;
36756;
36757;
36758const thirdPartyErrorFilterIntegration = defineIntegration((options)=>{
36759    return {
36760        name: "ThirdPartyErrorsFilter",
36761        setup (client) {
36762            client.on("beforeEnvelope", (envelope)=>{
36763                (0, __TURBOPACK__imported__module__67486__6["forEachEnvelopeItem"])(envelope, (item, type)=>{
36764                    if (type === "event") {
36765                        const event = Array.isArray(item) ? item[1] : void 0;
36766                        if (event) {
36767                            stripMetadataFromStackFrames(event);
36768                            item[1] = event;
36769                        }
36770                    }
36771                });
36772            });
36773            client.on("applyFrameMetadata", (event)=>{
36774                if (event.type) {
36775                    return;
36776                }
36777                const stackParser = client.getOptions().stackParser;
36778                addMetadataToStackFrames(stackParser, event);
36779            });
36780        },
36781        preprocessEvent (event) {
36782            var _GLOBAL_OBJ__sentryWrappedDepth;
36783            if (options.ignoreSentryInternalFrames && ((_GLOBAL_OBJ__sentryWrappedDepth = __TURBOPACK__imported__module__225304__16["GLOBAL_OBJ"]._sentryWrappedDepth) !== null && _GLOBAL_OBJ__sentryWrappedDepth !== void 0 ? _GLOBAL_OBJ__sentryWrappedDepth : 0) > 0) {
36784                event.sdkProcessingMetadata = {
36785                    ...event.sdkProcessingMetadata,
36786                    insideSentryWrapped: true
36787                };
36788            }
36789        },
36790        processEvent (event) {
36791            var _event_sdkProcessingMetadata, _event_exception_values, _event_exception;
36792            const insideSentryWrapped = options.ignoreSentryInternalFrames ? ((_event_sdkProcessingMetadata = event.sdkProcessingMetadata) === null || _event_sdkProcessingMetadata === void 0 ? void 0 : _event_sdkProcessingMetadata.insideSentryWrapped) === true && ((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values.length) === 1 : false;
36793            const frameKeys = getBundleKeysForAllFramesWithFilenames(event, options.ignoreSentryInternalFrames, insideSentryWrapped);
36794            if (frameKeys) {
36795                const arrayMethod = options.behaviour === "drop-error-if-contains-third-party-frames" || options.behaviour === "apply-tag-if-contains-third-party-frames" ? "some" : "every";
36796                const behaviourApplies = frameKeys[arrayMethod]((keys)=>!keys.some((key)=>options.filterKeys.includes(key)));
36797                if (behaviourApplies) {
36798                    const shouldDrop = options.behaviour === "drop-error-if-contains-third-party-frames" || options.behaviour === "drop-error-if-exclusively-contains-third-party-frames";
36799                    if (shouldDrop) {
36800                        return null;
36801                    } else {
36802                        event.tags = {
36803                            ...event.tags,
36804                            third_party_code: true
36805                        };
36806                    }
36807                }
36808            }
36809            return event;
36810        }
36811    };
36812});
36813function isSentryInternalFrame(frame, frameIndex, insideSentryWrapped) {
36814    if (frameIndex !== 0) {
36815        return false;
36816    }
36817    if (insideSentryWrapped && isLikelyMinifiedSentryWrappedFrame(frame)) {
36818        return true;
36819    }
36820    if (frame.function === "sentryWrapped") {
36821        return true;
36822    }
36823    if (!frame.context_line || !frame.filename) {
36824        return false;
36825    }
36826    if (!frame.filename.includes("sentry") || !frame.filename.includes("helpers") || // Filename would look something like this: 'node_modules/@sentry/browser/build/npm/esm/helpers.js'
36827    !frame.context_line.includes(SENTRY_INTERNAL_FN_APPLY)) {
36828        return false;
36829    }
36830    if (frame.pre_context) {
36831        const len = frame.pre_context.length;
36832        for(let i = 0; i < len; i++){
36833            var _frame_pre_context_i;
36834            if ((_frame_pre_context_i = frame.pre_context[i]) === null || _frame_pre_context_i === void 0 ? void 0 : _frame_pre_context_i.includes(SENTRY_INTERNAL_COMMENT)) {
36835                return true;
36836            }
36837        }
36838    }
36839    return false;
36840}
36841function getBundleKeysForAllFramesWithFilenames(event, ignoreSentryInternalFrames, insideSentryWrapped) {
36842    const frames = (0, __TURBOPACK__imported__module__936032__7["getFramesFromEvent"])(event);
36843    if (!frames) {
36844        return void 0;
36845    }
36846    return frames.filter((frame, index)=>{
36847        if (!frame.filename) {
36848            return false;
36849        }
36850        if (frame.lineno == null && frame.colno == null && frame.instruction_addr == null) {
36851            return false;
36852        }
36853        return !ignoreSentryInternalFrames || !isSentryInternalFrame(frame, index, !!insideSentryWrapped);
36854    }).map((frame)=>{
36855        if (!frame.module_metadata) {
36856            return [];
36857        }
36858        return Object.keys(frame.module_metadata).filter((key)=>key.startsWith(BUNDLER_PLUGIN_APP_KEY_PREFIX)).map((key)=>key.slice(BUNDLER_PLUGIN_APP_KEY_PREFIX.length));
36859    });
36860}
36861function isLikelyMinifiedSentryWrappedFrame(frame) {
36862    return !frame.context_line && !frame.pre_context && !!frame.function && frame.function.length <= 2;
36863}
36864const BUNDLER_PLUGIN_APP_KEY_PREFIX = "_sentryBundlerPluginAppKey:";
36865const SENTRY_INTERNAL_COMMENT = "Attempt to invoke user-land function";
36866const SENTRY_INTERNAL_FN_APPLY = "fn.apply(this, wrappedArguments)";
36867;
36868// MERGED MODULE: [project]/node_modules/@sentry/core/build/esm/integrations/extraerrordata.js [app-client] (ecmascript)
36869;
36870var __TURBOPACK__imported__module__901020__18 = __TURBOPACK__imported__module__901020__;
36871var __TURBOPACK__imported__module__272598__38 = __TURBOPACK__imported__module__272598__;
36872var __TURBOPACK__imported__module__453288__15 = __TURBOPACK__imported__module__453288__;
36873var __TURBOPACK__imported__module__45968__5 = __TURBOPACK__imported__module__45968__;
36874var __TURBOPACK__imported__module__685658__ = __turbopack_context__.i(685658);
36875var __TURBOPACK__imported__module__821593__7 = __TURBOPACK__imported__module__821593__;
36876;
36877;
36878;
36879;
36880;
36881;
36882;
36883const INTEGRATION_NAME10 = "ExtraErrorData";
36884const _extraErrorDataIntegration = function() {
36885    let options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
36886    const { depth = 3, captureErrorCause = true } = options;
36887    return {
36888        name: INTEGRATION_NAME10,
36889        processEvent (event, hint, client) {
36890            const { maxValueLength } = client.getOptions();
36891            return _enhanceEventWithErrorData(event, hint, depth, captureErrorCause, maxValueLength);
36892        }
36893    };
36894};
36895const extraErrorDataIntegration = defineIntegration(_extraErrorDataIntegration);
36896function _enhanceEventWithErrorData(event) {
36897    let hint = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, depth = arguments.length > 2 ? arguments[2] : void 0, captureErrorCause = arguments.length > 3 ? arguments[3] : void 0, maxValueLength = arguments.length > 4 ? arguments[4] : void 0;
36898    if (!hint.originalException || !(0, __TURBOPACK__imported__module__453288__15["isError"])(hint.originalException)) {
36899        return event;
36900    }
36901    const exceptionName = hint.originalException.name || hint.originalException.constructor.name;
36902    const errorData = _extractErrorData(hint.originalException, captureErrorCause, maxValueLength);
36903    if (errorData) {
36904        const contexts = {
36905            ...event.contexts
36906        };
36907        const normalizedErrorData = (0, __TURBOPACK__imported__module__45968__5["normalize"])(errorData, depth);
36908        if ((0, __TURBOPACK__imported__module__453288__15["isPlainObject"])(normalizedErrorData)) {
36909            (0, __TURBOPACK__imported__module__685658__["setSkipNormalizationHint"])(normalizedErrorData);
36910            contexts[exceptionName] = normalizedErrorData;
36911        }
36912        return {
36913            ...event,
36914            contexts
36915        };
36916    }
36917    return event;
36918}
36919function _extractErrorData(error, captureErrorCause, maxValueLength) {
36920    try {
36921        const nativeKeys = [
36922            "name",
36923            "message",
36924            "stack",
36925            "line",
36926            "column",
36927            "fileName",
36928            "lineNumber",
36929            "columnNumber",
36930            "toJSON"
36931        ];
36932        const extraErrorInfo = {};
36933        for (const key of Object.keys(error)){
36934            if (nativeKeys.indexOf(key) !== -1) {
36935                continue;
36936            }
36937            const value = error[key];
36938            extraErrorInfo[key] = (0, __TURBOPACK__imported__module__453288__15["isError"])(value) || typeof value === "string" ? maxValueLength ? (0, __TURBOPACK__imported__module__821593__7["truncate"])("".concat(value), maxValueLength) : "".concat(value) : value;
36939        }
36940        if (captureErrorCause && error.cause !== void 0) {
36941            if ((0, __TURBOPACK__imported__module__453288__15["isError"])(error.cause)) {
36942                const errorName = error.cause.name || error.cause.constructor.name;
36943                extraErrorInfo.cause = {
36944                    [errorName]: _extractErrorData(error.cause, false, maxValueLength)
36945                };
36946            } else {
36947                extraErrorInfo.cause = error.cause;
36948            }
36949        }
36950        if (typeof error.toJSON === "function") {
36951            const serializedError = error.toJSON();
36952            for (const key of Object.keys(serializedError)){
36953                const value = serializedError[key];
36954                extraErrorInfo[key] = (0, __TURBOPACK__imported__module__453288__15["isError"])(value) ? value.toString() : value;
36955            }
36956        }
36957        return extraErrorInfo;
36958    } catch (oO) {
36959        __TURBOPACK__imported__module__901020__18["DEBUG_BUILD"] && __TURBOPACK__imported__module__272598__38["debug"].error("Unable to extract extra data from the Error object:", oO);
36960    }
36961    return null;
36962}
36963;
36964var __TURBOPACK__imported__module__662537__7 = __TURBOPACK__imported__module__662537__;
36965// MERGED MODULE: [project]/src/lib/getSentryTransactionSamplingRate.ts [app-client] (ecmascript)
36966;
36967const DEFAULT_RATE = 0.02;
36968const REDUCED_RATE = 0.01;
36969const MINIMUM_RATE = 0.005;
36970function getSentryTransactionSamplingRate(param) {
36971    let { name, inheritOrSampleWith } = param;
36972    // Sampling rates tuned based on trace volume analysis:
36973    // https://lightbasenl.sentry.io/explore/traces/?aggregateField=%7B%22groupBy%22%3A%22transaction%22%7D&aggregateField=%7B%22yAxes%22%3A%5B%22count%28span.duration%29%22%5D%7D&mode=aggregate&project=5908290&statsPeriod=30d
36974    if ([
36975        "middleware GET",
36976        "GET /[locale]"
36977    ].includes(name)) {
36978        return MINIMUM_RATE;
36979    }
36980    if ([
36981        "GET /[locale]/voertuigen/[mainCategoryId]/[mainCategorySlug]/[categoryId]/[categorySlug]",
36982        "GET /[locale]/voertuigen/[mainCategoryId]/[mainCategorySlug]",
36983        ":/locale",
36984        "GET /[locale]/[rootslug]",
36985        "/:locale/voertuigen/[mainCategoryId]/[mainCategorySlug]",
36986        ":/locale/:rest"
36987    ].includes(name)) {
36988        return REDUCED_RATE;
36989    }
36990    return inheritOrSampleWith(DEFAULT_RATE);
36991}
36992// MERGED MODULE: [project]/src/lib/isBotUserAgent.tsx [app-client] (ecmascript)
36993;
36994const BOT_USER_AGENT_REGEX = /bot|crawl|spider|marketingtracer/i;
36995function isBotUserAgent1(event, hint) {
36996    var _navigator, // Server-side: in a Next.js environment, you can sometimes access the user-agent
36997    // from a custom request object stored in the original exception.
36998    _originalException_req_headers, _originalException_req, // Server-side: Sentry may attach the user-agent from the original request here
36999    _event_request_headers, _event_request, _event_sdkProcessingMetadata_normalizedRequest_headers, _event_sdkProcessingMetadata_normalizedRequest, _event_sdkProcessingMetadata;
37000    const originalException = hint === null || hint === void 0 ? void 0 : hint.originalException;
37001    const userAgents = [
37002        // Client-side: navigator.userAgent is typically available in browsers
37003        // and often provides accurate information about bots (e.g., Googlebot).
37004        typeof navigator !== "undefined" ? (_navigator = navigator) === null || _navigator === void 0 ? void 0 : _navigator.userAgent : undefined,
37005        originalException === null || originalException === void 0 ? void 0 : (_originalException_req = originalException.req) === null || _originalException_req === void 0 ? void 0 : (_originalException_req_headers = _originalException_req.headers) === null || _originalException_req_headers === void 0 ? void 0 : _originalException_req_headers["user-agent"],
37006        event === null || event === void 0 ? void 0 : (_event_request = event.request) === null || _event_request === void 0 ? void 0 : (_event_request_headers = _event_request.headers) === null || _event_request_headers === void 0 ? void 0 : _event_request_headers["user-agent"],
37007        event === null || event === void 0 ? void 0 : (_event_sdkProcessingMetadata = event.sdkProcessingMetadata) === null || _event_sdkProcessingMetadata === void 0 ? void 0 : (_event_sdkProcessingMetadata_normalizedRequest = _event_sdkProcessingMetadata.normalizedRequest) === null || _event_sdkProcessingMetadata_normalizedRequest === void 0 ? void 0 : (_event_sdkProcessingMetadata_normalizedRequest_headers = _event_sdkProcessingMetadata_normalizedRequest.headers) === null || _event_sdkProcessingMetadata_normalizedRequest_headers === void 0 ? void 0 : _event_sdkProcessingMetadata_normalizedRequest_headers["user-agent"]
37008    ];
37009    return userAgents.some((agent)=>agent && BOT_USER_AGENT_REGEX.test(agent));
37010}
37011function gatherDataForRangeError(event, _hint) {
37012    var _event_exception_values, _event_exception;
37013    const exception = (_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : _event_exception_values[0];
37014    if ((exception === null || exception === void 0 ? void 0 : exception.type) === "RangeError") {
37015        var _event_request, _navigator;
37016        return {
37017            ...event.extra,
37018            headers: event === null || event === void 0 ? void 0 : (_event_request = event.request) === null || _event_request === void 0 ? void 0 : _event_request.headers,
37019            userAgent: (_navigator = navigator) === null || _navigator === void 0 ? void 0 : _navigator.userAgent
37020        };
37021    }
37022    return {};
37023}
37024// MERGED MODULE: [project]/src/app/contants.ts [app-client] (ecmascript)
37025;
37026var __TURBOPACK__imported__module__247167__6 = __TURBOPACK__imported__module__247167__;
37027var _process_env_NEXT_PUBLIC_URL;
37028const APP_URL = __TURBOPACK__imported__module__247167__6["default"].env.VERCEL_BRANCH_URL ? "https://".concat(__TURBOPACK__imported__module__247167__6["default"].env.VERCEL_BRANCH_URL) : (_process_env_NEXT_PUBLIC_URL = ("TURBOPACK compile-time value", "https://diks.net")) !== null && _process_env_NEXT_PUBLIC_URL !== void 0 ? _process_env_NEXT_PUBLIC_URL : "https://diks.net";
37029globalThis["_sentryRouteManifest"] = "{\"dynamicRoutes\":[{\"path\":\"/:locale/self-registration\",\"regex\":\"^/([^/]+)/self-registration$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/self-registration/complete\",\"regex\":\"^/([^/]+)/self-registration/complete$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/self-registration/customer-details/company\",\"regex\":\"^/([^/]+)/self-registration/customer-details/company$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/self-registration/customer-details/personal\",\"regex\":\"^/([^/]+)/self-registration/customer-details/personal$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/self-registration/drivers-license\",\"regex\":\"^/([^/]+)/self-registration/drivers-license$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/self-registration/extra-drivers\",\"regex\":\"^/([^/]+)/self-registration/extra-drivers$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/self-registration/pickup\",\"regex\":\"^/([^/]+)/self-registration/pickup$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/self-registration/start\",\"regex\":\"^/([^/]+)/self-registration/start$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/vergelijken\",\"regex\":\"^/([^/]+)/vergelijken$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/voertuigen\",\"regex\":\"^/([^/]+)/voertuigen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/voertuigen/:mainCategoryId/:mainCategorySlug\",\"regex\":\"^/([^/]+)/voertuigen/([^/]+)/([^/]+)$\",\"paramNames\":[\"locale\",\"mainCategoryId\",\"mainCategorySlug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/voertuigen/:mainCategoryId/:mainCategorySlug/:categoryId/:categorySlug\",\"regex\":\"^/([^/]+)/voertuigen/([^/]+)/([^/]+)/([^/]+)/([^/]+)$\",\"paramNames\":[\"locale\",\"mainCategoryId\",\"mainCategorySlug\",\"categoryId\",\"categorySlug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/voertuigen/:mainCategoryId/:mainCategorySlug/:categoryId/:categorySlug/samenstellen\",\"regex\":\"^/([^/]+)/voertuigen/([^/]+)/([^/]+)/([^/]+)/([^/]+)/samenstellen$\",\"paramNames\":[\"locale\",\"mainCategoryId\",\"mainCategorySlug\",\"categoryId\",\"categorySlug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/voertuigen/alternatieven/:mainCategoryId/:categoryId\",\"regex\":\"^/([^/]+)/voertuigen/alternatieven/([^/]+)/([^/]+)$\",\"paramNames\":[\"locale\",\"mainCategoryId\",\"categoryId\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/reserveren\",\"regex\":\"^/([^/]+)/reserveren$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/reserveren/mislukt\",\"regex\":\"^/([^/]+)/reserveren/mislukt$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/reserveren/voltooid\",\"regex\":\"^/([^/]+)/reserveren/voltooid$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/shortlease/:mainCategoryId/:mainCategorySlug\",\"regex\":\"^/([^/]+)/shortlease/([^/]+)/([^/]+)$\",\"paramNames\":[\"locale\",\"mainCategoryId\",\"mainCategorySlug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/shortlease/:mainCategoryId/:mainCategorySlug/:categoryId/:categorySlug\",\"regex\":\"^/([^/]+)/shortlease/([^/]+)/([^/]+)/([^/]+)/([^/]+)$\",\"paramNames\":[\"locale\",\"mainCategoryId\",\"mainCategorySlug\",\"categoryId\",\"categorySlug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/shortlease/gegevens\",\"regex\":\"^/([^/]+)/shortlease/gegevens$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/shortlease/voltooid\",\"regex\":\"^/([^/]+)/shortlease/voltooid$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/winkelwagen\",\"regex\":\"^/([^/]+)/winkelwagen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/winkelwagen/aanpassen/:orderLineId\",\"regex\":\"^/([^/]+)/winkelwagen/aanpassen/([^/]+)$\",\"paramNames\":[\"locale\",\"orderLineId\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/:rootSlug\",\"regex\":\"^/([^/]+)/([^/]+)$\",\"paramNames\":[\"locale\",\"rootSlug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/:rootSlug/:slug\",\"regex\":\"^/([^/]+)/([^/]+)/([^/]+)$\",\"paramNames\":[\"locale\",\"rootSlug\",\"slug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/blogs\",\"regex\":\"^/([^/]+)/blogs$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/blogs/:slug\",\"regex\":\"^/([^/]+)/blogs/([^/]+)$\",\"paramNames\":[\"locale\",\"slug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/nieuws\",\"regex\":\"^/([^/]+)/nieuws$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/nieuws/:slug\",\"regex\":\"^/([^/]+)/nieuws/([^/]+)$\",\"paramNames\":[\"locale\",\"slug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/vestigingen\",\"regex\":\"^/([^/]+)/vestigingen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/vestigingen/:slug\",\"regex\":\"^/([^/]+)/vestigingen/([^/]+)$\",\"paramNames\":[\"locale\",\"slug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/werken-bij\",\"regex\":\"^/([^/]+)/werken-bij$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/werken-bij/vacature/:slug\",\"regex\":\"^/([^/]+)/werken-bij/vacature/([^/]+)$\",\"paramNames\":[\"locale\",\"slug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/werken-bij/verhalen\",\"regex\":\"^/([^/]+)/werken-bij/verhalen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/werken-bij/verhalen/:slug\",\"regex\":\"^/([^/]+)/werken-bij/verhalen/([^/]+)$\",\"paramNames\":[\"locale\",\"slug\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale\",\"regex\":\"^/([^/]+)$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/:rest*\",\"regex\":\"^/([^/]+)/(.+)$\",\"paramNames\":[\"locale\",\"rest\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/account/account-aanmaken\",\"regex\":\"^/([^/]+)/account/account-aanmaken$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/account/inloggen\",\"regex\":\"^/([^/]+)/account/inloggen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/account/verificatie\",\"regex\":\"^/([^/]+)/account/verificatie$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/account/verificatie-afronden\",\"regex\":\"^/([^/]+)/account/verificatie-afronden$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/account/wachtwoord-vergeten\",\"regex\":\"^/([^/]+)/account/wachtwoord-vergeten$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/contact\",\"regex\":\"^/([^/]+)/contact$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/mijn-diks\",\"regex\":\"^/([^/]+)/mijn-diks$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/mijn-diks/facturen\",\"regex\":\"^/([^/]+)/mijn-diks/facturen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/mijn-diks/favorieten\",\"regex\":\"^/([^/]+)/mijn-diks/favorieten$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/mijn-diks/opslag\",\"regex\":\"^/([^/]+)/mijn-diks/opslag$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/mijn-diks/profiel\",\"regex\":\"^/([^/]+)/mijn-diks/profiel$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/mijn-diks/reserveringen\",\"regex\":\"^/([^/]+)/mijn-diks/reserveringen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/mijn-diks/reserveringen/aanpassen/:reservationId\",\"regex\":\"^/([^/]+)/mijn-diks/reserveringen/aanpassen/([^/]+)$\",\"paramNames\":[\"locale\",\"reservationId\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/opslag-huren/extras\",\"regex\":\"^/([^/]+)/opslag-huren/extras$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/opslag-huren/gegevens\",\"regex\":\"^/([^/]+)/opslag-huren/gegevens$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/opslag-huren/samenstellen\",\"regex\":\"^/([^/]+)/opslag-huren/samenstellen$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/opslag-huren/voltooid\",\"regex\":\"^/([^/]+)/opslag-huren/voltooid$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true},{\"path\":\"/:locale/sitemap\",\"regex\":\"^/([^/]+)/sitemap$\",\"paramNames\":[\"locale\"],\"hasOptionalPrefix\":true}
37029,{\"path\":\"/beheer/shared-vehicles/:id\",\"regex\":\"^/beheer/shared-vehicles/([^/]+)$\",\"paramNames\":[\"id\"],\"hasOptionalPrefix\":false}],\"staticRoutes\":[{\"path\":\"/library\"},{\"path\":\"/library/better-date-picker\"},{\"path\":\"/library/birth-date-input\"},{\"path\":\"/library/breadcrumbs\"},{\"path\":\"/library/button\"},{\"path\":\"/library/button-link\"},{\"path\":\"/library/checkbox\"},{\"path\":\"/library/color\"},{\"path\":\"/library/date-time-input\"},{\"path\":\"/library/error-message\"},{\"path\":\"/library/full-page-loader\"},{\"path\":\"/library/info-banner\"},{\"path\":\"/library/input\"},{\"path\":\"/library/modal\"},{\"path\":\"/library/notification\"},{\"path\":\"/library/number-input\"},{\"path\":\"/library/pagination\"},{\"path\":\"/library/select\"},{\"path\":\"/library/spacing\"},{\"path\":\"/library/spinner\"},{\"path\":\"/library/tabs\"},{\"path\":\"/library/text\"},{\"path\":\"/library/text-area\"},{\"path\":\"/library/toggle\"},{\"path\":\"/library/vehicle-card\"},{\"path\":\"/beheer\"},{\"path\":\"/beheer/addons\"},{\"path\":\"/beheer/address-radius-check\"},{\"path\":\"/beheer/auto-invoicing\"},{\"path\":\"/beheer/availability\"},{\"path\":\"/beheer/availability-buffer\"},{\"path\":\"/beheer/bikes\"},{\"path\":\"/beheer/blacklist\"},{\"path\":\"/beheer/blacklist/email\"},{\"path\":\"/beheer/blacklist/telefoon\"},{\"path\":\"/beheer/business-rules\"},{\"path\":\"/beheer/city-fee\"},{\"path\":\"/beheer/customers\"},{\"path\":\"/beheer/divergent-opening-hours\"},{\"path\":\"/beheer/feature-flags\"},{\"path\":\"/beheer/hours-check-availability\"},{\"path\":\"/beheer/locations\"},{\"path\":\"/beheer/logs\"},{\"path\":\"/beheer/mcontact\"},{\"path\":\"/beheer/redirects\"},{\"path\":\"/beheer/shared-vehicles\"},{\"path\":\"/beheer/sync\"},{\"path\":\"/beheer/time-threshold\"},{\"path\":\"/beheer/transfers\"},{\"path\":\"/beheer/transfers/combinations\"},{\"path\":\"/beheer/transfers/executers\"},{\"path\":\"/beheer/transfers/logs\"},{\"path\":\"/beheer/transfers/pool-combinations\"},{\"path\":\"/beheer/users\"}],\"isrRoutes\":[]}";
37030globalThis["_sentryNextJsVersion"] = "16.2.12";
37031;
37032;
37033;
37034;
37035const onRouterTransitionStart = captureRouterTransitionStart;
37036init2({
37037    enabled: ("TURBOPACK compile-time value", "true") === "true",
37038    environment: ("TURBOPACK compile-time value", "production"),
37039    dsn: "https://ae91a4dc5db6d7a20fbc5c6856f5aa6f@o4510788255350784.ingest.de.sentry.io/4510788269965392",
37040    sampleRate: 1,
37041    tracesSampler: getSentryTransactionSamplingRate,
37042    enableLogs: [
37043        "production",
37044        "acceptance"
37045    ].includes(("TURBOPACK compile-time value", "production")),
37046    // Setting this option to true will print useful information to the console while you're setting
37047    // up Sentry.
37048    debug: false,
37049    replaysOnErrorSampleRate: 0,
37050    // This sets the sample rate to be 25%. You may want this to be 100% while
37051    // in development and sample at a lower rate in production
37052    replaysSessionSampleRate: 0,
37053    // You can remove this option if you're not planning to use the Sentry Session Replay feature:
37054    integrations: [
37055        replayIntegration({
37056            // Additional Replay configuration goes in here, for example:
37057            maskAllText: true,
37058            blockAllMedia: true
37059        }),
37060        thirdPartyErrorFilterIntegration({
37061            // Specify the application keys that you specified in the Sentry bundler plugin
37062            filterKeys: [
37063                "diks"
37064            ],
37065            // Defines how to handle errors that contain third party stack frames.
37066            // Possible values are:
37067            // - 'drop-error-if-contains-third-party-frames'
37068            // - 'drop-error-if-exclusively-contains-third-party-frames'
37069            // - 'apply-tag-if-contains-third-party-frames'
37070            // - 'apply-tag-if-exclusively-contains-third-party-frames'
37071            behaviour: "drop-error-if-contains-third-party-frames"
37072        }),
37073        extraErrorDataIntegration()
37074    ],
37075    beforeSend (event, hint) {
37076        if (isBotUserAgent1(event, hint)) {
37077            event.tags = {
37078                ...event.tags || {},
37079                is_bot: "true"
37080            };
37081        }
37082        event.extra = {
37083            ...event.extra,
37084            ...gatherDataForRangeError(event, hint)
37085        };
37086        return event;
37087    },
37088    ignoreErrors: [
37089        // Our own ignored errors
37090        // --------
37091        "ProgressEvent: Event `ProgressEvent` (type=error) captured as promise rejection",
37092        "An error occurred in the Server Components render.",
37093        "ResizeObserver loop completed with undelivered notifications.",
37094        "Load failed",
37095        "Failed to load client build manifest",
37096        "Error: Failed to load client build manifest",
37097        "Request aborted",
37098        "Cannot read properties of undefined (reading 'get')",
37099        "undefined is not an object (evaluating 'this.properties.get')",
37100        "Abort due to cancellation of share.",
37101        // Ignore 401 errors due to session expiry, rely on backend monitoring.
37102        "Request failed with status code 401",
37103        // Common ignored errors
37104        // --------
37105        // Random plugins/extensions
37106        "top.GLOBALS",
37107        // See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error.html
37108        "originalCreateNotification",
37109        "canvas.contentDocument",
37110        "MyApp_RemoveAllHighlights",
37111        "http://tt.epicplay.com",
37112        "Can't find variable: ZiteReader",
37113        "jigsaw is not defined",
37114        "ComboSearch is not defined",
37115        "http://loading.retry.widdit.com/",
37116        "atomicFindClose",
37117        // Facebook borked
37118        "fb_xd_fragment",
37119        // ISP "optimizing" proxy - `Cache-Control: no-transform` seems to reduce this. (thanks @acdha)
37120        // See http://stackoverflow.com/questions/4113268/how-to-stop-javascript-injection-from-vodafone-proxy
37121        "bmi_SafeAddOnload",
37122        "EBCallBackMessageReceived",
37123        // See http://toolbar.conduit.com/Developer/HtmlAndGadget/Methods/JSInjection.aspx
37124        "conduitPage",
37125        "Script error.",
37126        // Avast extension error
37127        "_avast_submit",
37128        "CanceledError: canceled"
37129    ],
37130    // Common denied url errors
37131    denyUrls: [
37132        // Google Adsense
37133        /pagead\/js/i,
37134        // Facebook flakiness
37135        /graph\.facebook\.com/i,
37136        // Facebook blocked
37137        /connect\.facebook\.net\/en_US\/all\.js/i,
37138        // Woopra flakiness
37139        /eatdifferent\.com\.woopra-ns\.com/i,
37140        /static\.woopra\.com\/js\/woopra\.js/i,
37141        // Chrome extensions
37142        /extensions\//i,
37143        /^chrome:\/\//i,
37144        // Other plugins
37145        /127\.0\.0\.1:4001\/isrunning/i,
37146        /webappstoolbarba\.texthelp\.com\//i,
37147        /metrics\.itunes\.apple\.com\.edgesuite\.net\//i
37148    ]
37149});
37150__TURBOPACK__imported__module__662537__7["setTag"]("deployment", APP_URL);
37151__turbopack_context__.s([
37152    "onRouterTransitionStart",
37153    0,
37154    onRouterTransitionStart
37155], 471217);
37156}),
371575526, ((__turbopack_context__, module, exports) => {
37158"use strict";
37159
37160var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
37161/**
37162 * This module imports the client instrumentation hook from the project root.
37163 *
37164 * The `private-next-instrumentation-client` module is automatically aliased to
37165 * the `instrumentation-client.ts` file in the project root by webpack or turbopack.
37166 */ "use strict";
37167if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37168;
37169else {
37170    // eslint-disable-next-line @next/internal/typechecked-require -- Not a module.
37171    module.exports = __turbopack_context__.f({
37172        "private-next-instrumentation-client": {
37173            id: ()=>471217,
37174            module: ()=>__turbopack_context__.r(471217)
37175        }
37176    })('private-next-instrumentation-client');
37177}
37178}),
37179966849, ((__turbopack_context__, module, exports) => {
37180
37181"trimStart" in String.prototype || (String.prototype.trimStart = String.prototype.trimLeft), "trimEnd" in String.prototype || (String.prototype.trimEnd = String.prototype.trimRight), "description" in Symbol.prototype || Object.defineProperty(Symbol.prototype, "description", {
37182    configurable: !0,
37183    get: function() {
37184        var t = /\((.*)\)/.exec(this.toString());
37185        return t ? t[1] : void 0;
37186    }
37187}), Array.prototype.flat || (Array.prototype.flat = function(t, r) {
37188    return r = this.concat.apply([], this), t > 1 && r.some(Array.isArray) ? r.flat(t - 1) : r;
37189}, Array.prototype.flatMap = function(t, r) {
37190    return this.map(t, r).flat();
37191}), Promise.prototype.finally || (Promise.prototype.finally = function(t) {
37192    if ("function" != typeof t) return this.then(t, t);
37193    var r = this.constructor || Promise;
37194    return this.then(function(n) {
37195        return r.resolve(t()).then(function() {
37196            return n;
37197        });
37198    }, function(n) {
37199        return r.resolve(t()).then(function() {
37200            throw n;
37201        });
37202    });
37203}), Object.fromEntries || (Object.fromEntries = function(t) {
37204    return Array.from(t).reduce(function(t, r) {
37205        return t[r[0]] = r[1], t;
37206    }, {});
37207}), Array.prototype.at || (Array.prototype.at = function(t) {
37208    var r = Math.trunc(t) || 0;
37209    if (r < 0 && (r += this.length), !(r < 0 || r >= this.length)) return this[r];
37210}), Object.hasOwn || (Object.hasOwn = function(t, r) {
37211    if (null == t) throw new TypeError("Cannot convert undefined or null to object");
37212    return Object.prototype.hasOwnProperty.call(Object(t), r);
37213}), "canParse" in URL || (URL.canParse = function(t, r) {
37214    try {
37215        return !!new URL(t, r);
37216    } catch (t) {
37217        return !1;
37218    }
37219});
37220}),
37221523911, ((__turbopack_context__, module, exports) => {
37222"use strict";
37223
37224var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
37225// imports polyfill from `@next/polyfill-module` after build.
37226"use strict";
37227Object.defineProperty(exports, "__esModule", {
37228    value: true
37229});
37230__turbopack_context__.r(966849);
37231// Only set up devtools for the dev server.
37232if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37233;
37234// Start listening for the instant navigation test cookie. The test framework
37235// (e.g. Playwright) sets/clears this cookie to control the navigation lock.
37236// Browser-only.
37237if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37238;
37239if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37240    Object.defineProperty(exports.default, '__esModule', {
37241        value: true
37242    });
37243    Object.assign(exports.default, exports);
37244    module.exports = exports.default;
37245}
37246}),
3724718576, ((__turbopack_context__, module, exports) => {
37248"use strict";
37249
37250Object.defineProperty(exports, "__esModule", {
37251    value: true
37252});
372530 && (module.exports = {
37254    WarningIcon: null,
37255    errorStyles: null,
37256    errorThemeCss: null
37257});
37258function _export(target, all) {
37259    for(var name in all)Object.defineProperty(target, name, {
37260        enumerable: true,
37261        get: all[name]
37262    });
37263}
37264_export(exports, {
37265    WarningIcon: function() {
37266        return WarningIcon;
37267    },
37268    errorStyles: function() {
37269        return errorStyles;
37270    },
37271    errorThemeCss: function() {
37272        return errorThemeCss;
37273    }
37274});
37275const _interop_require_default = __turbopack_context__.r(563141);
37276const _jsxruntime = __turbopack_context__.r(843476);
37277const _react = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(271645));
37278const errorStyles = {
37279    container: {
37280        fontFamily: 'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple 
37280Color Emoji","Segoe UI Emoji"',
37281        height: '100vh',
37282        display: 'flex',
37283        alignItems: 'center',
37284        justifyContent: 'center'
37285    },
37286    card: {
37287        marginTop: '-32px',
37288        maxWidth: '325px',
37289        padding: '32px 28px',
37290        textAlign: 'left'
37291    },
37292    icon: {
37293        marginBottom: '24px'
37294    },
37295    title: {
37296        fontSize: '24px',
37297        fontWeight: 500,
37298        letterSpacing: '-0.02em',
37299        lineHeight: '32px',
37300        margin: '0 0 12px 0',
37301        color: 'var(--next-error-title)'
37302    },
37303    message: {
37304        fontSize: '14px',
37305        fontWeight: 400,
37306        lineHeight: '21px',
37307        margin: '0 0 20px 0',
37308        color: 'var(--next-error-message)'
37309    },
37310    form: {
37311        margin: 0
37312    },
37313    buttonGroup: {
37314        display: 'flex',
37315        gap: '8px',
37316        alignItems: 'center'
37317    },
37318    button: {
37319        display: 'inline-flex',
37320        alignItems: 'center',
37321        justifyContent: 'center',
37322        height: '32px',
37323        padding: '0 12px',
37324        fontSize: '14px',
37325        fontWeight: 500,
37326        lineHeight: '20px',
37327        borderRadius: '6px',
37328        cursor: 'pointer',
37329        color: 'var(--next-error-btn-text)',
37330        background: 'var(--next-error-btn-bg)',
37331        border: 'var(--next-error-btn-border)'
37332    },
37333    buttonSecondary: {
37334        display: 'inline-flex',
37335        alignItems: 'center',
37336        justifyContent: 'center',
37337        height: '32px',
37338        padding: '0 12px',
37339        fontSize: '14px',
37340        fontWeight: 500,
37341        lineHeight: '20px',
37342        borderRadius: '6px',
37343        cursor: 'pointer',
37344        color: 'var(--next-error-btn-secondary-text)',
37345        background: 'var(--next-error-btn-secondary-bg)',
37346        border: 'var(--next-error-btn-secondary-border)'
37347    },
37348    digestFooter: {
37349        position: 'fixed',
37350        bottom: '32px',
37351        left: '0',
37352        right: '0',
37353        textAlign: 'center',
37354        fontFamily: 'ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace',
37355        fontSize: '12px',
37356        lineHeight: '18px',
37357        fontWeight: 400,
37358        margin: '0',
37359        color: 'var(--next-error-digest)'
37360    }
37361};
37362const errorThemeCss = "\n:root {\n  --next-error-bg: #fff;\n  --next-error-text: #171717;\n  --next-error-title: #171717;\n  --next-error-message: #171717;\n  --next-error-digest: #666666;\n  --next-error-btn-text: #fff;\n  --next-error-btn-bg: #171717;\n  --next-error-btn-border: none;\n  --next-error-btn-secondary-text: #171717;\n  --next-error-btn-secondary-bg: transparent;\n  --next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);\n}\n@media (prefers-color-scheme: dark) {\n  :root {\n    --next-error-bg: #0a0a0a;\n    --next-error-text: #ededed;\n    --next-error-title: #ededed;\n    --next-error-message: #ededed;\n    --next-error-digest: #a0a0a0;\n    --next-error-btn-text: #0a0a0a;\n    --next-error-btn-bg: #ededed;\n    --next-error-btn-border: none;\n    --next-error-btn-secondary-text: #ededed;\n    --next-error-btn-secondary-bg: transparent;\n    --next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);\n  }\n}\nbody { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\n".replace(/\n\s*/g, '');
37363function WarningIcon() {
37364    return /*#__PURE__*/ (0, _jsxruntime.jsx)("svg", {
37365        width: "32",
37366        height: "32",
37367        viewBox: "-0.2 -1.5 32 32",
37368        fill: "none",
37369        style: errorStyles.icon,
37370        children: /*#__PURE__*/ (0, _jsxruntime.jsx)("path", {
37371            d: "M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z",
37372            fill: "var(--next-error-title)"
37373        })
37374    });
37375}
37376if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37377    Object.defineProperty(exports.default, '__esModule', {
37378        value: true
37379    });
37380    Object.assign(exports.default, exports);
37381    module.exports = exports.default;
37382}
37383}),
37384168027, ((__turbopack_context__, module, exports) => {
37385"use strict";
37386
37387Object.defineProperty(exports, "__esModule", {
37388    value: true
37389});
37390Object.defineProperty(exports, // supplied custom global error signatures.
37391"default", {
37392    enumerable: true,
37393    get: function() {
37394        return _default;
37395    }
37396});
37397const _interop_require_default = __turbopack_context__.r(563141);
37398const _jsxruntime = __turbopack_context__.r(843476);
37399const _react = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(271645));
37400const _handleisrerror = __turbopack_context__.r(912354);
37401const _errorstyles = __turbopack_context__.r(18576);
37402function DefaultGlobalError(param) {
37403    let { error } = param;
37404    const digest = error === null || error === void 0 ? void 0 : error.digest;
37405    const isServerError = !!digest;
37406    const message = isServerError ? 'A server error occurred. Reload to try again.' : 'Reload to try again, or go back.';
37407    (0, _handleisrerror.handleISRError)({
37408        error
37409    });
37410    return /*#__PURE__*/ (0, _jsxruntime.jsxs)("html", {
37411        id: "__next_error__",
37412        children: [
37413            /*#__PURE__*/ (0, _jsxruntime.jsx)("head", {
37414                children: /*#__PURE__*/ (0, _jsxruntime.jsx)("style", {
37415                    dangerouslySetInnerHTML: {
37416                        __html: _errorstyles.errorThemeCss
37417                    }
37418                })
37419            }),
37420            /*#__PURE__*/ (0, _jsxruntime.jsxs)("body", {
37421                children: [
37422                    /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
37423                        style: _errorstyles.errorStyles.container,
37424                        children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
37425                            style: _errorstyles.errorStyles.card,
37426                            children: [
37427                                /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorstyles.WarningIcon, {}),
37428                                /*#__PURE__*/ (0, _jsxruntime.jsx)("h1", {
37429                                    style: _errorstyles.errorStyles.title,
37430                                    children: "This page couldn’t load"
37431                                }),
37432                                /*#__PURE__*/ (0, _jsxruntime.jsx)("p", {
37433                                    style: _errorstyles.errorStyles.message,
37434                                    children: message
37435                                }),
37436                                /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
37437                                    style: _errorstyles.errorStyles.buttonGroup,
37438                                    children: [
37439                                        /*#__PURE__*/ (0, _jsxruntime.jsx)("form", {
37440                                            style: _errorstyles.errorStyles.form,
37441                                            children: /*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
37442                                                type: "submit",
37443                                                style: _errorstyles.errorStyles.button,
37444                                                children: "Reload"
37445                                            })
37446                                        }),
37447                                        !isServerError && /*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
37448                                            type: "button",
37449                                            style: _errorstyles.errorStyles.buttonSecondary,
37450                                            onClick: ()=>{
37451                                                if (window.history.length > 1) {
37452                                                    window.history.back();
37453                                                } else {
37454                                                    window.location.href = '/';
37455                                                }
37456                                            },
37457                                            children: "Back"
37458                                        })
37459                                    ]
37460                                })
37461                            ]
37462                        })
37463                    }),
37464                    digest && /*#__PURE__*/ (0, _jsxruntime.jsxs)("p", {
37465                        style: _errorstyles.errorStyles.digestFooter,
37466                        children: [
37467                            "ERROR ",
37468                            digest
37469                        ]
37470                    })
37471                ]
37472            })
37473        ]
37474    });
37475}
37476const _default = DefaultGlobalError;
37477if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37478    Object.defineProperty(exports.default, '__esModule', {
37479        value: true
37480    });
37481    Object.assign(exports.default, exports);
37482    module.exports = exports.default;
37483}
37484}),
37485851323, ((__turbopack_context__, module, exports) => {
37486"use strict";
37487
37488var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
37489// This file is only used in app router due to the specific error state handling.
37490"use strict";
37491Object.defineProperty(exports, "__esModule", {
37492    value: true
37493});
374940 && (module.exports = {
37495    onCaughtError: null,
37496    onUncaughtError: null
37497});
37498function _export(target, all) {
37499    for(var name in all)Object.defineProperty(target, name, {
37500        enumerable: true,
37501        get: all[name]
37502    });
37503}
37504_export(exports, {
37505    onCaughtError: function() {
37506        return onCaughtError;
37507    },
37508    onUncaughtError: function() {
37509        return onUncaughtError;
37510    }
37511});
37512const _interop_require_default = __turbopack_context__.r(563141);
37513const _isnextroutererror = __turbopack_context__.r(265713);
37514const _bailouttocsr = __turbopack_context__.r(132061);
37515const _reportglobalerror = __turbopack_context__.r(528279);
37516const _errorboundary = __turbopack_context__.r(972383);
37517const _globalerror = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(168027));
37518const devToolErrorMod = ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : {
37519    decorateDevError: (error)=>error,
37520    handleClientError: ()=>{},
37521    originConsoleError: console.error.bind(console)
37522};
37523function onCaughtError(thrownValue, errorInfo) {
37524    var _errorInfo_errorBoundary;
37525    const errorBoundaryComponent = (_errorInfo_errorBoundary = errorInfo.errorBoundary) === null || _errorInfo_errorBoundary === void 0 ? void 0 : _errorInfo_errorBoundary.constructor;
37526    let isImplicitErrorBoundary;
37527    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37528    ;
37529    isImplicitErrorBoundary = isImplicitErrorBoundary || errorBoundaryComponent === _errorboundary.ErrorBoundaryHandler && errorInfo.errorBoundary.props.errorComponent === _globalerror.default;
37530    // Skip the segment explorer triggered error
37531    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37532    ;
37533    if (isImplicitErrorBoundary) {
37534        // We don't consider errors caught unless they're caught by an explicit error
37535        // boundary. The built-in ones are considered implicit.
37536        // This mimics how the same app would behave without Next.js.
37537        return onUncaughtError(thrownValue);
37538    }
37539    // Skip certain custom errors which are not expected to be reported on client
37540    if ((0, _bailouttocsr.isBailoutToCSRError)(thrownValue) || (0, _isnextroutererror.isNextRouterError)(thrownValue)) return;
37541    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37542    {
37543        var _ref;
37544        var _errorInfo_componentStack;
37545    } else {
37546        devToolErrorMod.originConsoleError(thrownValue);
37547    }
37548}
37549function onUncaughtError(thrownValue) {
37550    // Skip certain custom errors which are not expected to be reported on client
37551    if ((0, _bailouttocsr.isBailoutToCSRError)(thrownValue) || (0, _isnextroutererror.isNextRouterError)(thrownValue)) return;
37552    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37553    ;
37554    else {
37555        (0, _reportglobalerror.reportGlobalError)(thrownValue);
37556    }
37557}
37558if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37559    Object.defineProperty(exports.default, '__esModule', {
37560        value: true
37561    });
37562    Object.assign(exports.default, exports);
37563    module.exports = exports.default;
37564}
37565}),
37566762634, ((__turbopack_context__, module, exports) => {
37567"use strict";
37568
37569Object.defineProperty(exports, "__esModule", {
37570    value: true
37571});
37572Object.defineProperty(exports, "AppRouterAnnouncer", {
37573    enumerable: true,
37574    get: function() {
37575        return AppRouterAnnouncer;
37576    }
37577});
37578const _react = __turbopack_context__.r(271645);
37579const _reactdom = __turbopack_context__.r(174080);
37580const ANNOUNCER_TYPE = 'next-route-announcer';
37581const ANNOUNCER_ID = '__next-route-announcer__';
37582function getAnnouncerNode() {
37583    var _existingAnnouncer_shadowRoot;
37584    const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0];
37585    if (existingAnnouncer === null || existingAnnouncer === void 0 ? void 0 : (_existingAnnouncer_shadowRoot = existingAnnouncer.shadowRoot) === null || _existingAnnouncer_shadowRoot === void 0 ? void 0 : _existingAnnouncer_shadowRoot.childNodes[0]) {
37586        return existingAnnouncer.shadowRoot.childNodes[0];
37587    } else {
37588        const container = document.createElement(ANNOUNCER_TYPE);
37589        container.style.cssText = 'position:absolute';
37590        const announcer = document.createElement('div');
37591        announcer.ariaLive = 'assertive';
37592        announcer.id = ANNOUNCER_ID;
37593        announcer.role = 'alert';
37594        announcer.style.cssText = 'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal';
37595        // Use shadow DOM here to avoid any potential CSS bleed
37596        const shadow = container.attachShadow({
37597            mode: 'open'
37598        });
37599        shadow.appendChild(announcer);
37600        document.body.appendChild(container);
37601        return announcer;
37602    }
37603}
37604function AppRouterAnnouncer(param) {
37605    let { tree } = param;
37606    const [portalNode, setPortalNode] = (0, _react.useState)(null);
37607    (0, _react.useEffect)(()=>{
37608        const announcer = getAnnouncerNode();
37609        setPortalNode(announcer);
37610        return ()=>{
37611            const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0];
37612            if (container === null || container === void 0 ? void 0 : container.isConnected) {
37613                document.body.removeChild(container);
37614            }
37615        };
37616    }, []);
37617    const [routeAnnouncement, setRouteAnnouncement] = (0, _react.useState)('');
37618    const previousTitle = (0, _react.useRef)(undefined);
37619    (0, _react.useEffect)(()=>{
37620        let currentTitle = '';
37621        if (document.title) {
37622            currentTitle = document.title;
37623        } else {
37624            const pageHeader = document.querySelector('h1');
37625            if (pageHeader) {
37626                currentTitle = pageHeader.innerText || pageHeader.textContent || '';
37627            }
37628        }
37629        // Only announce the title change, but not for the first load because screen
37630        // readers do that automatically.
37631        if (previousTitle.current !== undefined && previousTitle.current !== currentTitle) {
37632            setRouteAnnouncement(currentTitle);
37633        }
37634        previousTitle.current = currentTitle;
37635    }, [
37636        tree
37637    ]);
37638    return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(routeAnnouncement, portalNode) : null;
37639}
37640if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37641    Object.defineProperty(exports.default, '__esModule', {
37642        value: true
37643    });
37644    Object.assign(exports.default, exports);
37645    module.exports = exports.default;
37646}
37647}),
37648425018, ((__turbopack_context__, module, exports) => {
37649"use strict";
37650
37651Object.defineProperty(exports, "__esModule", {
37652    value: true
37653});
37654Object.defineProperty(exports, "findHeadInCache", {
37655    enumerable: true,
37656    get: function() {
37657        return findHeadInCache;
37658    }
37659});
37660const _segment = __turbopack_context__.r(813258);
37661const _createroutercachekey = __turbopack_context__.r(270725);
37662function findHeadInCache(cache, parallelRoutes) {
37663    return findHeadInCacheImpl(cache, parallelRoutes, '', '');
37664}
37665function findHeadInCacheImpl(cache, parallelRoutes, keyPrefix, keyPrefixWithoutSearchParams) {
37666    const isLastItem = Object.keys(parallelRoutes).length === 0;
37667    if (isLastItem) {
37668        // Returns the entire Cache Node of the segment whose head we will render.
37669        return [
37670            cache,
37671            keyPrefix,
37672            keyPrefixWithoutSearchParams
37673        ];
37674    }
37675    // First try the 'children' parallel route if it exists
37676    // when starting from the "root", this corresponds with the main page component
37677    const parallelRoutesKeys = Object.keys(parallelRoutes).filter((key)=>key !== 'children');
37678    // if we are at the root, we need to check the children slot first
37679    if ('children' in parallelRoutes) {
37680        parallelRoutesKeys.unshift('children');
37681    }
37682    const slots = cache.slots;
37683    if (slots !== null) {
37684        for (const key of parallelRoutesKeys){
37685            const [segment, childParallelRoutes] = parallelRoutes[key];
37686            // If the parallel is not matched and using the default segment,
37687            // skip searching the head from it.
37688            if (segment === _segment.DEFAULT_SEGMENT_KEY) {
37689                continue;
37690            }
37691            const childCacheNode = slots[key];
37692            if (!childCacheNode) {
37693                continue;
37694            }
37695            const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);
37696            const cacheKeyWithoutSearchParams = (0, _createroutercachekey.createRouterCacheKey)(segment, true);
37697            const item = findHeadInCacheImpl(childCacheNode, childParallelRoutes, keyPrefix + '/' + cacheKey, keyPrefix + '/' + cacheKeyWithoutSearchParams);
37698            if (item) {
37699                return item;
37700            }
37701        }
37702    }
37703    return null;
37704}
37705if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37706    Object.defineProperty(exports.default, '__esModule', {
37707        value: true
37708    });
37709    Object.assign(exports.default, exports);
37710    module.exports = exports.default;
37711}
37712}),
37713241624, ((__turbopack_context__, module, exports) => {
37714"use strict";
37715
37716Object.defineProperty(exports, "__esModule", {
37717    value: true
37718});
377190 && (module.exports = {
37720    GracefulDegradeBoundary: null,
37721    default: null
37722});
37723function _export(target, all) {
37724    for(var name in all)Object.defineProperty(target, name, {
37725        enumerable: true,
37726        get: all[name]
37727    });
37728}
37729_export(exports, {
37730    GracefulDegradeBoundary: function() {
37731        return GracefulDegradeBoundary;
37732    },
37733    default: function() {
37734        return _default;
37735    }
37736});
37737const _jsxruntime = __turbopack_context__.r(843476);
37738const _react = __turbopack_context__.r(271645);
37739function getDomNodeAttributes(node) {
37740    const result = {};
37741    for(let i = 0; i < node.attributes.length; i++){
37742        const attr = node.attributes[i];
37743        result[attr.name] = attr.value;
37744    }
37745    return result;
37746}
37747class GracefulDegradeBoundary extends _react.Component {
37748    static getDerivedStateFromError(_) {
37749        return {
37750            hasError: true
37751        };
37752    }
37753    componentDidMount() {
37754        const htmlNode = this.htmlRef.current;
37755        if (this.state.hasError && htmlNode) {
37756            // Reapply the cached HTML attributes to the root element
37757            Object.entries(this.htmlAttributes).forEach((param)=>{
37758                let [key, value] = param;
37759                htmlNode.setAttribute(key, value);
37760            });
37761        }
37762    }
37763    render() {
37764        const { hasError } = this.state;
37765        // Cache the root HTML content on the first render
37766        if (typeof window !== 'undefined' && !this.rootHtml) {
37767            this.rootHtml = document.documentElement.innerHTML;
37768            this.htmlAttributes = getDomNodeAttributes(document.documentElement);
37769        }
37770        if (hasError) {
37771            // Render the current HTML content without hydration
37772            return /*#__PURE__*/ (0, _jsxruntime.jsx)("html", {
37773                ref: this.htmlRef,
37774                suppressHydrationWarning: true,
37775                dangerouslySetInnerHTML: {
37776                    __html: this.rootHtml
37777                }
37778            });
37779        }
37780        return this.props.children;
37781    }
37782    constructor(props){
37783        super(props);
37784        this.state = {
37785            hasError: false
37786        };
37787        this.rootHtml = '';
37788        this.htmlAttributes = {};
37789        this.htmlRef = /*#__PURE__*/ (0, _react.createRef)();
37790    }
37791}
37792const _default = GracefulDegradeBoundary;
37793if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37794    Object.defineProperty(exports.default, '__esModule', {
37795        value: true
37796    });
37797    Object.assign(exports.default, exports);
37798    module.exports = exports.default;
37799}
37800}),
37801794109, ((__turbopack_context__, module, exports) => {
37802"use strict";
37803
37804Object.defineProperty(exports, "__esModule", {
37805    value: true
37806});
37807Object.defineProperty(exports, "default", {
37808    enumerable: true,
37809    get: function() {
37810        return RootErrorBoundary;
37811    }
37812});
37813const _interop_require_default = __turbopack_context__.r(563141);
37814const _jsxruntime = __turbopack_context__.r(843476);
37815const _react = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(271645));
37816const _gracefuldegradeboundary = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(241624));
37817const _errorboundary = __turbopack_context__.r(972383);
37818const _isbot = __turbopack_context__.r(82604);
37819const isBotUserAgent = typeof window !== 'undefined' && (0, _isbot.isBot)(window.navigator.userAgent);
37820function RootErrorBoundary(param) {
37821    let { children, errorComponent, errorStyles, errorScripts } = param;
37822    if (isBotUserAgent) {
37823        // Preserve existing DOM/HTML for bots to avoid replacing content with an error UI
37824        // and to keep the original SSR output intact.
37825        return /*#__PURE__*/ (0, _jsxruntime.jsx)(_gracefuldegradeboundary.default, {
37826            children: children
37827        });
37828    }
37829    return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {
37830        errorComponent: errorComponent,
37831        errorStyles: errorStyles,
37832        errorScripts: errorScripts,
37833        children: children
37834    });
37835}
37836if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
37837    Object.defineProperty(exports.default, '__esModule', {
37838        value: true
37839    });
37840    Object.assign(exports.default, exports);
37841    module.exports = exports.default;
37842}
37843}),
37844875530, ((__turbopack_context__, module, exports) => {
37845"use strict";
37846
37847var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
37848"use strict";
37849Object.defineProperty(exports, "__esModule", {
37850    value: true
37851});
37852Object.defineProperty(exports, "default", {
37853    enumerable: true,
37854    get: function() {
37855        return AppRouter;
37856    }
37857});
37858const _interop_require_default = __turbopack_context__.r(563141);
37859const _interop_require_wildcard = __turbopack_context__.r(151836);
37860const _jsxruntime = __turbopack_context__.r(843476);
37861const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r(271645));
37862const _approutercontextsharedruntime = __turbopack_context__.r(8372);
37863const _routerreducertypes = __turbopack_context__.r(388540);
37864const _createhreffromurl = __turbopack_context__.r(451191);
37865const _hooksclientcontextsharedruntime = __turbopack_context__.r(47790);
37866const _useactionqueue = __turbopack_context__.r(941538);
37867const _committedstate = __turbopack_context__.r(494272);
37868const _approuterannouncer = __turbopack_context__.r(762634);
37869const _redirectboundary = __turbopack_context__.r(358442);
37870const _findheadincache = __turbopack_context__.r(425018);
37871const _unresolvedthenable = __turbopack_context__.r(201244);
37872const _removebasepath = __turbopack_context__.r(387250);
37873const _hasbasepath = __turbopack_context__.r(652817);
37874const _computechangedpath = __turbopack_context__.r(734727);
37875const _navfailurehandler = __turbopack_context__.r(178377);
37876const _approuterinstance = __turbopack_context__.r(699781);
37877const _redirect = __turbopack_context__.r(124063);
37878const _redirecterror = __turbopack_context__.r(968391);
37879const _links = __turbopack_context__.r(769688);
37880const _rooterrorboundary = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(794109));
37881const _globalerror = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(168027));
37882const _boundarycomponents = __turbopack_context__.r(897367);
37883const _deploymentid = __turbopack_context__.r(543369);
37884const globalMutable = {};
37885function HistoryUpdater(param) {
37886    let { appRouterState } = param;
37887    (0, _react.useInsertionEffect)(()=>{
37888        if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37889        ;
37890        const { tree, pushRef, canonicalUrl, renderedSearch } = appRouterState;
37891        const appHistoryState = {
37892            tree,
37893            renderedSearch
37894        };
37895        // TODO: Use Navigation API if available
37896        const historyState = {
37897            ...pushRef.preserveCustomHistoryState ? window.history.state : {},
37898            // Identifier is shortened intentionally.
37899            // __NA is used to identify if the history entry can be handled by the app-router.
37900            // __N is used to identify if the history entry can be handled by the old router.
37901            __NA: true,
37902            __PRIVATE_NEXTJS_INTERNALS_TREE: appHistoryState
37903        };
37904        if (pushRef.pendingPush && // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.
37905        // This mirrors the browser behavior for normal navigation.
37906        (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== canonicalUrl) {
37907            // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.
37908            pushRef.pendingPush = false;
37909            window.history.pushState(historyState, '', canonicalUrl);
37910        } else {
37911            window.history.replaceState(historyState, '', canonicalUrl);
37912        }
37913        (0, _committedstate.setLastCommittedTree)(tree);
37914    }, [
37915        appRouterState
37916    ]);
37917    (0, _react.useEffect)(()=>{
37918        // The Next-Url and the base tree may affect the result of a prefetch
37919        // task. Re-prefetch all visible links with the updated values. In most
37920        // cases, this will not result in any new network requests, only if
37921        // the prefetch result actually varies on one of these inputs.
37922        (0, _links.pingVisibleLinks)(appRouterState.nextUrl, appRouterState.tree);
37923    }, [
37924        appRouterState.nextUrl,
37925        appRouterState.tree
37926    ]);
37927    return null;
37928}
37929function copyNextJsInternalHistoryState(data) {
37930    if (data == null) data = {};
37931    const currentState = window.history.state;
37932    const __NA = currentState === null || currentState === void 0 ? void 0 : currentState.__NA;
37933    if (__NA) {
37934        data.__NA = __NA;
37935    }
37936    const __PRIVATE_NEXTJS_INTERNALS_TREE = currentState === null || currentState === void 0 ? void 0 : currentState.__PRIVATE_NEXTJS_INTERNALS_TREE;
37937    if (__PRIVATE_NEXTJS_INTERNALS_TREE) {
37938        data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE;
37939    }
37940    return data;
37941}
37942function Head(param) {
37943    let { headCacheNode } = param;
37944    // If this segment has a `prefetchHead`, it's the statically prefetched data.
37945    // We should use that on initial render instead of `head`. Then we'll switch
37946    // to `head` when the dynamic response streams in.
37947    const head = headCacheNode !== null ? headCacheNode.head : null;
37948    const prefetchHead = headCacheNode !== null ? headCacheNode.prefetchHead : null;
37949    // If no prefetch data is available, then we go straight to rendering `head`.
37950    const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head;
37951    // We use `useDeferredValue` to handle switching between the prefetched and
37952    // final values. The second argument is returned on initial render, then it
37953    // re-renders with the first argument.
37954    return (0, _react.useDeferredValue)(head, resolvedPrefetchRsc);
37955}
37956/**
37957 * The global router that wraps the application components.
37958 */ function Router(param) {
37959    let { actionQueue, globalError, webSocket, staticIndicatorState } = param;
37960    const state = (0, _useactionqueue.useActionQueue)(actionQueue);
37961    const { canonicalUrl } = state;
37962    // Add memoized pathname/query for useSearchParams and usePathname.
37963    const { searchParams, pathname } = (0, _react.useMemo)(()=>{
37964        const url = new URL(canonicalUrl, typeof window === 'undefined' ? 'http://n' : window.location.href);
37965        return {
37966            // This is turned into a readonly class in `useSearchParams`
37967            searchParams: url.searchParams,
37968            pathname: (0, _hasbasepath.hasBasePath)(url.pathname) ? (0, _removebasepath.removeBasePath)(url.pathname) : url.pathname
37969        };
37970    }, [
37971        canonicalUrl
37972    ]);
37973    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
37974    ;
37975    (0, _react.useEffect)(()=>{
37976        const sourcePage = (0, _computechangedpath.extractSourcePageFromFlightRouterState)(state.tree);
37977        if (sourcePage !== undefined) {
37978            window.next.__internal_src_page = sourcePage;
37979        } else {
37980            delete window.next.__internal_src_page;
37981        }
37982    }, [
37983        state.tree
37984    ]);
37985    (0, _react.useEffect)(()=>{
37986        // If the app is restored from bfcache, it's possible that
37987        // pushRef.mpaNavigation is true, which would mean that any re-render of this component
37988        // would trigger the mpa navigation logic again from the lines below.
37989        // This will restore the router to the initial state in the event that the app is restored from bfcache.
37990        function handlePageShow(event) {
37991            var _window_history_state;
37992            if (!event.persisted || !((_window_history_state = window.history.state) === null || _window_history_state === void 0 ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE)) {
37993                return;
37994            }
37995            // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.
37996            // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value
37997            // of the last MPA navigation.
37998            globalMutable.pendingMpaPath = undefined;
37999            (0, _useactionqueue.dispatchAppRouterAction)({
38000                type: _routerreducertypes.ACTION_RESTORE,
38001                url: new URL(window.location.href),
38002                historyState: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE
38003            });
38004        }
38005        window.addEventListener('pageshow', handlePageShow);
38006        return ()=>{
38007            window.removeEventListener('pageshow', handlePageShow);
38008        };
38009    }, []);
38010    (0, _react.useEffect)(()=>{
38011        // Ensure that any redirect errors that bubble up outside of the RedirectBoundary
38012        // are caught and handled by the router.
38013        function handleUnhandledRedirect(event) {
38014            const error = 'reason' in event ? event.reason : event.error;
38015            if ((0, _redirecterror.isRedirectError)(error)) {
38016                event.preventDefault();
38017                const url = (0, _redirect.getURLFromRedirectError)(error);
38018                const redirectType = (0, _redirect.getRedirectTypeFromError)(error);
38019                // TODO: This should access the router methods directly, rather than
38020                // go through the public interface.
38021                if (redirectType === 'push') {
38022                    _approuterinstance.publicAppRouterInstance.push(url, {});
38023                } else {
38024                    _approuterinstance.publicAppRouterInstance.replace(url, {});
38025                }
38026            }
38027        }
38028        window.addEventListener('error', handleUnhandledRedirect);
38029        window.addEventListener('unhandledrejection', handleUnhandledRedirect);
38030        return ()=>{
38031            window.removeEventListener('error', handleUnhandledRedirect);
38032            window.removeEventListener('unhandledrejection', handleUnhandledRedirect);
38033        };
38034    }, []);
38035    // When mpaNavigation flag is set do a hard navigation to the new url.
38036    // Infinitely suspend because we don't actually want to rerender any child
38037    // components with the new URL and any entangled state updates shouldn't
38038    // commit either (eg: useTransition isPending should stay true until the page
38039    // unloads).
38040    //
38041    // This is a side effect in render. Don't try this at home, kids. It's
38042    // probably safe because we know this is a singleton component and it's never
38043    // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,
38044    // but that's... fine?)
38045    const { pushRef } = state;
38046    if (pushRef.mpaNavigation) {
38047        // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL
38048        if (globalMutable.pendingMpaPath !== canonicalUrl) {
38049            const location = window.location;
38050            if (pushRef.pendingPush) {
38051                location.assign(canonicalUrl);
38052            } else {
38053                location.replace(canonicalUrl);
38054            }
38055            globalMutable.pendingMpaPath = canonicalUrl;
38056        }
38057        // TODO-APP: Should we listen to navigateerror here to catch failed
38058        // navigations somehow? And should we call window.stop() if a SPA navigation
38059        // should interrupt an MPA one?
38060        // NOTE: This is intentionally using `throw` instead of `use` because we're
38061        // inside an externally mutable condition (pushRef.mpaNavigation), which
38062        // violates the rules of hooks.
38063        throw _unresolvedthenable.unresolvedThenable;
38064    }
38065    (0, _react.useEffect)(()=>{
38066        const originalPushState = window.history.pushState.bind(window.history);
38067        const originalReplaceState = window.history.replaceState.bind(window.history);
38068        // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.
38069        const applyUrlFromHistoryPushReplace = (url)=>{
38070            var _window_history_state;
38071            const href = window.location.href;
38072            const appHistoryState = (_window_history_state = window.history.state) === null || _window_history_state === void 0 ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE;
38073            (0, _react.startTransition)(()=>{
38074                (0, _useactionqueue.dispatchAppRouterAction)({
38075                    type: _routerreducertypes.ACTION_RESTORE,
38076                    url: new URL(url !== null && url !== void 0 ? url : href, href),
38077                    historyState: appHistoryState
38078                });
38079            });
38080        };
38081        /**
38082     * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.
38083     * Ensures Next.js internal history state is copied to the new history entry.
38084     * Ensures usePathname and useSearchParams hold the newly provided url.
38085     */ window.history.pushState = function pushState(data, _unused, url) {
38086            // TODO: Warn when Navigation API is available (navigation.navigate() should be used)
38087            // Avoid a loop when Next.js internals trigger pushState/replaceState
38088            if ((data === null || data === void 0 ? void 0 : data.__NA) || (data === null || data === void 0 ? void 0 : data._N)) {
38089                return originalPushState(data, _unused, url);
38090            }
38091            data = copyNextJsInternalHistoryState(data);
38092            if (url) {
38093                applyUrlFromHistoryPushReplace(url);
38094            }
38095            return originalPushState(data, _unused, url);
38096        };
38097        /**
38098     * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.
38099     * Ensures Next.js internal history state is copied to the new history entry.
38100     * Ensures usePathname and useSearchParams hold the newly provided url.
38101     */ window.history.replaceState = function replaceState(data, _unused, url) {
38102            // TODO: Warn when Navigation API is available (navigation.navigate() should be used)
38103            // Avoid a loop when Next.js internals trigger pushState/replaceState
38104            if ((data === null || data === void 0 ? void 0 : data.__NA) || (data === null || data === void 0 ? void 0 : data._N)) {
38105                return originalReplaceState(data, _unused, url);
38106            }
38107            data = copyNextJsInternalHistoryState(data);
38108            if (url) {
38109                applyUrlFromHistoryPushReplace(url);
38110            }
38111            return originalReplaceState(data, _unused, url);
38112        };
38113        /**
38114     * Handle popstate event, this is used to handle back/forward in the browser.
38115     * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.
38116     * That case can happen when the old router injected the history entry.
38117     */ const onPopState = (event)=>{
38118            if (!event.state) {
38119                // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.
38120                return;
38121            }
38122            // This case happens when the history entry was pushed by the `pages` router.
38123            if (!event.state.__NA) {
38124                window.location.reload();
38125                return;
38126            }
38127            // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously
38128            // Without startTransition works if the cache is there for this path
38129            (0, _react.startTransition)(()=>{
38130                (0, _approuterinstance.dispatchTraverseAction)(window.location.href, event.state.__PRIVATE_NEXTJS_INTERNALS_TREE);
38131            });
38132        };
38133        // Register popstate event to call onPopstate.
38134        window.addEventListener('popstate', onPopState);
38135        return ()=>{
38136            window.history.pushState = originalPushState;
38137            window.history.replaceState = originalReplaceState;
38138            window.removeEventListener('popstate', onPopState);
38139        };
38140    }, []);
38141    const { cache, tree, nextUrl, focusAndScrollRef, previousNextUrl } = state;
38142    const matchingHead = (0, _react.useMemo)(()=>{
38143        return (0, _findheadincache.findHeadInCache)(cache, tree[1]);
38144    }, [
38145        cache,
38146        tree
38147    ]);
38148    // Add memoized pathParams for useParams.
38149    const pathParams = (0, _react.useMemo)(()=>{
38150        return (0, _computechangedpath.getSelectedParams)(tree);
38151    }, [
38152        tree
38153    ]);
38154    // Create instrumented promises for navigation hooks (dev-only)
38155    // These are specially instrumented promises to show in the Suspense DevTools
38156    // Promises are cached outside of render to survive suspense retries.
38157    let instrumentedNavigationPromises = null;
38158    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38159    ;
38160    const layoutRouterContext = (0, _react.useMemo)(()=>{
38161        return {
38162            parentTree: tree,
38163            parentCacheNode: cache,
38164            parentSegmentPath: null,
38165            parentParams: {},
38166            parentLoadingData: null,
38167            // This is the <Activity> "name" that shows up in the Suspense DevTools.
38168            // It represents the root of the app.
38169            debugNameContext: '/',
38170            // Root node always has `url`
38171            // Provided in AppTreeContext to ensure it can be overwritten in layout-router
38172            url: canonicalUrl,
38173            // Root segment is always active
38174            isActive: true
38175        };
38176    }, [
38177        tree,
38178        cache,
38179        canonicalUrl
38180    ]);
38181    const globalLayoutRouterContext = (0, _react.useMemo)(()=>{
38182        return {
38183            tree,
38184            focusAndScrollRef,
38185            nextUrl,
38186            previousNextUrl
38187        };
38188    }, [
38189        tree,
38190        focusAndScrollRef,
38191        nextUrl,
38192        previousNextUrl
38193    ]);
38194    let head;
38195    if (matchingHead !== null) {
38196        // The head is wrapped in an extra component so we can use
38197        // `useDeferredValue` to swap between the prefetched and final versions of
38198        // the head. (This is what LayoutRouter does for segment data, too.)
38199        //
38200        // The `key` is used to remount the component whenever the head moves to
38201        // a different segment.
38202        const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead;
38203        head = /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {
38204            headCacheNode: headCacheNode
38205        }, typeof window === 'undefined' ? headKeyWithoutSearchParams : headKey);
38206    } else {
38207        head = null;
38208    }
38209    let content = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_redirectboundary.RedirectBoundary, {
38210        children: [
38211            head,
38212            /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.RootLayoutBoundary, {
38213                children: cache.rsc
38214            }),
38215            /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuterannouncer.AppRouterAnnouncer, {
38216                tree: tree
38217            })
38218        ]
38219    });
38220    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38221    ;
38222    else {
38223        content = /*#__PURE__*/ (0, _jsxruntime.jsx)(_rooterrorboundary.default, {
38224            errorComponent: globalError[0],
38225            errorStyles: globalError[1],
38226            children: content
38227        });
38228    }
38229    return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
38230        children: [
38231            /*#__PURE__*/ (0, _jsxruntime.jsx)(HistoryUpdater, {
38232                appRouterState: state
38233            }),
38234            ("TURBOPACK compile-time truthy", 1) ? null : /*#__PURE__*/ "TURBOPACK unreachable",
38235            /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.NavigationPromisesContext.Provider, {
38236                value: instrumentedNavigationPromises,
38237                children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {
38238                    value: pathParams,
38239                    children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {
38240                        value: pathname,
38241                        children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {
38242                            value: searchParams,
38243                            children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.GlobalLayoutRouterContext.Provider, {
38244                                value: globalLayoutRouterContext,
38245                                children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {
38246                                    value: _approuterinstance.publicAppRouterInstance,
38247                                    children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {
38248                                        value: layoutRouterContext,
38249                                        children: content
38250                                    })
38251                                })
38252                            })
38253                        })
38254                    })
38255                })
38256            })
38257        ]
38258    });
38259}
38260function AppRouter(param) {
38261    let { actionQueue, globalErrorState, webSocket, staticIndicatorState } = param;
38262    (0, _navfailurehandler.useNavFailureHandler)();
38263    const router = /*#__PURE__*/ (0, _jsxruntime.jsx)(Router, {
38264        actionQueue: actionQueue,
38265        globalError: globalErrorState,
38266        webSocket: webSocket,
38267        staticIndicatorState: staticIndicatorState
38268    });
38269    // At the very top level, use the default GlobalError component as the final fallback.
38270    // When the app router itself fails, which means the framework itself fails, we show the default error.
38271    return /*#__PURE__*/ (0, _jsxruntime.jsx)(_rooterrorboundary.default, {
38272        errorComponent: _globalerror.default,
38273        children: router
38274    });
38275}
38276let runtimeStyles;
38277let runtimeStyleChanged;
38278if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38279;
38280function RuntimeStylesForWebpack() {
38281    var _ref;
38282    const [, forceUpdate] = _react.default.useState(0);
38283    const renderedStylesSize = (_ref = runtimeStyles === null || runtimeStyles === void 0 ? void 0 : runtimeStyles.size) !== null && _ref !== void 0 ? _ref : 0;
38284    (0, _react.useEffect)(()=>{
38285        if (!runtimeStyles || !runtimeStyleChanged) return;
38286        const changed = ()=>forceUpdate((c)=>c + 1);
38287        runtimeStyleChanged.add(changed);
38288        if (renderedStylesSize !== runtimeStyles.size) {
38289            changed();
38290        }
38291        return ()=>{
38292            runtimeStyleChanged.delete(changed);
38293        };
38294    }, [
38295        renderedStylesSize,
38296        forceUpdate
38297    ]);
38298    const query = (0, _deploymentid.getAssetTokenQuery)();
38299    return [
38300        ...runtimeStyles || []
38301    ].map((href, i)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("link", {
38302            rel: "stylesheet",
38303            href: "".concat(href).concat(query),
38304            // @ts-ignore
38305            precedence: "next"
38306        }, i));
38307}
38308if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
38309    Object.defineProperty(exports.default, '__esModule', {
38310        value: true
38311    });
38312    Object.assign(exports.default, exports);
38313    module.exports = exports.default;
38314}
38315}),
38316665716, ((__turbopack_context__, module, exports) => {
38317"use strict";
38318
38319Object.defineProperty(exports, "__esModule", {
38320    value: true
38321});
38322Object.defineProperty(exports, "createInitialRouterState", {
38323    enumerable: true,
38324    get: function() {
38325        return createInitialRouterState;
38326    }
38327});
38328const _createhreffromurl = __turbopack_context__.r(451191);
38329const _computechangedpath = __turbopack_context__.r(734727);
38330const _flightdatahelpers = __turbopack_context__.r(450590);
38331const _pprnavigations = __turbopack_context__.r(595871);
38332const _cache = __turbopack_context__.r(620896);
38333const _types = __turbopack_context__.r(509396);
38334const _bfcache = __turbopack_context__.r(179027);
38335const _fetchserverresponse = __turbopack_context__.r(787288);
38336const _optimisticroutes = __turbopack_context__.r(496167);
38337function createInitialRouterState(param) {
38338    let { navigatedAt, initialRSCPayload, initialFlightStreamForCache, location } = param;
38339    var _ref;
38340    const { c: initialCanonicalUrlParts, f: initialFlightData, q: initialRenderedSearch, i: initialCouldBeIntercepted, S: initialSupportsPerSegmentPrefetching, s: initialStaleTime, l: initialStaticStageByteLength, h: initialHeadVaryParams, p: initialRuntimePrefetchStream, d: initialDynamicStaleTimeSeconds } = initialRSCPayload;
38341    // When initialized on the server, the canonical URL is provided as an array of parts.
38342    // This is to ensure that when the RSC payload streamed to the client, crawlers don't interpret it
38343    // as a URL that should be crawled.
38344    const initialCanonicalUrl = initialCanonicalUrlParts.join('/');
38345    const normalizedFlightData = (0, _flightdatahelpers.getFlightDataPartsFromPath)(initialFlightData[0]);
38346    const { tree: initialTree, seedData: initialSeedData, head: initialHead } = normalizedFlightData;
38347    // For the SSR render, seed data should always be available (we only send back a `null` response
38348    // in the case of a `loading` segment, pre-PPR.)
38349    const canonicalUrl = // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file.
38350    location ? (0, _createhreffromurl.createHrefFromUrl)(location) : initialCanonicalUrl;
38351    // Convert the initial FlightRouterState into the RouteTree type.
38352    // NOTE: The metadataVaryPath isn't used for anything currently because the
38353    // head is embedded into the CacheNode tree, but eventually we'll lift it out
38354    // and store it on the top-level state object.
38355    //
38356    // TODO: For statically-generated-at-build-time HTML pages, the
38357    // FlightRouterState baked into the initial RSC payload won't have the
38358    // correct segment inlining hints (ParentInlinedIntoSelf, InlinedIntoChild)
38359    // because those are computed after the pre-render. The client will need to
38360    // fetch the correct hints from the route tree prefetch (/_tree) response
38361    // before acting on inlining decisions.
38362    const acc = {
38363        metadataVaryPath: null
38364    };
38365    const initialRouteTree = (0, _cache.convertRootFlightRouterStateToRouteTree)(initialTree, initialRenderedSearch, acc);
38366    const metadataVaryPath = acc.metadataVaryPath;
38367    const initialTask = (0, _pprnavigations.createInitialCacheNodeForHydration)(navigatedAt, initialRouteTree, initialSeedData, initialHead, (0, _bfcache.computeDynamicStaleAt)(navigatedAt, initialDynamicStaleTimeSeconds !== null && initialDynamicStaleTimeSeconds !== void 0 ? initialDynamicStaleTimeSeconds : _bfcache.UnknownDynamicStaleTime));
38368    // The following only applies in the browser (location !== null) since neither
38369    // route learning nor segment cache state persists from SSR to client.
38370    if (location !== null && metadataVaryPath !== null) {
38371        // Learn the route pattern so we can predict it for future navigations.
38372        (0, _optimisticroutes.discoverKnownRoute)(Date.now(), location.pathname, null, null, initialRouteTree, metadataVaryPath, initialCouldBeIntercepted, canonicalUrl, initialSupportsPerSegmentPrefetching, false // hasDynamicRewrite
38373        );
38374        // Write the initial seed data into the segment cache so subsequent
38375        // navigations to the initial page can serve cached segments instantly.
38376        if (initialSeedData !== null && initialStaleTime !== undefined) {
38377            if (initialStaticStageByteLength !== undefined && initialFlightStreamForCache != null) {
38378                // Partially static page — truncate the cloned Flight stream at the
38379                // static stage byte boundary, decode, and cache the static subset.
38380                (0, _fetchserverresponse.decodeStaticStage)(initialFlightStreamForCache, initialStaticStageByteLength, undefined).then(async (staticStageResponse)=>{
38381                    const now = Date.now();
38382                    const staleAt = await (0, _cache.getStaleAt)(now, staticStageResponse.s);
38383                    (0, _cache.writeStaticStageResponseIntoCache)(now, staticStageResponse.f, undefined, staticStageResponse.h, staleAt, initialTree, initialRenderedSearch, true // isResponsePartial
38384                    );
38385                }).catch(()=>{
38386                // The static stage processing failed. Not fatal — the page
38387                // rendered normally, we just won't write into the cache.
38388                });
38389            } else {
38390                // Fully static page — cache the entire decoded seed data as-is. We're
38391                // not using the initial response here (which would allow us to combine
38392                // the two branches) to avoid unnecessary decoding of the Flight data,
38393                // since we can just take the seed data that we already decoded during
38394                // hydration and write it into the cache directly.
38395                const now = Date.now();
38396                (0, _cache.getStaleAt)(now, initialStaleTime).then((staleAt)=>{
38397                    (0, _cache.writeStaticStageResponseIntoCache)(now, initialFlightData, undefined, initialHeadVaryParams, staleAt, initialTree, initialRenderedSearch, false // isResponsePartial
38398                    );
38399                }).catch(()=>{
38400                // The static stage processing failed. Not fatal — the page
38401                // rendered normally, we just won't write into the cache.
38402                });
38403                // Cancel the stream clone — fully static path doesn't need it.
38404                initialFlightStreamForCache === null || initialFlightStreamForCache === void 0 ? void 0 : initialFlightStreamForCache.cancel();
38405            }
38406        } else {
38407            // No caching — cancel the unused stream clone.
38408            initialFlightStreamForCache === null || initialFlightStreamForCache === void 0 ? void 0 : initialFlightStreamForCache.cancel();
38409        }
38410        // If the initial RSC payload includes an embedded runtime prefetch stream,
38411        // decode it and write the runtime data into the segment cache. This allows
38412        // subsequent navigations to serve runtime-prefetchable content from cache
38413        // without a separate prefetch request.
38414        if (initialRuntimePrefetchStream != null) {
38415            (0, _cache.processRuntimePrefetchStream)(Date.now(), initialRuntimePrefetchStream, initialTree, initialRenderedSearch).then((processed)=>{
38416                if (processed !== null) {
38417                    (0, _cache.writeDynamicRenderResponseIntoCache)(Date.now(), _types.FetchStrategy.PPRRuntime, processed.flightDatas, processed.buildId, processed.isResponsePartial, processed.headVaryParams, processed.staleAt, processed.navigationSeed, null);
38418                }
38419            }).catch(()=>{
38420            // Runtime prefetch cache write failed. Not fatal — the page rendered
38421            // normally, we just won't cache runtime data.
38422            });
38423        }
38424    }
38425    // NOTE: We intentionally don't check if any data needs to be fetched from the
38426    // server. We assume the initial hydration payload is sufficient to render
38427    // the page.
38428    //
38429    // The completeness of the initial data is an important property that we rely
38430    // on as a last-ditch mechanism for recovering the app; we must always be able
38431    // to reload a fresh HTML document to get to a consistent state.
38432    //
38433    // In the future, there may be cases where the server intentionally sends
38434    // partial data and expects the client to fill in the rest, in which case this
38435    // logic may change. (There already is a similar case where the server sends
38436    // _no_ hydration data in the HTML document at all, and the client fetches it
38437    // separately, but that's different because we still end up hydrating with a
38438    // complete tree.)
38439    const initialState = {
38440        tree: initialTask.route,
38441        cache: initialTask.node,
38442        pushRef: {
38443            pendingPush: false,
38444            mpaNavigation: false,
38445            // First render needs to preserve the previous window.history.state
38446            // to avoid it being overwritten on navigation back/forward with MPA Navigation.
38447            preserveCustomHistoryState: true
38448        },
38449        focusAndScrollRef: {
38450            scrollRef: null,
38451            forceScroll: false,
38452            onlyHashChange: false,
38453            hashFragment: null
38454        },
38455        canonicalUrl,
38456        renderedSearch: initialRenderedSearch,
38457        // the || operator is intentional, the pathname can be an empty string
38458        nextUrl: (_ref = (0, _computechangedpath.extractPathFromFlightRouterState)(initialTree) || (location === null || location === void 0 ? void 0 : location.pathname)) !== null && _ref !== void 0 ? _ref : null,
38459        previousNextUrl: null,
38460        debugInfo: null
38461    };
38462    return initialState;
38463}
38464if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
38465    Object.defineProperty(exports.default, '__esModule', {
38466        value: true
38467    });
38468    Object.assign(exports.default, exports);
38469    module.exports = exports.default;
38470}
38471}),
38472198569, ((__turbopack_context__, module, exports) => {
38473"use strict";
38474
38475var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
38476"use strict";
38477Object.defineProperty(exports, "__esModule", {
38478    value: true
38479});
38480Object.defineProperty(exports, "hydrate", {
38481    enumerable: true,
38482    get: function() {
38483        return hydrate;
38484    }
38485});
38486const _interop_require_default = __turbopack_context__.r(563141);
38487const _jsxruntime = __turbopack_context__.r(843476);
38488__turbopack_context__.r(523911);
38489const _client = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(88014));
38490const _react = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(271645));
38491const _client1 = __turbopack_context__.r(235326);
38492const _headmanagercontextsharedruntime = __turbopack_context__.r(742732);
38493const _onrecoverableerror = __turbopack_context__.r(597238);
38494const _errorboundarycallbacks = __turbopack_context__.r(851323);
38495const _appcallserver = __turbopack_context__.r(132120);
38496const _appfindsourcemapurl = __turbopack_context__.r(92245);
38497const _approuterinstance = __turbopack_context__.r(699781);
38498const _approuter = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r(875530));
38499const _createinitialrouterstate = __turbopack_context__.r(665716);
38500const _approutercontextsharedruntime = __turbopack_context__.r(8372);
38501const _flightdatahelpers = __turbopack_context__.r(450590);
38502const _deploymentid = __turbopack_context__.r(543369);
38503const _navigationbuildid = __turbopack_context__.r(732992);
38504/// <reference types="react-dom/experimental" />
38505const createFromReadableStream = _client1.createFromReadableStream;
38506const createFromFetch = _client1.createFromFetch;
38507const appElement = document;
38508// Instant Navigation Testing API: captured once at module init. When truthy,
38509// this is the fetch promise for the static RSC payload (set by an injected
38510// <script> tag in the static shell HTML).
38511const instantTestStaticFetch = self.__next_instant_test ? self.__next_instant_test : undefined;
38512const encoder = new TextEncoder();
38513let initialServerDataBuffer = undefined;
38514let initialServerDataWriter = undefined;
38515let initialServerDataLoaded = false;
38516let initialServerDataFlushed = false;
38517let initialFormStateData = null;
38518function nextServerDataCallback(seg) {
38519    if (seg[0] === 0) {
38520        initialServerDataBuffer = [];
38521    } else if (seg[0] === 1) {
38522        if (!initialServerDataBuffer) throw Object.defineProperty(new Error('Unexpected server data: missing bootstrap script.'), "__NEXT_ERROR_CODE", {
38523            value: "E18",
38524            enumerable: false,
38525            configurable: true
38526        });
38527        if (initialServerDataWriter) {
38528            initialServerDataWriter.enqueue(encoder.encode(seg[1]));
38529        } else {
38530            initialServerDataBuffer.push(seg[1]);
38531        }
38532    } else if (seg[0] === 2) {
38533        initialFormStateData = seg[1];
38534    } else if (seg[0] === 3) {
38535        if (!initialServerDataBuffer) throw Object.defineProperty(new Error('Unexpected server data: missing bootstrap script.'), "__NEXT_ERROR_CODE", {
38536            value: "E18",
38537            enumerable: false,
38538            configurable: true
38539        });
38540        // Decode the base64 string back to binary data.
38541        const binaryString = atob(seg[1]);
38542        const decodedChunk = new Uint8Array(binaryString.length);
38543        for(var i = 0; i < binaryString.length; i++){
38544            decodedChunk[i] = binaryString.charCodeAt(i);
38545        }
38546        if (initialServerDataWriter) {
38547            initialServerDataWriter.enqueue(decodedChunk);
38548        } else {
38549            initialServerDataBuffer.push(decodedChunk);
38550        }
38551    }
38552}
38553function isStreamErrorOrUnfinished(ctr) {
38554    // If `desiredSize` is null, it means the stream is closed or errored. If it is lower than 0, the stream is still unfinished.
38555    return ctr.desiredSize === null || ctr.desiredSize < 0;
38556}
38557// There might be race conditions between `nextServerDataRegisterWriter` and
38558// `DOMContentLoaded`. The former will be called when React starts to hydrate
38559// the root, the latter will be called when the DOM is fully loaded.
38560// For streaming, the former is called first due to partial hydration.
38561// For non-streaming, the latter can be called first.
38562// Hence, we use two variables `initialServerDataLoaded` and
38563// `initialServerDataFlushed` to make sure the writer will be closed and
38564// `initialServerDataBuffer` will be cleared in the right time.
38565function nextServerDataRegisterWriter(ctr) {
38566    if (initialServerDataBuffer) {
38567        initialServerDataBuffer.forEach((val)=>{
38568            ctr.enqueue(typeof val === 'string' ? encoder.encode(val) : val);
38569        });
38570        if (initialServerDataLoaded && !initialServerDataFlushed) {
38571            // Instant Navigation Testing API: don't close or error the inline
38572            // Flight stream. The static shell has no inline Flight data, so the
38573            // stream is empty. Closing it would cause React to log an error about
38574            // missing data. Leaving it open lets React treat any holes as
38575            // "still suspended." Hydration uses the separately fetched RSC payload
38576            // (self.__next_instant_test), not this stream.
38577            if (isStreamErrorOrUnfinished(ctr)) {
38578                if (!instantTestStaticFetch) {
38579                    ctr.error(Object.defineProperty(new Error('The connection to the page was unexpectedly closed, possibly due to the stop button being clicked, loss of Wi-Fi, or an unstable internet connection.'), "__NEXT_ERROR_CODE", {
38580                        value: "E117",
38581                        enumerable: false,
38582                        configurable: true
38583                    }));
38584                }
38585            } else {
38586                ctr.close();
38587            }
38588            initialServerDataFlushed = true;
38589            initialServerDataBuffer = undefined;
38590        }
38591    }
38592    initialServerDataWriter = ctr;
38593}
38594// When `DOMContentLoaded`, we can close all pending writers to finish hydration.
38595const DOMContentLoaded = function() {
38596    if (initialServerDataWriter && !initialServerDataFlushed) {
38597        initialServerDataWriter.close();
38598        initialServerDataFlushed = true;
38599        initialServerDataBuffer = undefined;
38600    }
38601    initialServerDataLoaded = true;
38602};
38603// It's possible that the DOM is already loaded.
38604if (document.readyState === 'loading') {
38605    document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
38606} else {
38607    // Delayed in marco task to ensure it's executed later than hydration
38608    setTimeout(DOMContentLoaded);
38609}
38610const nextServerDataLoadingGlobal = self.__next_f = self.__next_f || [];
38611// Consume all buffered chunks and clear the global data array right after to release memory.
38612// Otherwise it will be retained indefinitely.
38613nextServerDataLoadingGlobal.forEach(nextServerDataCallback);
38614nextServerDataLoadingGlobal.length = 0;
38615// Patch its push method so subsequent chunks are handled (but not actually pushed to the array).
38616nextServerDataLoadingGlobal.push = nextServerDataCallback;
38617let readable = new ReadableStream({
38618    start (controller) {
38619        nextServerDataRegisterWriter(controller);
38620    }
38621});
38622if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38623;
38624// When Cache Components is enabled, tee the inlined Flight stream so we can
38625// truncate a clone at the static stage byte boundary and cache it. We don't
38626// know if `l` is present until React decodes the payload, so always tee and
38627// cancel the clone if not needed.
38628let initialFlightStreamForCache = null;
38629if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38630;
38631let debugChannel;
38632if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38633;
38634let initialServerResponse;
38635if (instantTestStaticFetch) {
38636    // Instant Navigation Testing API: hydrate from the static RSC payload
38637    // fetch kicked off by an injected <script> tag, instead of the inline
38638    // Flight data (which is not present in the static shell).
38639    initialServerResponse = Promise.resolve(createFromFetch(instantTestStaticFetch, {
38640        callServer: _appcallserver.callServer,
38641        findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,
38642        debugChannel,
38643        // The static fetch response is a partial stream (static-only Flight
38644        // data with no dynamic content). Allow it to close without error so
38645        // React treats dynamic holes as still-suspended rather than
38646        // triggering error recovery.
38647        unstable_allowPartialStream: true
38648    })).then(async (initialRSCPayload)=>{
38649        return (0, _flightdatahelpers.createInitialRSCPayloadFromFallbackPrerender)(await instantTestStaticFetch, initialRSCPayload);
38650    });
38651} else if (window.__NEXT_CLIENT_RESUME) {
38652    const clientResumeFetch = window.__NEXT_CLIENT_RESUME;
38653    initialServerResponse = Promise.resolve(createFromFetch(clientResumeFetch, {
38654        callServer: _appcallserver.callServer,
38655        findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,
38656        debugChannel
38657    })).then(async (fallbackInitialRSCPayload)=>(0, _flightdatahelpers.createInitialRSCPayloadFromFallbackPrerender)(await clientResumeFetch, fallbackInitialRSCPayload));
38658} else {
38659    initialServerResponse = createFromReadableStream(readable, {
38660        callServer: _appcallserver.callServer,
38661        findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,
38662        debugChannel,
38663        startTime: 0
38664    });
38665}
38666function ServerRoot(param) {
38667    let { initialRSCPayload, actionQueue, webSocket, staticIndicatorState } = param;
38668    const router = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuter.default, {
38669        actionQueue: actionQueue,
38670        globalErrorState: initialRSCPayload.G,
38671        webSocket: webSocket,
38672        staticIndicatorState: staticIndicatorState
38673    });
38674    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38675    ;
38676    return router;
38677}
38678const StrictModeIfEnabled = ("TURBOPACK compile-time truthy", 1) ? _react.default.StrictMode : "TURBOPACK unreachable";
38679function Root(param) {
38680    let { children } = param;
38681    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38682    ;
38683    return children;
38684}
38685const enableTransitionIndicator = ("TURBOPACK compile-time value", false);
38686function noDefaultTransitionIndicator() {
38687    return ()=>{};
38688}
38689const reactRootOptions = {
38690    onDefaultTransitionIndicator: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : noDefaultTransitionIndicator,
38691    onRecoverableError: _onrecoverableerror.onRecoverableError,
38692    onCaughtError: _errorboundarycallbacks.onCaughtError,
38693    onUncaughtError: _errorboundarycallbacks.onUncaughtError
38694};
38695async function hydrate(instrumentationHooks, assetPrefix) {
38696    let staticIndicatorState;
38697    let webSocket;
38698    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38699    ;
38700    const initialRSCPayload = await initialServerResponse;
38701    // setNavigationBuildId should be called only once, during JS initialization
38702    // and before any components have hydrated.
38703    if (initialRSCPayload.b) {
38704        (0, _navigationbuildid.setNavigationBuildId)(initialRSCPayload.b);
38705    } else {
38706        (0, _navigationbuildid.setNavigationBuildId)((0, _deploymentid.getDeploymentId)());
38707    }
38708    const initialTimestamp = Date.now();
38709    const actionQueue = (0, _approuterinstance.createMutableActionQueue)((0, _createinitialrouterstate.createInitialRouterState)({
38710        navigatedAt: initialTimestamp,
38711        initialRSCPayload,
38712        initialFlightStreamForCache,
38713        location: window.location
38714    }), instrumentationHooks);
38715    const reactEl = /*#__PURE__*/ (0, _jsxruntime.jsx)(StrictModeIfEnabled, {
38716        children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {
38717            value: {
38718                appDir: true
38719            },
38720            children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {
38721                children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerRoot, {
38722                    initialRSCPayload: initialRSCPayload,
38723                    actionQueue: actionQueue,
38724                    webSocket: webSocket,
38725                    staticIndicatorState: staticIndicatorState
38726                })
38727            })
38728        })
38729    });
38730    if (document.documentElement.id === '__next_error__') {
38731        let element = reactEl;
38732        // Server rendering failed, fall back to client-side rendering
38733        if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38734        ;
38735        _client.default.createRoot(appElement, reactRootOptions).render(element);
38736    } else {
38737        _react.default.startTransition(()=>{
38738            _client.default.hydrateRoot(appElement, reactEl, {
38739                ...reactRootOptions,
38740                formState: initialFormStateData
38741            });
38742        });
38743    }
38744    // TODO-APP: Remove this logic when Float has GC built-in in development.
38745    if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38746    ;
38747}
38748if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
38749    Object.defineProperty(exports.default, '__esModule', {
38750        value: true
38751    });
38752    Object.assign(exports.default, exports);
38753    module.exports = exports.default;
38754}
38755}),
38756494553, ((__turbopack_context__, module, exports) => {
38757"use strict";
38758
38759var __TURBOPACK__imported__module__247167__ = /*#__PURE__*/ __turbopack_context__.i(247167);
38760"use strict";
38761Object.defineProperty(exports, "__esModule", {
38762    value: true
38763});
38764__turbopack_context__.r(423755);
38765const _appbootstrap = __turbopack_context__.r(396517);
38766const _onrecoverableerror = __turbopack_context__.r(597238);
38767window.next.turbopack = true;
38768self.__webpack_hash__ = '';
38769// eslint-disable-next-line @next/internal/typechecked-require
38770const instrumentationHooks = __turbopack_context__.r(5526);
38771(0, _appbootstrap.appBootstrap)((assetPrefix)=>{
38772    const { hydrate } = __turbopack_context__.r(198569);
38773    try {
38774        hydrate(instrumentationHooks, assetPrefix);
38775    } finally{
38776        if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
38777        ;
38778    }
38779});
38780if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
38781    Object.defineProperty(exports.default, '__esModule', {
38782        value: true
38783    });
38784    Object.assign(exports.default, exports);
38785    module.exports = exports.default;
38786}
38787}),
38788]);
38789
38790//# debugId=a8795eda-1169-ad41-8b9e-d0f246524b9c

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.