@protobase/ui 0.66.5 → 0.66.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account/blocks/password-block.js +1 -1
- package/dist/account/change-email-dialog.js +5 -1
- package/dist/account/password-change-dialog.js +4 -11
- package/dist/account/password-section.js +2 -2
- package/dist/app/error-reporting.js +8 -3
- package/dist/app/field-types/field-type-cells.js +2 -1
- package/dist/auth/email-code-form.js +8 -4
- package/dist/auth/sign-up-code-form.js +8 -4
- package/dist/auth/two-factor-form.js +2 -1
- package/dist/locale/en.js +5 -4
- package/dist/locale/nl.js +5 -4
- package/dist/package.js +1 -1
- package/dist/shell/assets/app-BZ_OcfpZ.js +8 -0
- package/dist/shell/assets/calls-uuSb7D6L.js +2 -0
- package/dist/shell/assets/cn-B1sdg8aY.js +2 -0
- package/dist/shell/assets/export-worker-CcXp0ZdG.js +15 -0
- package/dist/shell/assets/index-B2M0LDVQ.js +2 -0
- package/dist/shell/assets/maplibre-DfXLXH-O.js +815 -0
- package/dist/shell/assets/{markdown-content-DOuciTNH.js → markdown-content-L1MZShpP.js} +2 -2
- package/dist/shell/assets/parse-worker-CUJ2o-AL.js +35 -0
- package/dist/shell/assets/preload-helper-Ru-oozfe.js +2 -0
- package/dist/shell/assets/{prod-YZ9ZMG1O.js → prod-DSoLg5cQ.js} +3 -3
- package/dist/shell/assets/{react-CR5VJ85Q.js → react-CqoBMk9d.js} +2 -2
- package/dist/shell/assets/record-map-Cocva8wo.js +2 -0
- package/dist/shell/assets/records-map-B1PDo3PS.js +2 -0
- package/dist/shell/assets/rolldown-runtime-DXfiGoCU.js +1 -0
- package/dist/shell/assets/shared-protobase-ui-V8ARYzmY.js +2 -0
- package/dist/shell/assets/shared-react-CJlT6JLM.js +1 -0
- package/dist/shell/assets/shared-react-dom-untDBgp5.js +1 -0
- package/dist/shell/assets/shared-react-jsx-runtime-DGG2WguE.js +1 -0
- package/dist/shell/assets/{vendor-Kvdo8Jrw.js → vendor-qs9zUu9T.js} +2 -2
- package/dist/shell/index.html +8 -8
- package/dist/shell/protobase.shell.json +2 -2
- package/dist/shell/protobase.sw.js +2 -2
- package/dist/shell-source-maps/assets/app-BZ_OcfpZ.js.map +1 -0
- package/dist/shell-source-maps/assets/calls-uuSb7D6L.js.map +1 -0
- package/dist/shell-source-maps/assets/cn-B1sdg8aY.js.map +1 -0
- package/dist/shell-source-maps/assets/export-worker-CcXp0ZdG.js.map +1 -0
- package/dist/shell-source-maps/assets/index-B2M0LDVQ.js.map +1 -0
- package/dist/shell-source-maps/assets/maplibre-DfXLXH-O.js.map +1 -0
- package/dist/shell-source-maps/assets/{markdown-content-DOuciTNH.js.map → markdown-content-L1MZShpP.js.map} +1 -1
- package/dist/shell-source-maps/assets/parse-worker-CUJ2o-AL.js.map +1 -0
- package/dist/shell-source-maps/assets/preload-helper-Ru-oozfe.js.map +1 -0
- package/dist/shell-source-maps/assets/prod-DSoLg5cQ.js.map +1 -0
- package/dist/shell-source-maps/assets/react-CqoBMk9d.js.map +1 -0
- package/dist/shell-source-maps/assets/record-map-Cocva8wo.js.map +1 -0
- package/dist/shell-source-maps/assets/records-map-B1PDo3PS.js.map +1 -0
- package/dist/shell-source-maps/assets/shared-protobase-ui-V8ARYzmY.js.map +1 -0
- package/dist/shell-source-maps/assets/{vendor-Kvdo8Jrw.js.map → vendor-qs9zUu9T.js.map} +1 -1
- package/package.json +4 -4
- package/dist/shell/assets/app-CqYVvgWc.js +0 -8
- package/dist/shell/assets/calls-EtUk7HmO.js +0 -2
- package/dist/shell/assets/cn-Bi0ZEjD9.js +0 -2
- package/dist/shell/assets/export-worker-BKuC4P2E.js +0 -15
- package/dist/shell/assets/index-8DBJXkuQ.js +0 -2
- package/dist/shell/assets/maplibre-lc2A-_P4.js +0 -815
- package/dist/shell/assets/parse-worker-BzLD2jKf.js +0 -35
- package/dist/shell/assets/preload-helper-DedkISGJ.js +0 -2
- package/dist/shell/assets/record-map-CupIwJyD.js +0 -2
- package/dist/shell/assets/records-map-CzL9UaeM.js +0 -2
- package/dist/shell/assets/rolldown-runtime-hePW80VL.js +0 -1
- package/dist/shell/assets/shared-protobase-ui-CZb9eNY5.js +0 -2
- package/dist/shell/assets/shared-react-CuZpzdyh.js +0 -1
- package/dist/shell/assets/shared-react-dom-BNlY7-7i.js +0 -1
- package/dist/shell/assets/shared-react-jsx-runtime-Csr2Kx2w.js +0 -1
- package/dist/shell-source-maps/assets/app-CqYVvgWc.js.map +0 -1
- package/dist/shell-source-maps/assets/calls-EtUk7HmO.js.map +0 -1
- package/dist/shell-source-maps/assets/cn-Bi0ZEjD9.js.map +0 -1
- package/dist/shell-source-maps/assets/export-worker-BKuC4P2E.js.map +0 -1
- package/dist/shell-source-maps/assets/index-8DBJXkuQ.js.map +0 -1
- package/dist/shell-source-maps/assets/maplibre-lc2A-_P4.js.map +0 -1
- package/dist/shell-source-maps/assets/parse-worker-BzLD2jKf.js.map +0 -1
- package/dist/shell-source-maps/assets/preload-helper-DedkISGJ.js.map +0 -1
- package/dist/shell-source-maps/assets/prod-YZ9ZMG1O.js.map +0 -1
- package/dist/shell-source-maps/assets/react-CR5VJ85Q.js.map +0 -1
- package/dist/shell-source-maps/assets/record-map-CupIwJyD.js.map +0 -1
- package/dist/shell-source-maps/assets/records-map-CzL9UaeM.js.map +0 -1
- package/dist/shell-source-maps/assets/shared-protobase-ui-CZb9eNY5.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prod-YZ9ZMG1O.js","names":["DEBUG_BUILD","DEBUG_BUILD","handlerData","isErrorEvent","getConstructorName","withScope","DEBUG_BUILD","SENTRY_OP","SENTRY_ORIGIN","SENTRY_SEGMENT_NAME_SOURCE","DEBUG_BUILD","DEBUG_BUILD","_getBufferMap","DEBUG_BUILD","SENTRY_PROFILE_ID","SENTRY_EXCLUSIVE_TIME","DEBUG_BUILD","DEBUG_BUILD","DEBUG_BUILD","INTEGRATION_NAME","INTEGRATION_NAME","_shouldDropEvent","DEBUG_BUILD","INTEGRATION_NAME","INTEGRATION_NAME","INTEGRATION_NAME","GEN_AI_CONVERSATION_ID","WINDOW","DEBUG_BUILD","WINDOW","WINDOW","WINDOW","DEBUG_BUILD","WINDOW","globalObject","WINDOW","WINDOW","WINDOW","_INTERNAL_enhanceErrorWithSentryInfo","isErrorEvent","errorEvent","objectException","INTEGRATION_NAME","INTEGRATION_NAME","globalObject","INTEGRATION_NAME","INTEGRATION_NAME","_INTERNAL_filterKeyValueData","USER_AGENT_ORIGINAL","SENTRY_IS_LOCALHOST","DEBUG_BUILD$2","GLOBAL_OBJ","SDK_VERSION","getMainCarrier","getSentryCarrier","__SENTRY__","carrier","getGlobalSingleton","obj","name","creator","CONSOLE_LEVELS","PREFIX","originalConsoleMethods","consoleSandbox","callback","console","wrappedFuncs","wrappedLevels","originalConsoleMethod","level","enable","disable","isEnabled","_getLoggerSettings","log","args","_maybeLog","warn","error","debug","STACKTRACE_FRAME_LIMIT","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","a","b","p","frames","lines","stack","i","skipFirstLines","line","cleanedLine","parser","frame","framesToPop","stripSentryFramesAndReverse","stackParserFromStackParserOptions","stackParser","localStack","getLastStackFrame","arr","defaultFunctionName","getFunctionName","fn","getFramesFromEvent","exception","event","value","handlers","instrumented","addHandler","type","handler","typeHandlers","index","maybeInstrument","instrumentFn","e","triggerHandlers","data","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","objectToString","isError","wat","isInstanceOf","isBuiltin","className","isErrorEvent$1","isDOMError","isDOMException","isString","isParameterizedString","isPrimitive","isPlainObject","isObjectLike","isEvent","isRegExp","isThenable","base","isRequest","request","fill","source","original","wrapped","replacementFactory","markFunctionWrapped","addNonEnumerableProperty","getOriginalFunction","func","convertToPlainObject","getOwnProperties","detail","extractExceptionKeysForMessage","keys","RESOLVED_RUNNER","withRandomSafeContext","cb","sym","globalWithSymbol","safeMathRandom","safeDateNow","SENTRY_SKIP_NORMALIZATION","SENTRY_OVERRIDE_NORMALIZATION_DEPTH","hasSkipNormalizationHint","getNormalizationDepthOverrideHint","v","stringifier","setNormalizeStringifier","newStringifier","normalize","visit","input","depth","maxProperties","err","normalizeToSize","normalized","object","jsonSize","maxSize","memoBuilder","memoize","unmemoize","memo","stringified","stringifyValue","key","overrideDepth","remainingDepth","valueWithToJSON","numAdded","visitable","visitKey","visitValue","getConstructorName$1","prototype","utf8Length","inner","truncate","str","max","safeJoin","output","delimiter","isMatchingPattern","pattern","requireExactStringMatch","stringMatchesSomePattern","patterns","testString","getCrypto","gbl","emptyUuid","getRandomByte","uuid4","crypto","c","getFirstException","getEventDescription","eventId","message","firstException","addExceptionTypeValue","values","addExceptionMechanism","applyExceptionMechanism","newMechanism","addExceptionMechanismToCapturedException","exceptions","capturedException","defaultMechanism","currentMechanism","checkOrSetAlreadyCaught","isAlreadyCaptured","ONE_SECOND_IN_MS","CLOCK_DRIFT_THRESHOLD_MS","MAX_TIME_ORIGIN_SEGMENTS","dateTimestampInSeconds","_timeOriginSegments","createUnixTimestampInSecondsFunc","performance","correctedTimeOrigin","isFirstCall","lastCheckedPerformanceNow","performanceNow","dateNow","_cachedTimestampInSecondsFn","timestampInSeconds","makeSession","startingTime","session","sessionToJSON","context","updateSession","duration","closeSession","status","merge","mergeObj","levels","initialObj","generateTraceId","generateSpanId","DEFAULT_MAX_BREADCRUMBS","Scope","newScope","client","lastEventId","user","conversationId","tags","newAttributes","extras","extra","fingerprint","captureContext","scopeToMerge","attributes","contexts","propagationContext","maxCrumbs","maxBreadcrumbs","mergedBreadcrumb","breadcrumb","attachment","newData","hint","syntheticException","getDefaultCurrentScope","getDefaultIsolationScope","SUPPRESS_TRACING_KEY","isActualPromise","kChainedCopy","chainAndCopyPromiseLike","chained","onSuccess","onError","copyProps","mutated","AsyncContextStack","assignedScope","scope","assignedIsolationScope","isolationScope","maybePromiseResult","getAsyncContextStack","sentry","withScope$1","withSetScope","withIsolationScope","getStackAsyncContextStrategy","suppressTracingInStack","res","getAsyncContextStrategy","isAttributeObject","maybeObj","attributeValueToTypedAttributeValue","rawValue","attributeValue","getTypedAttributeValue","checkedUnit","unit","useFallback","stringValue","serializeAttributes","serializedAttributes","typedValue","fallback","primitiveType","getExternalPropagationContext","getCurrentScope","getIsolationScope","getGlobalScope","withScope","rest","acs","getClient","getTraceContextFromScope","externalContext","traceContext","traceId","propagationSpanId","parentSpanId","wr","Vd","Jd","mm","gm","hm","Nm","mb","SPAN_STATUS_TYPES","isStatusErrorMessageValid","derefWeakRef","ref","SCOPE_ON_START_SPAN_FIELD","ISOLATION_SCOPE_ON_START_SPAN_FIELD","getCapturedScopesOnSpan","spanWithScopes","span","baggageHeaderToDynamicSamplingContext","baggageObject","parseBaggageHeader","baggageHeader","dynamicSamplingContext","nonPrefixedKey","acc","currBaggageObject","baggageHeaderToObject","curr","eqIdx","baggageEntry","keyOrValue","ORG_ID_REGEX","DSN_REGEX","isValidProtocol","protocol","dsnToString","dsn","publicKey","withPassword","pass","host","port","path","projectId","dsnFromString","match","lastPath","split","projectMatch","dsnFromComponents","components","validateDsn","component","extractOrgIdFromDsnHost","extractOrgIdFromClient","options","org_id","makeDsn","from","parseSampleRate","sampleRate","rate","SCOPE_SPAN_FIELD","_getSpanForScope","spanToTraceContext","trace_id","parent_span_id","isRemote","spanId","spanToStaticSpanJSON","convertSpanLinksForEnvelope","links","restContext","traceFlags","spanTimeInputToSeconds","ensureTimestampInSeconds","timestamp","spanIsSentrySpan","span_id","spanIsOpenTelemetrySdkTraceBaseSpan","getOtelParentSpanId","startTime","endTime","getStatusMessage","streamedSpanJsonToSerializedSpan","spanJson","link","castSpan","spanIsSampled","ROOT_SPAN_FIELD","getRootSpan","INTERNAL_getSegmentSpan","getActiveSpan","hasSpansEnabled","maybeOptions","logIgnoredSpan","droppedSpan","shouldIgnoreSpan","ignoreSpans","isStringOrRegExp","hasAttributes","nameMatches","opMatches","attrsMatch","valuePattern","_matchesAttributeValue","actual","pat","reparentChildSpans","droppedSpanParentId","dropSpan","droppedSpanId","spans","installedIntegrations","filterDuplicates","integrationsByName","integrations","currentInstance","existingInstance","getIntegrationsToSetup","defaultIntegrations","userIntegrations","resolvedUserIntegrations","setupIntegrations","integrationIndex","integration","setupIntegration","afterSetupIntegrations","processor","hook","defineIntegration","DEFAULT_ENVIRONMENT","NON_RECORDING_SPAN_FIELD","spanIsNonRecordingSpan","FROZEN_DSC_FIELD","getDynamicSamplingContextFromClient","public_key","dsc","getDynamicSamplingContextFromScope","getDynamicSamplingContextFromSpan","rootSpan","rootSpanJson","rootSpanAttributes","traceState","rootSpanSampleRate","applyLocalSampleRateToDsc","dsc2","frozenDsc","isNonRecordingRoot","isIgnoredRoot","capturedScope","scopeDsc","traceStateDsc","dscOnTraceState","applyScopeDataToEvent","applyDataToEvent","applyFingerprintToEvent","applyBreadcrumbsToEvent","breadcrumbs","applySdkMetadataToEvent","sdkProcessingMetadata","mergeScopeData","mergeData","mergeAndOverwriteScopeData","transactionName","eventProcessors","attachments","prop","mergeVal","getCombinedScopeData","scopeData","currentScope","mergedBreadcrumbs","applySpanToEvent","safeCallback","result","recover","isStaticBeforeSendSpanCallback","applyBeforeSendSpanCallback","beforeSendSpan","spanJsonToSerializedStreamedSpan","safeSetSpanJSONAttributes","originalAttributes","spanJSON","hasSpanStreamingEnabled","safeUnref","timer","createEnvelope","headers","items","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","envelopeItemType","envelopeContainsItemType","types","encodeUTF8","serializeEnvelope","envHeaders","parts","append","next","item","itemHeaders","payload","stringifiedPayload","concatBuffers","totalLength","buffers","buf","merged","offset","buffer","createAttachmentEnvelopeItem","DATA_CATEGORY_OVERRIDES","_isOverriddenType","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","createEventEnvelopeHeaders","sdkInfo","tunnel","getDataCategoryByType","isBrowserBundle","getSDKSource","isNodeEnv","isBrowser","isElectronNodeRenderer","createSpanContainerItem","inferSetting","serializedSpans","escapedSpanTraceContexts","toWeakMapKey","applyEscapedErrorSpanToEvent","eventTraceContext","_enhanceEventWithSdkInfo","newSdkInfo","eventSdkInfo","createSessionEnvelope","metadata","createEventEnvelope","eventType","envelopeHeaders","STATE_PENDING","STATE_RESOLVED","STATE_REJECTED","resolvedSyncPromise","SyncPromise","resolve","rejectedSyncPromise","reject","reason","executor","onfulfilled","onrejected","val","isRejected","onfinally","cachedHandlers","setResult","state","notifyEventProcessors","_notifyEventProcessors","processors","onDrop","processorName","callbackError","final","parsedStackResults","lastSentryKeysCount","lastNativeKeysCount","cachedFilenameDebugIds","getFilenameToDebugIdMap","sentryDebugIdMap","nativeDebugIdMap","sentryDebugIdKeys","nativeDebugIdKeys","processDebugIds","debugIdKeys","debugId","debugIdMap","parsedStack","filename","isInternalException","getPossibleEventMessages","possibleMessages","lastException","prepareEvent","prepared","applyClientOptions","applyIntegrationsMetadata","applyDebugIds","finalScope","getFinalScope","clientEventProcessors","isTransaction","spanCountBeforeProcessing","evt","droppedSpanCount","applyDebugMeta","normalizeDepth","normalizeEvent","normalizeMaxBreadth","environment","release","dist","maxValueLength","filenameDebugIdMap","images","debug_id","integrationNames","maxBreadth","parseEventHintOrCaptureContext","hintIsScopeOrFunction","hintIsScopeContext","captureContextKeys","captureException","captureEvent","startSession","userAgent","currentSession","endSession","_sendSessionUpdate","captureSession","end","getBaseApiEndpoint","_getIngestEndpoint","_encodedAuth","params","getEnvelopeEndpointWithUrlEncodedAuth","createLogContainerEnvelopeItem","inferUserData","createLogEnvelope","logs","_INTERNAL_flushLogsBuffer","logBuffer","maybeLogBuffer","_INTERNAL_getLogBuffer","clientOptions","_getBufferMap$1","createMetricContainerEnvelopeItem","createMetricEnvelope","metrics","_INTERNAL_flushMetricsBuffer","metricBuffer","maybeMetricBuffer","_INTERNAL_getMetricBuffer","_getBufferMap","extractGenAiSpansFromEvent","genAiSpans","remainingSpans","SENTRY_BUFFER_FULL_ERROR","makePromiseBuffer","isReady","limit","remove","task","add","taskProducer","drain","drainPromise","timeout","promises","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","headerDelay","header","headerDate","now","disabledUntil","limits","dataCategory","isRateLimited","updateRateLimits","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","delay","category","statusCode","createTransport","rateLimits","flush","recordItemLoss","send","filteredEnvelopeItems","filteredEnvelope","recordEnvelopeLoss","makeRequest","response","createClientReportEnvelope","clientReportItem","convertTransactionEventToSpanJson","convertSpanJsonToTransactionEvent","maybeWarnAboutIgnoredTransactionOptions","DEFAULTS","isCollectBehavior","resolveHttpHeaders","httpHeaders","resolveDataCollectionOptions","dc","ALREADY_SEEN_ERROR","MISSING_RELEASE_FOR_SESSION_ERROR","INTERNAL_ERROR_SYMBOL","DO_NOT_SEND_EVENT_SYMBOL","DEFAULT_FLUSH_INTERVAL","CLOSED_CLIENT_SYMBOL","isClientClosed","_makeInternalError","_makeDoNotSendEventError","_isInternalError","_isDoNotSendEventError","setupWeightBasedFlushing","weight","flushTimeout","isTimerActive","flushHook","afterCaptureHook","estimateSizeFn","flushFn","flushInterval","Client","traceLifecycle","url","estimateLogSizeInBytes","estimateMetricSizeInBytes","hintWithEventId","eventMessage","isMessage","promisedEvent","capturedSpanScope","capturedSpanIsolationScope","transport","clientFinished","transportFlushed","eventProcessor","integrationName","isAlreadyInstalled","genAiSpanItem","env","sendResponse","clientReleaseOption","clientEnvironmentOption","sessionAttrs","count","hookCallbacks","uniqueCallback","callbacks","unhandled","errored","ex","sessionNonTerminal","ticked","isErrorEvent","finalEvent","isTransactionEvent","beforeSendLabel","beforeSendDropReason","ignoredSpanCount","parsedSampleRate","preparedSpanCount","processBeforeSend","processedEvent","transactionInfo","outcomes","quantity","beforeSend","errorEvent","processedSpans","initialSpans","onIgnoredSpans","beforeSendTransaction","metric","estimateAttributesSizeInBytes","estimatePrimitiveSizeInBytes","initAndBind","warnIfClientIsActive","clientClass","setCurrentClient","getActiveClient","FILTERED_VALUE","SENSITIVE_KEY_SNIPPETS","isSensitiveKey","denySnippets","lower","snippet","shouldFilterDataKey","behavior","lowerKey","additionalDenyTerms","matchesConfiguredTerm","term","filterKeyValueData","filterQueryParams","queryString","separatorIndex","pair","encodedKey","filterUrlQuery","fragmentStart","queryEnd","queryStart","prefix","query","suffix","filtered","urlQueryParamsBehavior","filterCollectedUrl","parseUrl","fragment","stripDataUrlContent","mimeType","isBase64","dataStart","dataPrefix","includeDataPrefix","addAutoIpAddressToSession","\"ip_address\"","applySdkMetadata","sdk","names","name2","DEFAULT_BREADCRUMBS","addBreadcrumb","finalBreadcrumb","beforeBreadcrumb","INTEGRATION_NAME$9","SETUP_CLIENTS","functionToStringIntegration","originalFunctionToString","originalFunction","unwrappedFunction","DEFAULT_IGNORE_ERRORS","INTEGRATION_NAME$8","eventFiltersIntegration","mergedOptions","_mergeOptions","_shouldDropEvent$1","internalOptions","_isIgnoredError","_isUselessError","_isDeniedUrl","_getEventFilterUrl","_isAllowedUrl","_isIgnoredTransaction","ignoreErrors","ignoreTransactions","denyUrls","allowUrls","_getLastValidUrl","applyAggregateErrorsToEvent","originalException","aggregateExceptionsFromError","exceptionFromErrorImplementation","prevExceptions","newExceptions","applyExceptionGroupFieldsForParentException","exceptionId","newException","newExceptionId","applyExceptionGroupFieldsForChildException","isExceptionGroup","childError","parentId","hasSentryFetchUrlHost","_enhanceErrorWithSentryInfo","_filter","addConsoleInstrumentationHandler","removeHandler","instrumentConsole","addConsoleInstrumentationFilter","f","filter","instrumentedLevels","firstArg","isFiltered","severityLevelFromString","INTEGRATION_NAME$7","dedupeIntegration","previousEvent","currentEvent","_shouldDropEvent","_isSameMessageEvent","_isSameExceptionEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","INTEGRATION_NAME$6","consoleIntegration","unsubscribe","addConsoleBreadcrumb","unsubscribe2","formatConsoleArgs","assertionArgs","INTEGRATION_NAME$5","conversationIdIntegration","isolationScopeData","op","WINDOW$2","_isFetchSupported","isNativeFunction","supportsNativeFetch","doc","sandbox","addFetchInstrumentationHandler","instrumentFetch","originalFetch","virtualError","parseFetchArgs","handlerData","getHeadersFromFetchArgs","onFetchResolved","target","enhanceOption","hostname","hasProp","getUrlFromResource","resource","fetchArgs","arg","requestArgument","optionsArgument","getBreadcrumbLogLevelFromHttpStatusCode","DEBUG_BUILD$1","WINDOW$1","DEFAULT_MAX_STRING_LENGTH","accessors","_safeRead","el","htmlTreeAsString","elem","currentElem","out","height","len","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","tagName","dataset","\"sentryComponent\"","\"sentryElement\"","keyAttrPairs","keyAttr","keyAttrPair","id","classes","k","attr","addPageListener","listener","removePageListener","whenIdleOrHidden","rIC","called","runOnce","getComponentName","maxTraverseHeight","getLocationHref","CLIENT_ROUTE_PROVIDERS","setRouteProvider","getRouteProvider","provider","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","getCapture","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","proto","handlerForType","capture","originalAddEventListener","listeners","originalRemoveEventListener","isSimilarToLastCapturedEvent","shouldSkipDOMEvent","\"_sentryCaptured\"","getEventTarget","globalListener","lastHref","supportsHistory","addHistoryInstrumentationHandler","instrumentHistory","to","historyReplacementFunction","getAbsoluteUrl","originalHistoryFunction","urlOrPath","cachedImplementations","getNativeImplementation","cached","impl","document","contentWindow","clearCachedImplementation","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","startTimestamp","method","xhrOpenArgArray","parseXhrUrlArg","originalOpen","xhrOpenThisArg","onreadystatechangeHandler","xhrInfo","originalOnreadystatechange","onreadystatechangeThisArg","onreadystatechangeArgArray","setRequestHeaderArgArray","setRequestHeaderThisArg","originalSetRequestHeader","sentryXhrData","sendThisArg","sendArgArray","originalSend","isElement","WINDOW","ignoreOnError","ignoredErrorReports","shouldIgnoreOnError","isSameErrorReport","report","ignoreNextOnError","wrap","isFunction","fn2","wrapper","sentryWrapped","wrappedArguments","property","getHttpRequestData","referrer","exceptionFromError","parseStackFrames","extractType","extractMessage","eventFromPlainObject","errorFromProp","getErrorPropertyFromObject","isUnhandledRejection","getNonErrorObjectExceptionValue","eventFromError","stacktrace","skipLines","getSkipFirstStackStringLines","getPopFirstTopFrames","reactMinifiedRegexp","isWebAssemblyException","eventFromException","eventFromUnknownInput","attachStacktrace","eventFromMessage","eventFromString","domException","stringifiedException","__sentry_template_string__","__sentry_template_values__","captureType","getObjectClassName","BrowserClient","opts","applyDefaultOptions","userInfo","checkDrift","sendClientReports","optionsArg","DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE","makeFetchTransport","pendingBodySize","pendingCount","requestSize","requestOptions","nativeFetch","DEBUG_BUILD","CHROME_PRIORITY","GECKO_PRIORITY","createFrame","lineno","colno","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeDataUriRegex","chromeStackLineParser","dataUriMatch","noFnParts","line2","col","subMatch","extractSafariExtensionDetails","geckoREgex","geckoEvalRegex","defaultStackParser","isSafariExtension","isSafariWebExtension","MAX_ALLOWED_STRING_LENGTH","INTEGRATION_NAME$4","breadcrumbsIntegration","_options","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","componentName","dom","element","_isEvent","endTimestamp","body","status_code","parsedLoc","parsedFrom","parsedTo","DEFAULT_EVENT_TARGET","INTEGRATION_NAME$3","browserApiErrorsIntegration","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","xhr","wrapOptions","isEventListenerObject","integrationOptions","unregisterOriginalCallback","eventName","originalEventHandler","browserSessionIntegration","lifecycle","initialSessionSent","previousUser","maybeNewUser","INTEGRATION_NAME$2","cultureContextIntegration","culture","getCultureContext","intl","INTEGRATION_NAME$1","globalHandlersIntegration","_installGlobalOnErrorHandler","globalHandlerLog","_installGlobalOnUnhandledRejectionHandler","getOptions","_enhanceEventWithInitialFrame","msg","column","_getUnhandledRejectionError","_eventFromRejectionWithPrimitive","ev","ev0","ev0s","ev0sf","getFilenameFromUrl","httpContextIntegration","collectedHeaders","userHeaders","reqData","referer","\"Referer\"","DEFAULT_KEY","DEFAULT_LIMIT","INTEGRATION_NAME","linkedErrorsIntegration","HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX","normalizeStringifyValue","objName","getConstructorName","checkAndWarnIfIsEmbeddedBrowserExtension","_isEmbeddedBrowserExtension","_window","\"chrome\"","\"browser\"","href","getDefaultIntegrations","init","shouldDisableBecauseIsBrowserExtenstion"],"sources":["../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/debug-build.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/worldwide.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/version.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/carrier.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/instrument/handlers.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/instrument/globalError.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/is.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/object.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/randomSafeContext.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/normalizationHints.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/normalize.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/string.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/misc.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/time.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/session.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/merge.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/scope.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/defaultScopes.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/constants.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/chain-and-copy-promiselike.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/asyncContext/index.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/attributes.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/currentScopes.js","../../../../../node_modules/.bun/@sentry+conventions@0.27.0/node_modules/@sentry/conventions/dist/attributes.mjs","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/semanticAttributes.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/types/spanStatus.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/weakRef.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/utils.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/baggage.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/dsn.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/should-ignore-span.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/integration.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/constants.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/scopeData.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/safeCallback.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/spans/beforeSendSpan.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/spans/spanJsonToStreamedSpan.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/spans/captureSpan.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/spans/hasSpanStreamingEnabled.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/timer.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/envelope.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/env.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/node.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/isBrowser.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/spans/envelope.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/errorSpanAttribution.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/envelope.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/eventProcessors.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/debug-ids.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/eventUtils.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/exports.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/api.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/logs/envelope.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/logs/internal.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/metrics/envelope.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/metrics/internal.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/tracing/spans/extractGenAiSpans.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/promisebuffer.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/transports/base.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/clientreport.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/transactionEvent.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/warnAboutIgnoredTransactionOptions.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/data-collection/resolveDataCollectionOptions.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/client.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/sdk.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/data-collection/filtering-snippets.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/data-collection/filterKeyValueData.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/data-collection/filterQueryParams.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/data-collection/filterUrlQuery.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/data-collection/filterCollectedUrl.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/url.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/ipAddress.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/breadcrumbs.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/integrations/functiontostring.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/integrations/eventFilters.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/instrument/console.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/severity.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/integrations/dedupe.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/integrations/console.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/integrations/conversationId.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/supports.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/instrument/fetch.js","../../../../../node_modules/.bun/@sentry+core@11.7.0/node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/debug-build.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/types.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/htmlTreeAsString.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/web-vitals/utils.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/component-name.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/getLocationHref.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/routing.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/instrumentation/dom.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/instrumentation/history.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/getNativeImplementation.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/instrumentation/xhr.js","../../../../../node_modules/.bun/@sentry+browser-utils@11.7.0/node_modules/@sentry/browser-utils/build/esm/is.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/helpers.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/eventbuilder.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/client.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/transports/fetch.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/debug-build.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/stack-parsers.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/breadcrumbs.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/browserapierrors.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/browsersession.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/culturecontext.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/globalhandlers.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/httpcontext.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/integrations/linkederrors.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/normalizeStringifyValue.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/utils/detectBrowserExtension.js","../../../../../node_modules/.bun/@sentry+browser@11.7.0/node_modules/@sentry/browser/build/npm/esm/prod/sdk.js"],"sourcesContent":["const DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","const GLOBAL_OBJ = globalThis;\n\nexport { GLOBAL_OBJ };\n//# sourceMappingURL=worldwide.js.map\n","const SDK_VERSION = \"11.7.0\" ;\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './utils/version.js';\nimport { GLOBAL_OBJ } from './utils/worldwide.js';\n\nfunction getMainCarrier() {\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\nfunction getSentryCarrier(carrier) {\n const __SENTRY__ = carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n return __SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {};\n}\nfunction getGlobalSingleton(name, creator, obj = GLOBAL_OBJ) {\n const __SENTRY__ = obj.__SENTRY__ = obj.__SENTRY__ || {};\n const carrier = __SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {};\n return carrier[name] || (carrier[name] = creator());\n}\n\nexport { getGlobalSingleton, getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\n","import { getGlobalSingleton } from '../carrier.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst CONSOLE_LEVELS = [\n \"debug\",\n \"info\",\n \"warn\",\n \"error\",\n \"log\",\n \"assert\",\n \"trace\"\n];\nconst PREFIX = \"Sentry Logger \";\nconst originalConsoleMethods = {};\nfunction consoleSandbox(callback) {\n if (!(\"console\" in GLOBAL_OBJ)) {\n return callback();\n }\n const console = GLOBAL_OBJ.console;\n const wrappedFuncs = {};\n const wrappedLevels = Object.keys(originalConsoleMethods);\n wrappedLevels.forEach((level) => {\n const originalConsoleMethod = originalConsoleMethods[level];\n wrappedFuncs[level] = console[level];\n console[level] = originalConsoleMethod;\n });\n try {\n return callback();\n } finally {\n wrappedLevels.forEach((level) => {\n console[level] = wrappedFuncs[level];\n });\n }\n}\nfunction enable() {\n _getLoggerSettings().enabled = true;\n}\nfunction disable() {\n _getLoggerSettings().enabled = false;\n}\nfunction isEnabled() {\n return _getLoggerSettings().enabled;\n}\nfunction log(...args) {\n _maybeLog(\"log\", ...args);\n}\nfunction warn(...args) {\n _maybeLog(\"warn\", ...args);\n}\nfunction error(...args) {\n _maybeLog(\"error\", ...args);\n}\nfunction _maybeLog(level, ...args) {\n if (!DEBUG_BUILD) {\n return;\n }\n if (isEnabled()) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[level](`${PREFIX}[${level}]:`, ...args);\n });\n }\n}\nfunction _getLoggerSettings() {\n if (!DEBUG_BUILD) {\n return { enabled: false };\n }\n return getGlobalSingleton(\"loggerSettings\", () => ({ enabled: false }));\n}\nconst debug = {\n /** Enable logging. */\n enable,\n /** Disable logging. */\n disable,\n /** Check if logging is enabled. */\n isEnabled,\n /** Log a message. */\n log,\n /** Log a warning. */\n warn,\n /** Log an error. */\n error\n};\n\nexport { CONSOLE_LEVELS, consoleSandbox, debug, originalConsoleMethods };\n//# sourceMappingURL=debug-logger.js.map\n","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = \"?\";\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\nfunction createStackParser(...parsers) {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map((p) => p[1]);\n return (stack, skipFirstLines = 0, framesToPop = 0) => {\n const frames = [];\n const lines = stack.split(\"\\n\");\n for (let i = skipFirstLines; i < lines.length; i++) {\n let line = lines[i];\n if (line.length > 1024) {\n line = line.slice(0, 1024);\n }\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, \"$1\") : line;\n if (cleanedLine.includes(\"Error: \")) {\n continue;\n }\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n break;\n }\n }\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\n };\n}\nfunction stackParserFromStackParserOptions(stackParser) {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\nfunction stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n const localStack = Array.from(stack);\n if (/sentryWrapped/.test(getLastStackFrame(localStack).function || \"\")) {\n localStack.pop();\n }\n localStack.reverse();\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || \"\")) {\n localStack.pop();\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || \"\")) {\n localStack.pop();\n }\n }\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map((frame) => ({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION\n }));\n}\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\nconst defaultFunctionName = \"<anonymous>\";\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== \"function\") {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch {\n return defaultFunctionName;\n }\n}\nfunction getFramesFromEvent(event) {\n const exception = event.exception;\n if (exception) {\n const frames = [];\n try {\n exception.values.forEach((value) => {\n if (value.stacktrace.frames) {\n frames.push(...value.stacktrace.frames);\n }\n });\n return frames;\n } catch {\n return void 0;\n }\n }\n return void 0;\n}\nfunction normalizeStackTracePath(path) {\n let filename = path?.startsWith(\"file://\") ? path.slice(7) : path;\n if (filename?.match(/\\/[A-Z]:/)) {\n filename = filename.slice(1);\n }\n return filename;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, normalizeStackTracePath, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getFunctionName } from '../utils/stacktrace.js';\n\nconst handlers = {};\nconst instrumented = {};\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n handlers[type].push(handler);\n return () => {\n const typeHandlers = handlers[type];\n if (typeHandlers) {\n const index = typeHandlers.indexOf(handler);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n }\n };\n}\nfunction resetInstrumentationHandlers() {\n Object.keys(handlers).forEach((key) => {\n handlers[key] = void 0;\n });\n}\nfunction maybeInstrument(type, instrumentFn) {\n if (!instrumented[type]) {\n instrumented[type] = true;\n try {\n instrumentFn();\n } catch (e) {\n DEBUG_BUILD && debug.error(`Error while instrumenting ${type}`, e);\n }\n }\n}\nfunction triggerHandlers(type, data) {\n const typeHandlers = type && handlers[type];\n if (!typeHandlers) {\n return;\n }\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD && debug.error(\n `Error while triggering instrumentation handler.\nType: ${type}\nName: ${getFunctionName(handler)}\nError:`,\n e\n );\n }\n }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=handlers.js.map\n","import { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnErrorHandler = null;\nfunction addGlobalErrorInstrumentationHandler(handler) {\n const type = \"error\";\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\nfunction instrumentError() {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n GLOBAL_OBJ.onerror = function(msg, url, line, column, error) {\n const handlerData = {\n column,\n error,\n line,\n msg,\n url\n };\n triggerHandlers(\"error\", handlerData);\n if (_oldOnErrorHandler) {\n return _oldOnErrorHandler.apply(this, arguments);\n }\n return false;\n };\n GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\nfunction addGlobalUnhandledRejectionInstrumentationHandler(handler) {\n const type = \"unhandledrejection\";\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n GLOBAL_OBJ.onunhandledrejection = function(e) {\n const handlerData = e;\n triggerHandlers(\"unhandledrejection\", handlerData);\n if (_oldOnUnhandledRejectionHandler) {\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n return true;\n };\n GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","const objectToString = Object.prototype.toString;\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case \"[object Error]\":\n case \"[object Exception]\":\n case \"[object DOMException]\":\n case \"[object WebAssembly.Exception]\":\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\nfunction isBuiltin(wat, className) {\n return objectToString.call(wat) === `[object ${className}]`;\n}\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, \"ErrorEvent\");\n}\nfunction isDOMError(wat) {\n return isBuiltin(wat, \"DOMError\");\n}\nfunction isDOMException(wat) {\n return isBuiltin(wat, \"DOMException\");\n}\nfunction isString(wat) {\n return isBuiltin(wat, \"String\");\n}\nfunction isParameterizedString(wat) {\n return typeof wat === \"object\" && wat !== null && \"__sentry_template_string__\" in wat && \"__sentry_template_values__\" in wat;\n}\nfunction isPrimitive(wat) {\n return wat === null || isParameterizedString(wat) || typeof wat !== \"object\" && typeof wat !== \"function\";\n}\nfunction isPlainObject(wat) {\n return isBuiltin(wat, \"Object\");\n}\nfunction isObjectLike(wat) {\n return typeof wat === \"object\" && wat !== null;\n}\nfunction isEvent(wat) {\n return typeof Event !== \"undefined\" && isInstanceOf(wat, Event);\n}\nfunction isElement(wat) {\n return typeof Element !== \"undefined\" && isInstanceOf(wat, Element);\n}\nfunction isRegExp(wat) {\n return isBuiltin(wat, \"RegExp\");\n}\nfunction isThenable(wat) {\n return Boolean(wat?.then && typeof wat.then === \"function\");\n}\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && \"nativeEvent\" in wat && \"preventDefault\" in wat && \"stopPropagation\" in wat;\n}\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch {\n return false;\n }\n}\nfunction isVueViewModel(wat) {\n return !!(typeof wat === \"object\" && wat !== null && (wat.__isVue || wat._isVue || wat.__v_isVNode));\n}\nfunction isRequest(request) {\n return typeof Request !== \"undefined\" && isInstanceOf(request, Request);\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isObjectLike, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isRequest, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isError, isEvent, isPrimitive, isObjectLike } from './is.js';\n\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n const original = source[name];\n if (typeof original !== \"function\") {\n return;\n }\n const wrapped = replacementFactory(original);\n if (typeof wrapped === \"function\") {\n markFunctionWrapped(wrapped, original);\n }\n try {\n source[name] = wrapped;\n } catch {\n DEBUG_BUILD && debug.log(`Failed to replace method \"${name}\" in object`, source);\n }\n}\nfunction addNonEnumerableProperty(obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value,\n writable: true,\n configurable: true\n });\n } catch {\n DEBUG_BUILD && debug.log(`Failed to add non-enumerable property \"${String(name)}\" to object`, obj);\n }\n}\nfunction markFunctionWrapped(wrapped, original) {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, \"__sentry_original__\", original);\n } catch {\n }\n}\nfunction wrapMethod(obj, field, wrapped, enumerable = true) {\n const original = obj[field];\n if (typeof original !== \"function\") {\n throw new Error(`Cannot wrap method: ${field} is not a function`);\n }\n if (getOriginalFunction(original)) {\n throw new Error(`Attempting to wrap method ${field} multiple times`);\n }\n markFunctionWrapped(wrapped, original);\n Object.defineProperty(obj, field, {\n writable: true,\n configurable: true,\n enumerable,\n value: wrapped\n });\n}\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\nfunction convertToPlainObject(value) {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value)\n };\n }\n if (isEvent(value)) {\n const { type, target, currentTarget, detail } = value;\n return {\n type,\n target,\n currentTarget,\n ...detail ? { detail } : {},\n ...getOwnProperties(value)\n };\n }\n return value;\n}\nfunction getOwnProperties(obj) {\n if (isObjectLike(obj)) {\n return Object.fromEntries(Object.entries(obj));\n }\n return {};\n}\nfunction extractExceptionKeysForMessage(exception) {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n return !keys[0] ? \"[object has no keys]\" : keys.join(\", \");\n}\nfunction dropUndefinedKeys(inputValue) {\n const memoizationMap = /* @__PURE__ */ new Map();\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (inputValue === null || typeof inputValue !== \"object\") {\n return inputValue;\n }\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== void 0) {\n return memoVal;\n }\n if (Array.isArray(inputValue)) {\n const returnValue = [];\n memoizationMap.set(inputValue, returnValue);\n inputValue.forEach((value) => {\n returnValue.push(_dropUndefinedKeys(value, memoizationMap));\n });\n return returnValue;\n }\n if (isPojo(inputValue)) {\n const returnValue = {};\n memoizationMap.set(inputValue, returnValue);\n const keys = Object.keys(inputValue);\n keys.forEach((key) => {\n const val = inputValue[key];\n if (val !== void 0) {\n returnValue[key] = _dropUndefinedKeys(val, memoizationMap);\n }\n });\n return returnValue;\n }\n return inputValue;\n}\nfunction isPojo(input) {\n const constructor = input.constructor;\n return constructor === Object || constructor === void 0;\n}\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n // this will catch both undefined and null\n case wat == void 0:\n objectified = new String(wat);\n break;\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case (typeof wat === \"symbol\" || typeof wat === \"bigint\"):\n objectified = Object(wat);\n break;\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n objectified = new wat.constructor(wat);\n break;\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, wrapMethod };\n//# sourceMappingURL=object.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nlet RESOLVED_RUNNER;\nfunction withRandomSafeContext(cb) {\n if (RESOLVED_RUNNER !== void 0) {\n return RESOLVED_RUNNER ? RESOLVED_RUNNER(cb) : cb();\n }\n const sym = /* @__PURE__ */ Symbol.for(\"__SENTRY_SAFE_RANDOM_ID_WRAPPER__\");\n const globalWithSymbol = GLOBAL_OBJ;\n if (sym in globalWithSymbol && typeof globalWithSymbol[sym] === \"function\") {\n RESOLVED_RUNNER = globalWithSymbol[sym];\n return RESOLVED_RUNNER(cb);\n }\n RESOLVED_RUNNER = null;\n return cb();\n}\nfunction safeMathRandom() {\n return withRandomSafeContext(() => Math.random());\n}\nfunction safeDateNow() {\n return withRandomSafeContext(() => Date.now());\n}\n\nexport { safeDateNow, safeMathRandom, withRandomSafeContext };\n//# sourceMappingURL=randomSafeContext.js.map\n","import { addNonEnumerableProperty } from './object.js';\n\nconst SENTRY_SKIP_NORMALIZATION = /* @__PURE__ */ Symbol.for(\"sentry.skipNormalization\");\nconst SENTRY_OVERRIDE_NORMALIZATION_DEPTH = /* @__PURE__ */ Symbol.for(\"sentry.overrideNormalizationDepth\");\nfunction setSkipNormalizationHint(obj) {\n addNonEnumerableProperty(obj, SENTRY_SKIP_NORMALIZATION, true);\n}\nfunction setNormalizationDepthOverrideHint(obj, depth) {\n addNonEnumerableProperty(obj, SENTRY_OVERRIDE_NORMALIZATION_DEPTH, depth);\n}\nfunction hasSkipNormalizationHint(value) {\n return Boolean(value[SENTRY_SKIP_NORMALIZATION]);\n}\nfunction getNormalizationDepthOverrideHint(value) {\n const v = value[SENTRY_OVERRIDE_NORMALIZATION_DEPTH];\n return typeof v === \"number\" ? v : void 0;\n}\n\nexport { getNormalizationDepthOverrideHint, hasSkipNormalizationHint, setNormalizationDepthOverrideHint, setSkipNormalizationHint };\n//# sourceMappingURL=normalizationHints.js.map\n","import { hasSkipNormalizationHint, getNormalizationDepthOverrideHint } from './normalizationHints.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\nlet stringifier;\nfunction setNormalizeStringifier(newStringifier) {\n stringifier = newStringifier;\n}\nfunction normalize(input, depth = 100, maxProperties = Infinity) {\n try {\n return visit(\"\", input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\nfunction normalizeToSize(object, depth = 3, maxSize = 100 * 1024) {\n const normalized = normalize(object, depth);\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n return normalized;\n}\nfunction visit(key, value, depth = Infinity, maxProperties = Infinity, memo = memoBuilder()) {\n const [memoize, unmemoize] = memo;\n if (value == null || // this matches null and undefined -> eqeq not eqeqeq\n [\"boolean\", \"string\"].includes(typeof value) || typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n const stringified = stringifyValue(key, value);\n if (!stringified.startsWith(\"[object \")) {\n return stringified;\n }\n if (hasSkipNormalizationHint(value)) {\n return value;\n }\n const overrideDepth = getNormalizationDepthOverrideHint(value);\n const remainingDepth = overrideDepth !== void 0 ? overrideDepth : depth;\n if (remainingDepth === 0) {\n return stringified.replace(\"object \", \"\");\n }\n if (memoize(value)) {\n return \"[Circular ~]\";\n }\n const valueWithToJSON = value;\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === \"function\") {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n return visit(\"\", jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch {\n }\n }\n const normalized = Array.isArray(value) ? [] : {};\n let numAdded = 0;\n const visitable = convertToPlainObject(value);\n for (const visitKey in visitable) {\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n if (numAdded >= maxProperties) {\n normalized[visitKey] = \"[MaxProperties ~]\";\n break;\n }\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n numAdded++;\n }\n unmemoize(value);\n return normalized;\n}\nfunction stringifyValue(key, value) {\n try {\n if (stringifier) {\n const stringified = stringifier(value);\n if (stringified) {\n return stringified;\n }\n }\n if (typeof global !== \"undefined\" && value === global) {\n return \"[Global]\";\n }\n if (typeof value === \"number\" && !Number.isFinite(value)) {\n return `[${value}]`;\n }\n if (typeof value === \"function\") {\n return `[Function: ${getFunctionName(value)}]`;\n }\n if (typeof value === \"symbol\") {\n return `[${String(value)}]`;\n }\n if (typeof value === \"bigint\") {\n return `[BigInt: ${String(value)}]`;\n }\n const objName = getConstructorName(value);\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\nfunction getConstructorName(value) {\n const prototype = Object.getPrototypeOf(value);\n return prototype?.constructor ? prototype.constructor.name : \"null prototype\";\n}\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\nfunction normalizeUrlToBase(url, basePath) {\n const escapedBase = basePath.replace(/\\\\/g, \"/\").replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\");\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch {\n }\n return newUrl.replace(/\\\\/g, \"/\").replace(/webpack:\\/?/g, \"\").replace(new RegExp(`(file://)?/*${escapedBase}/*`, \"ig\"), \"app:///\");\n}\nfunction memoBuilder() {\n const inner = /* @__PURE__ */ new WeakSet();\n function memoize(obj) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n function unmemoize(obj) {\n inner.delete(obj);\n }\n return [memoize, unmemoize];\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase, setNormalizeStringifier, stringifyValue };\n//# sourceMappingURL=normalize.js.map\n","import { isString, isRegExp, isPrimitive } from './is.js';\nimport { stringifyValue } from './normalize.js';\n\nfunction stringify(value, fallback = \"[unserializable]\") {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return typeof fallback === \"function\" ? fallback(value) : fallback;\n }\n}\nfunction truncate(str, max = 0) {\n if (typeof str !== \"string\" || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\nfunction snipLine(line, colno) {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n colno = lineLength;\n }\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += \" {snip}\";\n }\n return newLine;\n}\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return \"\";\n }\n const output = [];\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n if (isPrimitive(value)) {\n output.push(String(value));\n } else if (value instanceof Error) {\n output.push(value.message ? `${value.name}: ${value.message}` : value.name);\n } else {\n output.push(stringifyValue(void 0, value));\n }\n }\n return output.join(delimiter);\n}\nfunction isMatchingPattern(value, pattern, requireExactStringMatch = false) {\n if (!isString(value)) {\n return false;\n }\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n if (typeof pattern === \"function\") {\n return pattern(value);\n }\n return false;\n}\nfunction stringMatchesSomePattern(testString, patterns = [], requireExactStringMatch = false) {\n for (const pattern of patterns) {\n if (isMatchingPattern(testString, pattern, requireExactStringMatch)) {\n return true;\n }\n }\n return false;\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, stringify, truncate };\n//# sourceMappingURL=string.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { withRandomSafeContext, safeMathRandom } from './randomSafeContext.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction getCrypto() {\n const gbl = GLOBAL_OBJ;\n return gbl.crypto || gbl.msCrypto;\n}\nlet emptyUuid;\nfunction getRandomByte() {\n return safeMathRandom() * 16;\n}\nfunction uuid4(crypto = getCrypto()) {\n try {\n if (crypto?.randomUUID) {\n return withRandomSafeContext(() => crypto.randomUUID()).replace(/-/g, \"\");\n }\n } catch {\n }\n if (!emptyUuid) {\n emptyUuid = \"10000000100040008000\" + 1e11;\n }\n return emptyUuid.replace(\n /[018]/g,\n (c) => (\n // eslint-disable-next-line no-bitwise\n (c ^ (getRandomByte() & 15) >> c / 4).toString(16)\n )\n );\n}\nfunction getFirstException(event) {\n return event.exception?.values?.[0];\n}\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || \"<unknown>\";\n }\n return eventId || \"<unknown>\";\n}\nfunction addExceptionTypeValue(event, value, type) {\n const exception = event.exception = event.exception || {};\n const values = exception.values = exception.values || [];\n const firstException = values[0] = values[0] || {};\n if (!firstException.value) {\n firstException.value = value || \"\";\n }\n if (!firstException.type) {\n firstException.type = type || \"Error\";\n }\n}\nfunction addExceptionMechanism(event, newMechanism) {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n applyExceptionMechanism(firstException, newMechanism);\n}\nfunction addExceptionMechanismToCapturedException(event, newMechanism) {\n const exceptions = event.exception?.values;\n const capturedException = exceptions?.find((exception) => exception.mechanism?.exception_id === 0) ?? exceptions?.[0];\n if (!capturedException) {\n return;\n }\n applyExceptionMechanism(capturedException, newMechanism);\n}\nfunction applyExceptionMechanism(exception, newMechanism) {\n const defaultMechanism = { type: \"generic\", handled: true };\n const currentMechanism = exception.mechanism;\n exception.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n if (newMechanism && \"data\" in newMechanism) {\n exception.mechanism.data = { ...currentMechanism?.data, ...newMechanism.data };\n }\n}\nconst SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\nfunction _parseInt(input) {\n return parseInt(input || \"\", 10);\n}\nfunction parseSemver(input) {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = _parseInt(match[1]);\n const minor = _parseInt(match[2]);\n const patch = _parseInt(match[3]);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? void 0 : major,\n minor: isNaN(minor) ? void 0 : minor,\n patch: isNaN(patch) ? void 0 : patch,\n prerelease: match[4]\n };\n}\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n if (frame.lineno === void 0) {\n return;\n }\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n frame.pre_context = lines.slice(Math.max(0, sourceLine - linesOfContext), sourceLine).map((line) => snipLine(line, 0));\n const lineIndex = Math.min(maxLines - 1, sourceLine);\n frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n frame.post_context = lines.slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext).map((line) => snipLine(line, 0));\n}\nfunction checkOrSetAlreadyCaught(exception) {\n if (isAlreadyCaptured(exception)) {\n return true;\n }\n try {\n addNonEnumerableProperty(exception, \"__sentry_captured__\", true);\n } catch {\n }\n return false;\n}\nfunction isAlreadyCaptured(exception) {\n try {\n return exception.__sentry_captured__;\n } catch {\n }\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionMechanismToCapturedException, addExceptionTypeValue, checkOrSetAlreadyCaught, getEventDescription, isAlreadyCaptured, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { safeDateNow, withRandomSafeContext } from './randomSafeContext.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1e3;\nconst CLOCK_DRIFT_THRESHOLD_MS = 1e3;\nconst MAX_TIME_ORIGIN_SEGMENTS = 100;\nfunction dateTimestampInSeconds() {\n return safeDateNow() / ONE_SECOND_IN_MS;\n}\nlet _timeOriginSegments = [];\nfunction createUnixTimestampInSecondsFunc() {\n const { performance } = GLOBAL_OBJ;\n if (!performance?.now || !performance.timeOrigin) {\n if (performance?.now) {\n _timeOriginSegments = [{ from: 0, origin: safeDateNow() - withRandomSafeContext(() => performance.now()) }];\n }\n return dateTimestampInSeconds;\n }\n let correctedTimeOrigin = performance.timeOrigin;\n _timeOriginSegments = [{ from: 0, origin: correctedTimeOrigin }];\n let isFirstCall = true;\n let lastCheckedPerformanceNow = 0;\n return () => {\n return withRandomSafeContext(() => {\n const performanceNow = performance.now();\n const dateNow = Date.now();\n if (Math.abs(correctedTimeOrigin + performanceNow - dateNow) > CLOCK_DRIFT_THRESHOLD_MS) {\n correctedTimeOrigin = dateNow - performanceNow;\n if (isFirstCall) {\n _timeOriginSegments = [{ from: 0, origin: correctedTimeOrigin }];\n } else {\n _timeOriginSegments.push({ from: lastCheckedPerformanceNow, origin: correctedTimeOrigin });\n if (_timeOriginSegments.length > MAX_TIME_ORIGIN_SEGMENTS) {\n _timeOriginSegments.splice(1, 1);\n }\n }\n }\n isFirstCall = false;\n lastCheckedPerformanceNow = performanceNow;\n return (correctedTimeOrigin + performanceNow) / ONE_SECOND_IN_MS;\n });\n };\n}\nfunction safePerformanceNow() {\n const { performance } = GLOBAL_OBJ;\n return performance?.now ? withRandomSafeContext(() => performance.now()) : void 0;\n}\nlet _cachedTimestampInSecondsFn;\nlet _checkedForDriftInThisTask = false;\nfunction performanceTimeToSeconds(monotonicTimeInMs, entryStartTimeInMs = monotonicTimeInMs) {\n const origin = browserPerformanceTimeOrigin(entryStartTimeInMs);\n return origin == null ? void 0 : (origin + monotonicTimeInMs) / ONE_SECOND_IN_MS;\n}\nfunction timestampInSeconds() {\n const func = _cachedTimestampInSecondsFn ?? (_cachedTimestampInSecondsFn = createUnixTimestampInSecondsFunc());\n return func();\n}\nfunction browserPerformanceTimeOrigin(monotonicTimeInMs = 0) {\n if (!_checkedForDriftInThisTask) {\n _checkedForDriftInThisTask = true;\n void Promise.resolve().then(() => {\n _checkedForDriftInThisTask = false;\n });\n timestampInSeconds();\n }\n let segment;\n for (const candidate of _timeOriginSegments) {\n if (segment && candidate.from > monotonicTimeInMs) {\n break;\n }\n segment = candidate;\n }\n return segment?.origin;\n}\n\nexport { browserPerformanceTimeOrigin, dateTimestampInSeconds, performanceTimeToSeconds, safePerformanceNow, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","import { uuid4 } from './utils/misc.js';\nimport { timestampInSeconds } from './utils/time.js';\n\nfunction makeSession(context) {\n const startingTime = timestampInSeconds();\n const session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: \"ok\",\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session)\n };\n if (context) {\n updateSession(session, context);\n }\n return session;\n}\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n session.timestamp = context.timestamp || timestampInSeconds();\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== void 0) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === \"number\") {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = void 0;\n } else if (typeof context.duration === \"number\") {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === \"number\") {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === \"ok\") {\n context = { status: \"exited\" };\n }\n updateSession(session, context);\n}\nfunction sessionToJSON(session) {\n return {\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1e3).toISOString(),\n timestamp: new Date(session.timestamp * 1e3).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === \"number\" || typeof session.did === \"string\" ? `${session.did}` : void 0,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent\n }\n };\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","function merge(initialObj, mergeObj, levels = 2) {\n if (!mergeObj || typeof mergeObj !== \"object\" || levels <= 0) {\n return mergeObj;\n }\n if (initialObj && Object.keys(mergeObj).length === 0) {\n return initialObj;\n }\n const output = { ...initialObj };\n for (const key in mergeObj) {\n if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n output[key] = merge(output[key], mergeObj[key], levels - 1);\n }\n }\n return output;\n}\n\nexport { merge };\n//# sourceMappingURL=merge.js.map\n","import { uuid4 } from './misc.js';\n\nfunction generateTraceId() {\n return uuid4();\n}\nfunction generateSpanId() {\n return uuid4().substring(16);\n}\n\nexport { generateSpanId, generateTraceId };\n//# sourceMappingURL=propagationContext.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { updateSession } from './session.js';\nimport { debug } from './utils/debug-logger.js';\nimport { isPlainObject } from './utils/is.js';\nimport { addNonEnumerableProperty } from './utils/object.js';\nimport { merge } from './utils/merge.js';\nimport { uuid4 } from './utils/misc.js';\nimport { generateTraceId } from './utils/propagationContext.js';\nimport { safeMathRandom } from './utils/randomSafeContext.js';\nimport { truncate } from './utils/string.js';\nimport { dateTimestampInSeconds } from './utils/time.js';\n\nconst DEFAULT_MAX_BREADCRUMBS = 100;\nclass Scope {\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._attributes = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n addNonEnumerableProperty(this, \"refs\", {});\n this._propagationContext = {\n traceId: generateTraceId(),\n sampleRand: safeMathRandom()\n };\n }\n /**\n * Clone all data from this scope into a new scope.\n */\n clone() {\n const newScope = new Scope();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._attributes = { ...this._attributes };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n if (this._contexts.flags) {\n newScope._contexts.flags = {\n values: [...this._contexts.flags.values]\n };\n }\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n newScope._conversationId = this._conversationId;\n newScope.refs = { ...this.refs };\n return newScope;\n }\n /**\n * Update the client assigned to this scope.\n * Note that not every scope will have a client assigned - isolation scopes & the global scope will generally not have a client,\n * as well as manually created scopes.\n */\n setClient(client) {\n this._client = client;\n }\n /**\n * Set the ID of the last captured error event.\n * This is generally only captured on the isolation scope.\n */\n setLastEventId(lastEventId) {\n this._lastEventId = lastEventId;\n }\n /**\n * Get the client assigned to this scope.\n */\n getClient() {\n return this._client;\n }\n /**\n * Get the ID of the last captured error event.\n * This is generally only available on the isolation scope.\n */\n lastEventId() {\n return this._lastEventId;\n }\n /**\n * @inheritDoc\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n /**\n * Add an event processor that will be called before an event is sent.\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n /**\n * Set the user for this scope.\n * Set to `null` to unset the user.\n */\n setUser(user) {\n this._user = user || {\n email: void 0,\n id: void 0,\n ip_address: void 0,\n username: void 0\n };\n if (this._session) {\n updateSession(this._session, { user });\n }\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Get the user from this scope.\n */\n getUser() {\n return this._user;\n }\n /**\n * Set the conversation ID for this scope.\n * Set to `null` to unset the conversation ID.\n */\n setConversationId(conversationId) {\n this._conversationId = conversationId || void 0;\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Set an object that will be merged into existing tags on the scope,\n * and will be sent as tags data with the event.\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags\n };\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Set a single tag that will be sent as tags data with the event.\n */\n setTag(key, value) {\n return this.setTags({ [key]: value });\n }\n /**\n * Sets attributes onto the scope.\n *\n * These attributes are applied to logs, metrics and streamed spans.\n *\n * Supported attribute value types are `string`, `number`, `boolean`, `string[]`, `number[]` and `boolean[]`.\n *\n * @param newAttributes - The attributes to set on the scope, as key-value pairs.\n *\n * @example\n * ```typescript\n * scope.setAttributes({\n * is_admin: true,\n * payment_selection: 'credit_card',\n * render_duration: 150,\n * });\n * ```\n */\n setAttributes(newAttributes) {\n this._attributes = {\n ...this._attributes,\n ...newAttributes\n };\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Sets an attribute onto the scope.\n *\n * These attributes are applied to logs, metrics and streamed spans.\n *\n * Supported attribute value types are `string`, `number`, `boolean`, `string[]`, `number[]` and `boolean[]`.\n *\n * @param key - The attribute key.\n * @param value - The attribute value.\n *\n * @example\n * ```typescript\n * scope.setAttribute('is_admin', true);\n * scope.setAttribute('render_duration', 150);\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setAttribute(key, value) {\n return this.setAttributes({ [key]: value });\n }\n /**\n * Removes the attribute with the given key from the scope.\n *\n * @param key - The attribute key.\n *\n * @example\n * ```typescript\n * scope.removeAttribute('is_admin');\n * ```\n */\n removeAttribute(key) {\n if (key in this._attributes) {\n delete this._attributes[key];\n this._notifyScopeListeners();\n }\n return this;\n }\n /**\n * Set an object that will be merged into existing extra on the scope,\n * and will be sent as extra data with the event.\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras\n };\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Set a single key:value extra entry that will be sent as extra data with the event.\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Sets the fingerprint on the scope to send with the events.\n * @param {string[]} fingerprint Fingerprint to group events in Sentry.\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Sets the level on the scope for future events.\n */\n setLevel(level) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Sets the transaction name on the scope so that the name of e.g. taken server route or\n * the page location is attached to future events.\n *\n * IMPORTANT: Calling this function does NOT change the name of the currently active\n * root span. If you want to change the name of the active root span, use\n * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n *\n * By default, the SDK updates the scope's transaction name automatically on sensible\n * occasions, such as a page navigation or when handling a new request on the server.\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Sets context data with the given name.\n * Data passed as context will be normalized. You can also pass `null` to unset the context.\n * Note that context data will not be merged - calling `setContext` will overwrite an existing context with the same key.\n */\n setContext(key, context) {\n if (context === null) {\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Set the session for the scope.\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Get the session from the scope.\n */\n getSession() {\n return this._session;\n }\n /**\n * Updates the scope with provided data. Can work in three variations:\n * - plain object containing updatable attributes\n * - Scope instance that'll extract the attributes from\n * - callback function that'll receive the current scope as an argument and allow for modifications\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n const scopeToMerge = typeof captureContext === \"function\" ? captureContext(this) : captureContext;\n const scopeInstance = scopeToMerge instanceof Scope ? scopeToMerge.getScopeData() : isPlainObject(scopeToMerge) ? captureContext : void 0;\n const {\n tags,\n attributes,\n extra,\n user,\n contexts,\n level,\n fingerprint = [],\n propagationContext,\n conversationId\n } = scopeInstance || {};\n this._tags = { ...this._tags, ...tags };\n this._attributes = { ...this._attributes, ...attributes };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n if (level) {\n this._level = level;\n }\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n if (conversationId) {\n this._conversationId = conversationId;\n }\n return this;\n }\n /**\n * Adds a breadcrumb to the scope.\n * By default, the last 100 breadcrumbs are kept.\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n const maxCrumbs = typeof maxBreadcrumbs === \"number\" ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n if (maxCrumbs <= 0) {\n return this;\n }\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n // Breadcrumb messages can theoretically be infinitely large and they're held in memory so we truncate them not to leak (too much) memory\n message: breadcrumb.message ? truncate(breadcrumb.message, 2048) : breadcrumb.message\n };\n this._breadcrumbs.push(mergedBreadcrumb);\n if (this._breadcrumbs.length > maxCrumbs) {\n this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n }\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Get the last breadcrumb of the scope.\n */\n getLastBreadcrumb() {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n /**\n * Clear all breadcrumbs from the scope.\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n /**\n * Add an attachment to the scope.\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n /**\n * Clear all attachments from the scope.\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n /**\n * Get the data of this scope, which should be applied to an event during processing.\n */\n getScopeData() {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n attributes: this._attributes,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n conversationId: this._conversationId\n };\n }\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry.\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n return this;\n }\n /**\n * Add propagation context to the scope, used for distributed tracing\n */\n setPropagationContext(context) {\n this._propagationContext = context;\n return this;\n }\n /**\n * Get propagation context from the scope, used for distributed tracing\n */\n getPropagationContext() {\n return this._propagationContext;\n }\n /**\n * Capture an exception for this scope.\n *\n * @returns {string} The id of the captured Sentry event.\n */\n captureException(exception, hint) {\n const eventId = hint?.event_id || uuid4();\n if (!this._client) {\n DEBUG_BUILD && debug.warn(\"No client configured on scope - will not capture exception!\");\n return eventId;\n }\n const syntheticException = new Error(\"Sentry syntheticException\");\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId\n },\n this\n );\n return eventId;\n }\n /**\n * Capture a message for this scope.\n *\n * @returns {string} The id of the captured message.\n */\n captureMessage(message, level, hint) {\n const eventId = hint?.event_id || uuid4();\n if (!this._client) {\n DEBUG_BUILD && debug.warn(\"No client configured on scope - will not capture message!\");\n return eventId;\n }\n const syntheticException = hint?.syntheticException ?? new Error(message);\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId\n },\n this\n );\n return eventId;\n }\n /**\n * Capture a Sentry event for this scope.\n *\n * @returns {string} The id of the captured event.\n */\n captureEvent(event, hint) {\n const eventId = event.event_id || hint?.event_id || uuid4();\n if (!this._client) {\n DEBUG_BUILD && debug.warn(\"No client configured on scope - will not capture event!\");\n return eventId;\n }\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n return eventId;\n }\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach((callback) => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\n\nfunction getDefaultCurrentScope() {\n return getGlobalSingleton(\"defaultCurrentScope\", () => new Scope());\n}\nfunction getDefaultIsolationScope() {\n return getGlobalSingleton(\"defaultIsolationScope\", () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","const SUPPRESS_TRACING_KEY = \"__SENTRY_SUPPRESS_TRACING__\";\n\nexport { SUPPRESS_TRACING_KEY };\n//# sourceMappingURL=constants.js.map\n","const isActualPromise = (p) => p instanceof Promise && !p[kChainedCopy];\nconst kChainedCopy = /* @__PURE__ */ Symbol(\"chained PromiseLike\");\nconst chainAndCopyPromiseLike = (original, onSuccess, onError) => {\n const chained = original.then(\n (value) => {\n onSuccess(value);\n return value;\n },\n (err) => {\n onError(err);\n throw err;\n }\n );\n return isActualPromise(chained) && isActualPromise(original) ? chained : copyProps(original, chained);\n};\nconst copyProps = (original, chained) => {\n if (!chained) return original;\n let mutated = false;\n for (const key in original) {\n if (key in chained) continue;\n mutated = true;\n const value = original[key];\n if (typeof value === \"function\") {\n Object.defineProperty(chained, key, {\n value: (...args) => value.apply(original, args),\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n chained[key] = value;\n }\n }\n if (mutated) Object.assign(chained, { [kChainedCopy]: true });\n return chained;\n};\n\nexport { chainAndCopyPromiseLike };\n//# sourceMappingURL=chain-and-copy-promiselike.js.map\n","import { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { SUPPRESS_TRACING_KEY } from '../tracing/constants.js';\nimport { chainAndCopyPromiseLike } from '../utils/chain-and-copy-promiselike.js';\nimport { isThenable } from '../utils/is.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\nclass AsyncContextStack {\n constructor(scope, isolationScope) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n /**\n * Fork a scope for the stack.\n */\n withScope(callback) {\n const scope = this._pushScope();\n let maybePromiseResult;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n this._popScope();\n throw e;\n }\n if (isThenable(maybePromiseResult)) {\n return chainAndCopyPromiseLike(\n maybePromiseResult,\n () => this._popScope(),\n () => this._popScope()\n );\n }\n this._popScope();\n return maybePromiseResult;\n }\n /**\n * Get the client of the stack.\n */\n getClient() {\n return this.getStackTop().client;\n }\n /**\n * Returns the scope of the top stack.\n */\n getScope() {\n return this.getStackTop().scope;\n }\n /**\n * Get the isolation scope for the stack.\n */\n getIsolationScope() {\n return this._isolationScope;\n }\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n getStackTop() {\n return this._stack[this._stack.length - 1];\n }\n /**\n * Push a scope to the stack.\n */\n _pushScope() {\n const scope = this.getScope().clone();\n this._stack.push({\n client: this.getClient(),\n scope\n });\n return scope;\n }\n /**\n * Pop a scope from the stack.\n */\n _popScope() {\n if (this._stack.length <= 1) return false;\n return !!this._stack.pop();\n }\n}\nfunction getAsyncContextStack() {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n return sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope());\n}\nfunction withScope(callback) {\n return getAsyncContextStack().withScope(callback);\n}\nfunction withSetScope(scope, callback) {\n const stack = getAsyncContextStack();\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\nfunction withIsolationScope(callback) {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\nfunction getStackAsyncContextStrategy() {\n return {\n suppressTracing: suppressTracingInStack,\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: (_isolationScope, callback) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope()\n };\n}\nfunction suppressTracingInStack(callback) {\n return withScope((scope) => {\n scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n const res = callback();\n scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: void 0 });\n return res;\n });\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getSentryCarrier, getMainCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\nfunction setAsyncContextStrategy(strategy) {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\nfunction getAsyncContextStrategy(carrier) {\n const sentry = getSentryCarrier(carrier);\n if (sentry.acs) {\n return sentry.acs;\n }\n return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { isPrimitive } from './utils/is.js';\n\nfunction isAttributeObject(maybeObj) {\n return typeof maybeObj === \"object\" && maybeObj != null && !Array.isArray(maybeObj) && Object.keys(maybeObj).includes(\"value\");\n}\nfunction attributeValueToTypedAttributeValue(rawValue, useFallback) {\n const { value, unit } = isAttributeObject(rawValue) ? rawValue : { value: rawValue, unit: void 0 };\n const attributeValue = getTypedAttributeValue(value);\n const checkedUnit = unit && typeof unit === \"string\" ? { unit } : {};\n if (attributeValue) {\n return { ...attributeValue, ...checkedUnit };\n }\n if (!useFallback || useFallback === \"skip-undefined\" && value === void 0) {\n return;\n }\n let stringValue = \"\";\n try {\n stringValue = JSON.stringify(value) ?? \"\";\n } catch {\n }\n return {\n value: stringValue,\n type: \"string\",\n ...checkedUnit\n };\n}\nfunction serializeAttributes(attributes, fallback = false) {\n const serializedAttributes = {};\n for (const [key, value] of Object.entries(attributes ?? {})) {\n const typedValue = attributeValueToTypedAttributeValue(value, fallback);\n if (typedValue) {\n serializedAttributes[key] = typedValue;\n }\n }\n return serializedAttributes;\n}\nfunction estimateTypedAttributesSizeInBytes(attributes) {\n if (!attributes) {\n return 0;\n }\n let weight = 0;\n for (const [key, attr] of Object.entries(attributes)) {\n weight += key.length * 2;\n weight += attr.type.length * 2;\n weight += (attr.unit?.length ?? 0) * 2;\n const val = attr.value;\n if (Array.isArray(val)) {\n weight += estimatePrimitiveSizeInBytes(val[0]) * val.length;\n } else if (isPrimitive(val)) {\n weight += estimatePrimitiveSizeInBytes(val);\n } else {\n weight += 100;\n }\n }\n return weight;\n}\nfunction estimatePrimitiveSizeInBytes(value) {\n if (typeof value === \"string\") {\n return value.length * 2;\n } else if (typeof value === \"boolean\") {\n return 4;\n } else if (typeof value === \"number\") {\n return 8;\n }\n return 0;\n}\nfunction getTypedAttributeValue(value) {\n if (Array.isArray(value)) {\n return { value, type: \"array\" };\n }\n const primitiveType = typeof value === \"string\" ? \"string\" : typeof value === \"boolean\" ? \"boolean\" : typeof value === \"number\" && !Number.isNaN(value) ? Number.isInteger(value) ? \"integer\" : \"double\" : null;\n if (primitiveType) {\n return { value, type: primitiveType };\n }\n}\n\nexport { attributeValueToTypedAttributeValue, estimateTypedAttributesSizeInBytes, isAttributeObject, serializeAttributes };\n//# sourceMappingURL=attributes.js.map\n","import { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier, getSentryCarrier, getGlobalSingleton } from './carrier.js';\nimport { Scope } from './scope.js';\nimport { generateSpanId } from './utils/propagationContext.js';\n\nfunction registerExternalPropagationContext(fn) {\n getSentryCarrier(getMainCarrier()).externalPropagationContextProvider = fn;\n}\nfunction getExternalPropagationContext() {\n return getSentryCarrier(getMainCarrier()).externalPropagationContextProvider?.();\n}\nfunction hasExternalPropagationContext() {\n return getSentryCarrier(getMainCarrier()).externalPropagationContextProvider !== void 0;\n}\nfunction getCurrentScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\nfunction getIsolationScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\nfunction getGlobalScope() {\n return getGlobalSingleton(\"globalScope\", () => new Scope());\n}\nfunction withScope(...rest) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (rest.length === 2) {\n const [scope, callback] = rest;\n if (!scope) {\n return acs.withScope(callback);\n }\n return acs.withSetScope(scope, callback);\n }\n return acs.withScope(rest[0]);\n}\nfunction withIsolationScope(...rest) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (rest.length === 2) {\n const [isolationScope, callback] = rest;\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n return acs.withIsolationScope(rest[0]);\n}\nfunction getClient() {\n return getCurrentScope().getClient();\n}\nfunction getTraceContextFromScope(scope) {\n const externalContext = getExternalPropagationContext();\n if (externalContext) {\n return { trace_id: externalContext.traceId, span_id: externalContext.spanId };\n }\n const propagationContext = scope.getPropagationContext();\n const { traceId, parentSpanId, propagationSpanId } = propagationContext;\n const traceContext = {\n trace_id: traceId,\n span_id: propagationSpanId || generateSpanId()\n };\n if (parentSpanId) {\n traceContext.parent_span_id = parentSpanId;\n }\n return traceContext;\n}\n\nexport { getClient, getCurrentScope, getExternalPropagationContext, getGlobalScope, getIsolationScope, getTraceContextFromScope, hasExternalPropagationContext, registerExternalPropagationContext, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","const e=\"address\",t=\"ai.citations\",i=\"ai.completion_tokens.used\",a=\"ai.documents\",s=\"ai.finish_reason\",r=\"ai.frequency_penalty\",n=\"ai.function_call\",o=\"ai.generation_id\",l=\"ai.input_messages\",p=\"ai.is_search_required\",c=\"ai.metadata\",u=\"ai.model.id\",d=\"ai.model_id\",m=\"ai.model.provider\",g=\"ai.pipeline.name\",b=\"ai.preamble\",y=\"ai.presence_penalty\",_=\"ai.prompt\",h=\"ai.prompt.messages\",f=\"ai.prompt_tokens.used\",v=\"ai.prompt.tools\",k=\"ai.raw_prompting\",T=\"ai.responses\",S=\"ai.response_format\",E=\"ai.response.id\",O=\"ai.response.model\",I=\"ai.response.object\",A=\"ai.response.text\",w=\"ai.response.timestamp\",x=\"ai.response.toolCalls\",R=\"ai.schema\",N=\"ai.search_queries\",C=\"ai.search_results\",P=\"ai.seed\",D=\"ai.streaming\",L=\"ai.tags\",q=\"ai.temperature\",M=\"ai.texts\",U=\"ai.toolCall.args\",G=\"ai.toolCall.result\",z=\"ai.tools\",Y=\"ai.tool_calls\",V=\"ai.top_k\",F=\"ai.top_p\",K=\"ai.total_cost\",B=\"ai.total_tokens.used\",W=\"ai.usage.tokens\",H=\"ai.values\",j=\"ai.warnings\",Q=\"angular.version\",J=\"anthropic.tool_result.content\",X=\"app.app_build\",Z=\"app.app_identifier\",$=\"app.app_name\",ee=\"app.app_start_time\",te=\"app.app_version\",ie=\"app.build\",ae=\"app.identifier\",se=\"app.in_foreground\",re=\"app.name\",ne=\"app_start_cold\",oe=\"app.start_time\",le=\"app_start_type\",pe=\"app_start_warm\",ce=\"app.version\",ue=\"app.vitals.frames.delay.value\",de=\"app.vitals.frames.frozen.count\",me=\"app.vitals.frames.frozen.rate\",ge=\"app.vitals.frames.slow.count\",be=\"app.vitals.frames.slow.rate\",ye=\"app.vitals.frames.total.count\",_e=\"app.vitals.stall.duration\",he=\"app.vitals.stall.percentage\",fe=\"app.vitals.start.cold.value\",ve=\"app.vitals.start.prewarmed\",ke=\"app.vitals.start.reason\",Te=\"app.vitals.start.screen\",Se=\"app.vitals.start.type\",Ee=\"app.vitals.start.warm.value\",Oe=\"app.vitals.ttfd.value\",Ie=\"app.vitals.ttid.value\",Ae=\"art.gc.blocking_count\",we=\"art.gc.blocking_time\",xe=\"art.gc.pre_oome_count\",Re=\"art.gc.total_count\",Ne=\"art.gc.total_time\",Ce=\"art.gc.waiting_time\",Pe=\"art.memory.free\",De=\"art.memory.free_until_gc\",Le=\"art.memory.free_until_oome\",qe=\"art.memory.max\",Me=\"art.memory.total\",Ue=\"aws.cloudwatch.logs.log_group\",Ge=\"aws.cloudwatch.logs.log_stream\",ze=\"aws.cloudwatch.logs.url\",Ye=\"aws.dynamodb.attributes_to_get\",Ve=\"aws.dynamodb.attribute_definitions\",Fe=\"aws.dynamodb.consistent_read\",Ke=\"aws.dynamodb.consumed_capacity\",Be=\"aws.dynamodb.count\",We=\"aws.dynamodb.exclusive_start_table\",He=\"aws.dynamodb.global_secondary_indexes\",je=\"aws.dynamodb.global_secondary_index_updates\",Qe=\"aws.dynamodb.index_name\",Je=\"aws.dynamodb.item_collection_metrics\",Xe=\"aws.dynamodb.limit\",Ze=\"aws.dynamodb.local_secondary_indexes\",$e=\"aws.dynamodb.projection\",et=\"aws.dynamodb.provisioned_read_capacity\",tt=\"aws.dynamodb.provisioned_write_capacity\",it=\"aws.dynamodb.scanned_count\",at=\"aws.dynamodb.scan_forward\",st=\"aws.dynamodb.segment\",rt=\"aws.dynamodb.select\",nt=\"aws.dynamodb.table_count\",ot=\"aws.dynamodb.table_names\",lt=\"aws.dynamodb.total_segments\",pt=\"aws.extended_request_id\",ct=\"aws.kinesis.stream_name\",ut=\"aws.kinesis.stream.name\",dt=\"aws.lambda.aws_request_id\",mt=\"aws.lambda.execution_duration_in_millis\",gt=\"aws.lambda.function_name\",bt=\"aws.lambda.function_version\",yt=\"aws.lambda.invoked_arn\",_t=\"aws.lambda.invoked_function_arn\",ht=\"aws.lambda.remaining_time_in_millis\",ft=\"aws.log.group.names\",vt=\"aws.log.stream.names\",kt=\"aws.operation_name\",Tt=\"aws_region\",St=\"aws.request.extended_id\",Et=\"aws.request_id\",Ot=\"aws.request.id\",It=\"aws.request.url\",At=\"aws.s3.bucket\",wt=\"aws.s3.copy_source\",xt=\"aws.s3.delete\",Rt=\"aws.s3.key\",Nt=\"aws.s3.part_number\",Ct=\"aws.s3.upload_id\",Pt=\"aws.secretsmanager.secret.arn\",Dt=\"aws.sns.topic.arn\",Lt=\"aws.sqs.queue.url\",qt=\"aws.step_functions.activity.arn\",Mt=\"aws.step_functions.execution.arn\",Ut=\"aws.step_functions.state_machine.arn\",Gt=\"blocked_main_thread\",zt=\"browser.bfcache.frame\",Yt=\"browser.bfcache.not_restored_reason_count\",Vt=\"browser.bfcache.outcome\",Ft=\"browser.bfcache.reason\",Kt=\"browser.name\",Bt=\"browser.navigation.id\",Wt=\"browser.navigation.type\",Ht=\"browser.paint.type\",jt=\"browser.performance.navigation.activation_start\",Qt=\"browser.performance.time_origin\",Jt=\"browser.report.type\",Xt=\"browser.script.invoker\",Zt=\"browser.script.invoker_type\",$t=\"browser.script.source_char_position\",ei=\"browser.version\",ti=\"browser.web_vital.cls.report_event\",ii=\"browser.web_vital.cls.source.<key>\",ai=\"browser.web_vital.cls.source\",si=\"browser.web_vital.cls.value\",ri=\"browser.web_vital.fcp.value\",ni=\"browser.web_vital.fp.value\",oi=\"browser.web_vital.inp.interaction_type\",li=\"browser.web_vital.inp.target\",pi=\"browser.web_vital.inp.value\",ci=\"browser.web_vital.lcp.element\",ui=\"browser.web_vital.lcp.id\",di=\"browser.web_vital.lcp.load_time\",mi=\"browser.web_vital.lcp.render_time\",gi=\"browser.web_vital.lcp.report_event\",bi=\"browser.web_vital.lcp.size\",yi=\"browser.web_vital.lcp.url\",_i=\"browser.web_vital.lcp.value\",hi=\"browser.web_vital.ttfb.request_time\",fi=\"browser.web_vital.ttfb.value\",vi=\"cache.hit\",ki=\"cache.item_age\",Ti=\"cache.item_size\",Si=\"cache.key\",Ei=\"cache.operation\",Oi=\"cache.tags\",Ii=\"cache.ttl\",Ai=\"cache.write\",wi=\"channel\",xi=\"client.address\",Ri=\"client.port\",Ni=\"cloudflare.d1.duration\",Ci=\"cloudflare.d1.query_type\",Pi=\"cloudflare.d1.rows_read\",Di=\"cloudflare.d1.rows_written\",Li=\"cloudflare.durable_object.query.bindings\",qi=\"cloudflare.durable_object.response.rows_read\",Mi=\"cloudflare.durable_object.response.rows_written\",Ui=\"cloudflare.r2.bucket\",Gi=\"cloudflare.r2.operation\",zi=\"cloudflare.r2.request.delimiter\",Yi=\"cloudflare.r2.request.key\",Vi=\"cloudflare.r2.request.part_number\",Fi=\"cloudflare.r2.request.prefix\",Ki=\"cloudflare.workflow.attempt\",Bi=\"cloudflare.workflow.retries.backoff\",Wi=\"cloudflare.workflow.retries.delay\",Hi=\"cloudflare.workflow.retries.limit\",ji=\"cloudflare.workflow.timeout\",Qi=\"cloud.account.id\",Ji=\"cloud.availability_zone\",Xi=\"cloud.platform\",Zi=\"cloud.provider\",$i=\"cloud.region\",ea=\"cloud.resource_id\",ta=\"cls\",ia=\"cls.source.<key>\",aa=\"cls.source\",sa=\"code\",ra=\"code.filepath\",na=\"code.file.path\",oa=\"code.function\",la=\"code.function.name\",pa=\"code.lineno\",ca=\"code.line.number\",ua=\"code.namespace\",da=\"connectionType\",ma=\"connection.rtt\",ga=\"culture.calendar\",ba=\"culture.display_name\",ya=\"culture.is_24_hour_format\",_a=\"culture.locale\",ha=\"culture.timezone\",fa=\"db.collection.name\",va=\"db.connection_string\",ka=\"db.driver.name\",Ta=\"db.mongodb.collection\",Sa=\"db.name\",Ea=\"db.namespace\",Oa=\"db.operation\",Ia=\"db.operation.batch.size\",Aa=\"db.operation.name\",wa=\"db.params\",xa=\"db.query.parameter.<key>\",Ra=\"db.query.parameter\",Na=\"db.query.summary\",Ca=\"db.query.text\",Pa=\"db.redis.connection\",Da=\"db.redis.key\",La=\"db.redis.parameters\",qa=\"db.response.status_code\",Ma=\"db.sql.bindings\",Ua=\"db.statement\",Ga=\"db.stored_procedure.name\",za=\"db.system\",Ya=\"db.system.name\",Va=\"db.user\",Fa=\"deviceMemory\",Ka=\"device.archs\",Ba=\"device.battery_level\",Wa=\"device.battery_temperature\",Ha=\"device.boot_time\",ja=\"device.brand\",Qa=\"device.charging\",Ja=\"device.chipset\",Xa=\"device.class\",Za=\"device.connection_type\",$a=\"device.cpu_description\",es=\"device.external_free_storage\",ts=\"device.external_storage_size\",is=\"device.family\",as=\"device.free_memory\",ss=\"device.free_storage\",rs=\"device.id\",ns=\"device.locale\",os=\"device.low_memory\",ls=\"device.low_power_mode\",ps=\"device.manufacturer\",cs=\"device.memory.estimated_capacity\",us=\"device.memory_size\",ds=\"device.model\",ms=\"device.model_id\",gs=\"device.name\",bs=\"device.online\",ys=\"device.orientation\",_s=\"device.processor_count\",hs=\"device.processor_frequency\",fs=\"device.screen_density\",vs=\"device.screen_dpi\",ks=\"device.screen_height_pixels\",Ts=\"device.screen_width_pixels\",Ss=\"device.simulator\",Es=\"device.storage_size\",Os=\"device.thermal_state\",Is=\"device.timezone\",As=\"device.usable_memory\",ws=\"dist\",xs=\"django.function_name\",Rs=\"django.middleware_name\",Ns=\"effectiveConnectionType\",Cs=\"environment\",Ps=\"error.type\",Ds=\"event.id\",Ls=\"event.name\",qs=\"exception.escaped\",Ms=\"exception.message\",Us=\"exception.stacktrace\",Gs=\"exception.type\",zs=\"faas.coldstart\",Ys=\"faas.cron\",Vs=\"faas.duration_in_ms\",Fs=\"faas.entry_point\",Ks=\"faas.execution\",Bs=\"faas.id\",Ws=\"faas.identity\",Hs=\"faas.invocation_id\",js=\"faas.invoked_name\",Qs=\"faas.invoked_provider\",Js=\"faas.invoked_region\",Xs=\"faas.name\",Zs=\"faas.time\",$s=\"faas.trigger\",er=\"faas.version\",tr=\"fcp\",ir=\"file.path\",ar=\"file.size\",sr=\"flag.evaluation.<key>\",rr=\"flag.evaluation\",nr=\"fp\",or=\"frames.delay\",lr=\"frames.frozen\",pr=\"frames_frozen_rate\",cr=\"frames.slow\",ur=\"frames_slow_rate\",dr=\"frames.total\",mr=\"fs_error\",gr=\"gcp.function.context.event_id\",br=\"gcp.function.context.event_type\",yr=\"gcp.function.context.id\",_r=\"gcp.function.context.resource\",hr=\"gcp.function.context.source\",fr=\"gcp.function.context.specversion\",vr=\"gcp.function.context.time\",kr=\"gcp.function.context.timestamp\",Tr=\"gcp.function.context.type\",Sr=\"gcp.project.id\",Er=\"gcp_region\",Or=\"gen_ai.agent.name\",Ir=\"gen_ai.context.utilization\",Ar=\"gen_ai.context.window_size\",wr=\"gen_ai.conversation.id\",xr=\"gen_ai.cost.cache_creation.input_tokens\",Rr=\"gen_ai.cost.cache_read.input_tokens\",Nr=\"gen_ai.cost.input_tokens\",Cr=\"gen_ai.cost.output_tokens\",Pr=\"gen_ai.cost.reasoning.output_tokens\",Dr=\"gen_ai.cost.total_tokens\",Lr=\"gen_ai.embeddings.input\",qr=\"gen_ai.function_id\",Mr=\"gen_ai.input.messages\",Ur=\"gen_ai.memory.query.text\",Gr=\"gen_ai.memory.records\",zr=\"gen_ai.memory.record.count\",Yr=\"gen_ai.memory.record.id\",Vr=\"gen_ai.memory.store.id\",Fr=\"gen_ai.operation.name\",Kr=\"gen_ai.operation.type\",Br=\"gen_ai.output.messages\",Wr=\"gen_ai.pipeline.name\",Hr=\"gen_ai.prompt\",jr=\"gen_ai.prompt.name\",Qr=\"gen_ai.prompt.variable.<key>\",Jr=\"gen_ai.prompt.variable\",Xr=\"gen_ai.provider.name\",Zr=\"gen_ai.request.available_tools\",$r=\"gen_ai.request.frequency_penalty\",en=\"gen_ai.request.max_tokens\",tn=\"gen_ai.request.messages\",an=\"gen_ai.request.model\",sn=\"gen_ai.request.presence_penalty\",rn=\"gen_ai.request.reasoning.level\",nn=\"gen_ai.request.schema\",on=\"gen_ai.request.seed\",ln=\"gen_ai.request.stop_sequences\",pn=\"gen_ai.request.temperature\",cn=\"gen_ai.request.top_k\",un=\"gen_ai.request.top_p\",dn=\"gen_ai.response.finish_reason\",mn=\"gen_ai.response.finish_reasons\",gn=\"gen_ai.response.id\",bn=\"gen_ai.response.model\",yn=\"gen_ai.response.object\",_n=\"gen_ai.response.streaming\",hn=\"gen_ai.response.text\",fn=\"gen_ai.response.time_to_first_chunk\",vn=\"gen_ai.response.time_to_first_token\",kn=\"gen_ai.response.tokens_per_second\",Tn=\"gen_ai.response.tool_calls\",Sn=\"gen_ai.system\",En=\"gen_ai.system_instructions\",On=\"gen_ai.system.message\",In=\"gen_ai.tool.call.arguments\",An=\"gen_ai.tool.call.result\",wn=\"gen_ai.tool.definitions\",xn=\"gen_ai.tool.description\",Rn=\"gen_ai.tool.input\",Nn=\"gen_ai.tool.message\",Cn=\"gen_ai.tool.name\",Pn=\"gen_ai.tool.output\",Dn=\"gen_ai.tool.type\",Ln=\"gen_ai.usage.cache_creation.input_tokens\",qn=\"gen_ai.usage.cache_creation_input_tokens\",Mn=\"gen_ai.usage.cache_read.input_tokens\",Un=\"gen_ai.usage.cache_read_input_tokens\",Gn=\"gen_ai.usage.completion_tokens\",zn=\"gen_ai.usage.input_tokens\",Yn=\"gen_ai.usage.input_tokens.cached\",Vn=\"gen_ai.usage.input_tokens.cache_write\",Fn=\"gen_ai.usage.output_tokens\",Kn=\"gen_ai.usage.output_tokens.reasoning\",Bn=\"gen_ai.usage.prompt_tokens\",Wn=\"gen_ai.usage.reasoning.output_tokens\",Hn=\"gen_ai.usage.total_tokens\",jn=\"graphql.document\",Qn=\"graphql.operation.name\",Jn=\"graphql.operation.type\",Xn=\"graphql.processing.type\",Zn=\"graphql.source\",$n=\"grpc.error.bad_request.field_violations\",eo=\"grpc.error.debug_info.detail\",to=\"grpc.error.debug_info.stack_entries\",io=\"grpc.error.error_info.domain\",ao=\"grpc.error.error_info.metadata.<key>\",so=\"grpc.error.error_info.metadata\",ro=\"grpc.error.error_info.reason\",no=\"grpc.error.precondition_failure.violations\",oo=\"grpc.error.quota_failure.violations\",lo=\"grpc.error.resource_info.description\",po=\"grpc.error.resource_info.owner\",co=\"grpc.error.resource_info.resource_name\",uo=\"grpc.error.resource_info.resource_type\",mo=\"grpc.error.retry_info.retry_delay_ms\",go=\"hardwareConcurrency\",bo=\"http.client_ip\",yo=\"http.decoded_response_content_length\",_o=\"http.flavor\",ho=\"http.fragment\",fo=\"http.host\",vo=\"http.method\",ko=\"http.query\",To=\"http.request.body.data\",So=\"http.request.body.decoded_size\",Eo=\"http.request.body.size\",Oo=\"http.request.connection_end\",Io=\"http.request.connect_start\",Ao=\"http.request_content_length\",wo=\"http.request_content_length_uncompressed\",xo=\"http.request.domain_lookup_end\",Ro=\"http.request.domain_lookup_start\",No=\"http.request.fetch_start\",Co=\"http.request.header.<key>\",Po=\"http.request.header\",Do=\"http.request.method\",Lo=\"http.request_method\",qo=\"http.request.redirect_end\",Mo=\"http.request.redirect_start\",Uo=\"http.request.request_start\",Go=\"http.request.resend_count\",zo=\"http.request.response_end\",Yo=\"http.request.response_start\",Vo=\"http.request.same_origin\",Fo=\"http.request.secure_connection_start\",Ko=\"http.request.time_to_first_byte\",Bo=\"http.request.worker_start\",Wo=\"http.response.body.decoded_size\",Ho=\"http.response.body.size\",jo=\"http.response_content_length\",Qo=\"http.response_content_length_uncompressed\",Jo=\"http.response.header.content-length\",Xo=\"http.response.header.<key>\",Zo=\"http.response.header\",$o=\"http.response.size\",el=\"http.response.status_code\",tl=\"http.response.status_text\",il=\"http.response_transfer_size\",al=\"http.route\",sl=\"http.scheme\",rl=\"http.server_name\",nl=\"http.server.request.time_in_queue\",ol=\"http.status_code\",ll=\"http.status_text\",pl=\"http.target\",cl=\"http.url\",ul=\"http.user_agent\",dl=\"id\",ml=\"inp\",gl=\"integrity.blocked_url\",bl=\"integrity.destination\",yl=\"integrity.document_url\",_l=\"integrity.report_only\",hl=\"jsonrpc.protocol.version\",fl=\"jsonrpc.request.id\",vl=\"jvm.gc.action\",kl=\"jvm.gc.name\",Tl=\"jvm.memory.pool.name\",Sl=\"jvm.memory.type\",El=\"jvm.thread.daemon\",Ol=\"jvm.thread.state\",Il=\"koa.name\",Al=\"koa.type\",wl=\"langchain.chain.name\",xl=\"lcp\",Rl=\"lcp.element\",Nl=\"lcp.id\",Cl=\"lcp.loadTime\",Pl=\"lcp.renderTime\",Dl=\"lcp.size\",Ll=\"lcp.url\",ql=\"litestar.middleware_name\",Ml=\"logger.name\",Ul=\"mcp.auth.client.name\",Gl=\"mcp.cancelled.reason\",zl=\"mcp.cancelled.request_id\",Yl=\"mcp.client.name\",Vl=\"mcp.client.title\",Fl=\"mcp.client.version\",Kl=\"mcp.lifecycle.phase\",Bl=\"mcp.logging.data_type\",Wl=\"mcp.logging.level\",Hl=\"mcp.logging.logger\",jl=\"mcp.logging.message\",Ql=\"mcp.method.name\",Jl=\"mcp.progress.current\",Xl=\"mcp.progress.message\",Zl=\"mcp.progress.percentage\",$l=\"mcp.progress.token\",ep=\"mcp.progress.total\",tp=\"mcp.prompt.name\",ip=\"mcp.prompt.result.description\",ap=\"mcp.prompt.result.<key>.content\",sp=\"mcp.prompt.result.<key>.role\",rp=\"mcp.prompt.result.message_content\",np=\"mcp.prompt.result.message_count\",op=\"mcp.prompt.result.message_role\",lp=\"mcp.protocol.ready\",pp=\"mcp.protocol.version\",cp=\"mcp.request.argument.<key>\",up=\"mcp.request.argument\",dp=\"mcp.request.argument.name\",mp=\"mcp.request.argument.uri\",gp=\"mcp.request.id\",bp=\"mcp.resource.protocol\",yp=\"mcp.resource.uri\",_p=\"mcp.server.name\",hp=\"mcp.server.title\",fp=\"mcp.server.version\",vp=\"mcp.session.id\",kp=\"mcp.tool.name\",Tp=\"mcp.tool.result.content\",Sp=\"mcp.tool.result.content_count\",Ep=\"mcp.tool.result.content_type\",Op=\"mcp.tool.result.data_size\",Ip=\"mcp.tool.result.is_error\",Ap=\"mcp.tool.result.<key>.content\",wp=\"mcp.tool.result.<key>.content_type\",xp=\"mcp.tool.result.<key>.data_size\",Rp=\"mcp.tool.result.<key>.mime_type\",Np=\"mcp.tool.result.<key>.name\",Cp=\"mcp.tool.result.<key>.resource_mime_type\",Pp=\"mcp.tool.result.<key>.resource_uri\",Dp=\"mcp.tool.result.<key>.uri\",Lp=\"mcp.tool.result.mime_type\",qp=\"mcp.tool.result.name\",Mp=\"mcp.tool.result.resource_mime_type\",Up=\"mcp.tool.result.resource_uri\",Gp=\"mcp.tool.result.uri\",zp=\"mcp.transport\",Yp=\"mdc.<key>\",Vp=\"mdc\",Fp=\"messaging.batch.message_count\",Kp=\"messaging.conversation_id\",Bp=\"messaging.destination\",Wp=\"messaging.destination.connection\",Hp=\"messaging.destination_kind\",jp=\"messaging.destination.name\",Qp=\"messaging.destination.partition.id\",Jp=\"messaging.kafka.message.key\",Xp=\"messaging.kafka.message.tombstone\",Zp=\"messaging.kafka.offset\",$p=\"messaging.message.body.size\",ec=\"messaging.message.conversation_id\",tc=\"messaging.message.envelope.size\",ic=\"messaging.message.id\",ac=\"messaging.message_id\",sc=\"messaging.message.receive.latency\",rc=\"messaging.message.retry.count\",nc=\"messaging.operation\",oc=\"messaging.operation.name\",lc=\"messaging.operation.type\",pc=\"messaging.protocol\",cc=\"messaging.protocol_version\",uc=\"messaging.rabbitmq.destination.routing_key\",dc=\"messaging.rabbitmq.routing_key\",mc=\"messaging.system\",gc=\"messaging.url\",bc=\"method\",yc=\"middleware.name\",_c=\"navigation.origin\",hc=\"navigation.route.id\",fc=\"navigation.type\",vc=\"nel.elapsed_time\",kc=\"nel.phase\",Tc=\"nel.referrer\",Sc=\"nel.sampling_fraction\",Ec=\"nel.sampling_function\",Oc=\"nel.type\",Ic=\"network.connection.effective_type\",Ac=\"network.connection.rtt\",wc=\"network.connection.type\",xc=\"network.local.address\",Rc=\"network.local.port\",Nc=\"network.peer.address\",Cc=\"network.peer.port\",Pc=\"network.protocol.name\",Dc=\"network.protocol.version\",Lc=\"network.transport\",qc=\"network.type\",Mc=\"net.host.ip\",Uc=\"net.host.name\",Gc=\"net.host.port\",zc=\"net.peer.ip\",Yc=\"net.peer.name\",Vc=\"net.peer.port\",Fc=\"net.protocol.name\",Kc=\"net.protocol.version\",Bc=\"net.sock.family\",Wc=\"net.sock.host.addr\",Hc=\"net.sock.host.port\",jc=\"net.sock.peer.addr\",Qc=\"net.sock.peer.name\",Jc=\"net.sock.peer.port\",Xc=\"net.transport\",Zc=\"os.build\",$c=\"os.build_id\",eu=\"os.description\",tu=\"os.kernel_version\",iu=\"os.name\",au=\"os.raw_description\",su=\"os.rooted\",ru=\"os.theme\",nu=\"os.type\",ou=\"os.version\",lu=\"otel.kind\",pu=\"otel.scope.name\",cu=\"otel.scope.version\",uu=\"otel.status_code\",du=\"otel.status_description\",mu=\"params.<key>\",gu=\"params\",bu=\"performance.activationStart\",yu=\"performance.timeOrigin\",_u=\"port\",hu=\"previous_route\",fu=\"process.command_args\",vu=\"process.executable.name\",ku=\"process.pid\",Tu=\"process.runtime.description\",Su=\"process.runtime.engine.name\",Eu=\"process.runtime.engine.version\",Ou=\"process.runtime.name\",Iu=\"process.runtime.version\",Au=\"profile_id\",wu=\"query\",xu=\"query.<key>\",Ru=\"query\",Nu=\"react_native.architecture\",Cu=\"react_native.module.call.count\",Pu=\"react_native.module.call.distinct_count\",Du=\"react_native.module.duration.max\",Lu=\"react_native.module.duration.total\",qu=\"react_native.module.error.count\",Mu=\"react_native.module.kind\",Uu=\"react_native.module.method\",Gu=\"react_native.module.name\",zu=\"react_native.module.top.duration\",Yu=\"react_native.module.top.name\",Vu=\"react.version\",Fu=\"redis.command\",Ku=\"redis.key\",Bu=\"release\",Wu=\"remix.action_form_data.<key>\",Hu=\"remix.action_form_data\",ju=\"replayId\",Qu=\"replay_id\",Ju=\"resource.deployment.environment\",Xu=\"resource.deployment.environment.name\",Zu=\"resource.render_blocking_status\",$u=\"route\",ed=\"router.navigation.origin\",td=\"router.navigation.route.id\",id=\"router.navigation.type\",ad=\"rpc.grpc.status_code\",sd=\"rpc.method\",rd=\"rpc.response.status_code\",nd=\"rpc.service\",od=\"rpc.system\",ld=\"rpc.system.name\",pd=\"runtime.build\",cd=\"runtime.name\",ud=\"runtime.raw_description\",dd=\"runtime.version\",md=\"score.<key>\",gd=\"score\",bd=\"score.ratio.<key>\",yd=\"score.ratio\",_d=\"score.total\",hd=\"score.weight.<key>\",fd=\"score.weight\",vd=\"sentry.action\",kd=\"sentry.browser.name\",Td=\"sentry.browser.version\",Sd=\"sentry.cancellation_reason\",Ed=\"sentry.category\",Od=\"sentry.client_sample_rate\",Id=\"sentry.description\",Ad=\"sentry.dist\",wd=\"sentry.domain\",xd=\"sentry.dsc.environment\",Rd=\"sentry.dsc.project_id\",Nd=\"sentry.dsc.public_key\",Cd=\"sentry.dsc.release\",Pd=\"sentry.dsc.sampled\",Dd=\"sentry.dsc.sample_rate\",Ld=\"sentry.dsc.trace_id\",qd=\"sentry.dsc.transaction\",Md=\"sentry.environment\",Ud=\"sentry.event.serialized_breadcrumbs\",Gd=\"sentry.event.serialized_contexts\",zd=\"sentry.event.serialized_extra\",Yd=\"sentry.event.serialized_meta\",Vd=\"sentry.exclusive_time\",Fd=\"sentry.frames.frozen\",Kd=\"sentry.frames.slow\",Bd=\"sentry.frames.total\",Wd=\"sentry.graphql.operation\",Hd=\"sentry.group\",jd=\"sentry.http.prefetch\",Qd=\"sentry.idle_span_finish_reason\",Jd=\"sentry.is_localhost\",Xd=\"sentry.is_remote\",Zd=\"sentry.kind\",$d=\"sentry.link.type\",em=\"sentry.main_thread\",tm=\"sentry.message.parameter.<key>\",im=\"sentry.message.template\",am=\"sentry.metric.source\",sm=\"sentry.mobile\",rm=\"sentry.module.<key>\",nm=\"sentry.module\",om=\"sentry.nextjs.ssr.function.route\",lm=\"sentry.nextjs.ssr.function.type\",pm=\"sentry.normalized_db_query\",cm=\"sentry.normalized_db_query.hash\",um=\"sentry.normalized_description\",dm=\"sentry.observed_timestamp_nanos\",mm=\"sentry.op\",gm=\"sentry.origin\",bm=\"sentry.pageload.span_id\",ym=\"sentry.platform\",_m=\"sentry.profiler_id\",hm=\"sentry.profile_id\",fm=\"sentry.relay.ingress\",vm=\"sentry.relay.pipeline\",km=\"sentry.release\",Tm=\"sentry.replay_id\",Sm=\"sentry.replay_is_buffering\",Em=\"sentry.report_event\",Om=\"sentry.sdk.integrations\",Im=\"sentry.sdk.name\",Am=\"sentry.sdk.version\",wm=\"sentry.segment.id\",xm=\"sentry.segment_id\",Rm=\"sentry.segment.name\",Nm=\"sentry.segment.name.source\",Cm=\"sentry.server_sample_rate\",Pm=\"sentry.source\",Dm=\"sentry.span.source\",Lm=\"sentry.status\",qm=\"sentry.status_code\",Mm=\"sentry.status.message\",Um=\"sentry.sveltekit.navigation.from\",Gm=\"sentry.sveltekit.navigation.to\",zm=\"sentry.sveltekit.navigation.type\",Ym=\"sentry.thread.id\",Vm=\"sentry.timestamp.sequence\",Fm=\"sentry.trace_lifecycle\",Km=\"sentry.trace.parent_span_id\",Bm=\"sentry.trace.status\",Wm=\"sentry.transaction\",Hm=\"sentry.user.email\",jm=\"sentry.user.geo.city\",Qm=\"sentry.user.geo.country_code\",Jm=\"sentry.user.geo.region\",Xm=\"sentry.user.geo.subdivision\",Zm=\"sentry.user.id\",$m=\"sentry.user.ip\",eg=\"sentry.user.username\",tg=\"server.address\",ig=\"server_name\",ag=\"server.port\",sg=\"service.name\",rg=\"service.version\",ng=\"session.id\",og=\"stall_percentage\",lg=\"stall_total_time\",pg=\"starlette.middleware_name\",cg=\"starlite.middleware_name\",ug=\"state.type\",dg=\"subprocess.pid\",mg=\"sveltekit.load.environment\",gg=\"sveltekit.load.node_id\",bg=\"sveltekit.load.node_type\",yg=\"sveltekit.tracing.original_name\",_g=\"thread.id\",hg=\"thread.name\",fg=\"timber.tag\",vg=\"time_to_full_display\",kg=\"time_to_initial_display\",Tg=\"transaction\",Sg=\"trpc.procedure_path\",Eg=\"trpc.procedure_type\",Og=\"ttfb\",Ig=\"ttfb.requestTime\",Ag=\"turbo_modules.total_call_count\",wg=\"turbo_modules.total_duration_ms\",xg=\"turbo_modules.total_error_count\",Rg=\"turbo_modules.unique_methods\",Ng=\"turbo_module.arch\",Cg=\"turbo_module.method\",Pg=\"turbo_module.name\",Dg=\"turbo_module.top_module\",Lg=\"turbo_module.top_module_duration_ms\",qg=\"turbo_module.total_call_count\",Mg=\"turbo_module.total_duration_ms\",Ug=\"turbo_module.total_error_count\",Gg=\"turbo_module.unique_methods\",zg=\"type\",Yg=\"ui.component_name\",Vg=\"ui.contributes_to_ttfd\",Fg=\"ui.contributes_to_ttid\",Kg=\"ui.element.height\",Bg=\"ui.element.id\",Wg=\"ui.element.identifier\",Hg=\"ui.element.load_time\",jg=\"ui.element.paint_type\",Qg=\"ui.element.render_time\",Jg=\"ui.element.type\",Xg=\"ui.element.url\",Zg=\"ui.element.width\",$g=\"url\",eb=\"url.domain\",tb=\"url.fragment\",ib=\"url.full\",ab=\"url.path\",sb=\"url.path.parameter.<key>\",rb=\"url.path.parameter\",nb=\"url.path.params.<key>\",ob=\"url.path.params\",lb=\"url.port\",pb=\"url.query\",cb=\"url.same_origin\",ub=\"url.scheme\",db=\"url.template\",mb=\"user_agent.original\",gb=\"user.email\",bb=\"user.full_name\",yb=\"user.geo.city\",_b=\"user.geo.country_code\",hb=\"user.geo.region\",fb=\"user.geo.subdivision\",vb=\"user.hash\",kb=\"user.id\",Tb=\"user.ip_address\",Sb=\"user.name\",Eb=\"user.roles\",Ob=\"vercel.ai.telemetry.metadata.<key>\",Ib=\"vercel.ai.telemetry.metadata\",Ab=\"vercel.branch\",wb=\"vercel.build_id\",xb=\"vercel.deployment_id\",Rb=\"vercel.destination\",Nb=\"vercel.edge_type\",Cb=\"vercel.entrypoint\",Pb=\"vercel.execution_region\",Db=\"vercel.id\",Lb=\"vercel.ja3_digest\",qb=\"vercel.ja4_digest\",Mb=\"vercel.log_type\",Ub=\"vercel.path\",Gb=\"vercel.project_id\",zb=\"vercel.project_name\",Yb=\"vercel.proxy.cache_id\",Vb=\"vercel.proxy.client_ip\",Fb=\"vercel.proxy.host\",Kb=\"vercel.proxy.lambda_region\",Bb=\"vercel.proxy.method\",Wb=\"vercel.proxy.path\",Hb=\"vercel.proxy.path_type\",jb=\"vercel.proxy.path_type_variant\",Qb=\"vercel.proxy.referer\",Jb=\"vercel.proxy.region\",Xb=\"vercel.proxy.response_byte_size\",Zb=\"vercel.proxy.scheme\",$b=\"vercel.proxy.status_code\",ey=\"vercel.proxy.timestamp\",ty=\"vercel.proxy.user_agent\",iy=\"vercel.proxy.vercel_cache\",ay=\"vercel.proxy.vercel_id\",sy=\"vercel.proxy.waf_action\",ry=\"vercel.proxy.waf_rule_id\",ny=\"vercel.request_id\",oy=\"vercel.source\",ly=\"vercel.status_code\",py={address:\"string\",\"ai.citations\":\"string[]\",\"ai.completion_tokens.used\":\"integer\",\"ai.documents\":\"string[]\",\"ai.finish_reason\":\"string\",\"ai.frequency_penalty\":\"double\",\"ai.function_call\":\"string\",\"ai.generation_id\":\"string\",\"ai.input_messages\":\"string\",\"ai.is_search_required\":\"boolean\",\"ai.metadata\":\"string\",\"ai.model.id\":\"string\",\"ai.model_id\":\"string\",\"ai.model.provider\":\"string\",\"ai.pipeline.name\":\"string\",\"ai.preamble\":\"string\",\"ai.presence_penalty\":\"double\",\"ai.prompt\":\"string\",\"ai.prompt.messages\":\"string\",\"ai.prompt_tokens.used\":\"integer\",\"ai.prompt.tools\":\"string[]\",\"ai.raw_prompting\":\"boolean\",\"ai.responses\":\"string[]\",\"ai.response_format\":\"string\",\"ai.response.id\":\"string\",\"ai.response.model\":\"string\",\"ai.response.object\":\"string\",\"ai.response.text\":\"string\",\"ai.response.timestamp\":\"string\",\"ai.response.toolCalls\":\"string\",\"ai.schema\":\"string\",\"ai.search_queries\":\"string[]\",\"ai.search_results\":\"string[]\",\"ai.seed\":\"string\",\"ai.streaming\":\"boolean\",\"ai.tags\":\"string\",\"ai.temperature\":\"double\",\"ai.texts\":\"string[]\",\"ai.toolCall.args\":\"string\",\"ai.toolCall.result\":\"string\",\"ai.tools\":\"string[]\",\"ai.tool_calls\":\"string[]\",\"ai.top_k\":\"integer\",\"ai.top_p\":\"double\",\"ai.total_cost\":\"double\",\"ai.total_tokens.used\":\"integer\",\"ai.usage.tokens\":\"integer\",\"ai.values\":\"string\",\"ai.warnings\":\"string[]\",\"angular.version\":\"string\",\"anthropic.tool_result.content\":\"string\",\"app.app_build\":\"string\",\"app.app_identifier\":\"string\",\"app.app_name\":\"string\",\"app.app_start_time\":\"string\",\"app.app_version\":\"string\",\"app.build\":\"string\",\"app.identifier\":\"string\",\"app.in_foreground\":\"boolean\",\"app.name\":\"string\",app_start_cold:\"double\",\"app.start_time\":\"string\",app_start_type:\"string\",app_start_warm:\"double\",\"app.version\":\"string\",\"app.vitals.frames.delay.value\":\"integer\",\"app.vitals.frames.frozen.count\":\"integer\",\"app.vitals.frames.frozen.rate\":\"double\",\"app.vitals.frames.slow.count\":\"integer\",\"app.vitals.frames.slow.rate\":\"double\",\"app.vitals.frames.total.count\":\"integer\",\"app.vitals.stall.duration\":\"double\",\"app.vitals.stall.percentage\":\"double\",\"app.vitals.start.cold.value\":\"double\",\"app.vitals.start.prewarmed\":\"boolean\",\"app.vitals.start.reason\":\"string\",\"app.vitals.start.screen\":\"string\",\"app.vitals.start.type\":\"string\",\"app.vitals.start.warm.value\":\"double\",\"app.vitals.ttfd.value\":\"double\",\"app.vitals.ttid.value\":\"double\",\"art.gc.blocking_count\":\"integer\",\"art.gc.blocking_time\":\"double\",\"art.gc.pre_oome_count\":\"integer\",\"art.gc.total_count\":\"integer\",\"art.gc.total_time\":\"double\",\"art.gc.waiting_time\":\"double\",\"art.memory.free\":\"integer\",\"art.memory.free_until_gc\":\"integer\",\"art.memory.free_until_oome\":\"integer\",\"art.memory.max\":\"integer\",\"art.memory.total\":\"integer\",\"aws.cloudwatch.logs.log_group\":\"string\",\"aws.cloudwatch.logs.log_stream\":\"string\",\"aws.cloudwatch.logs.url\":\"string\",\"aws.dynamodb.attributes_to_get\":\"string[]\",\"aws.dynamodb.attribute_definitions\":\"string[]\",\"aws.dynamodb.consistent_read\":\"boolean\",\"aws.dynamodb.consumed_capacity\":\"string[]\",\"aws.dynamodb.count\":\"integer\",\"aws.dynamodb.exclusive_start_table\":\"string\",\"aws.dynamodb.global_secondary_indexes\":\"string[]\",\"aws.dynamodb.global_secondary_index_updates\":\"string[]\",\"aws.dynamodb.index_name\":\"string\",\"aws.dynamodb.item_collection_metrics\":\"string\",\"aws.dynamodb.limit\":\"integer\",\"aws.dynamodb.local_secondary_indexes\":\"string[]\",\"aws.dynamodb.projection\":\"string\",\"aws.dynamodb.provisioned_read_capacity\":\"double\",\"aws.dynamodb.provisioned_write_capacity\":\"double\",\"aws.dynamodb.scanned_count\":\"integer\",\"aws.dynamodb.scan_forward\":\"boolean\",\"aws.dynamodb.segment\":\"integer\",\"aws.dynamodb.select\":\"string\",\"aws.dynamodb.table_count\":\"integer\",\"aws.dynamodb.table_names\":\"string[]\",\"aws.dynamodb.total_segments\":\"integer\",\"aws.extended_request_id\":\"string\",\"aws.kinesis.stream_name\":\"string\",\"aws.kinesis.stream.name\":\"string\",\"aws.lambda.aws_request_id\":\"string\",\"aws.lambda.execution_duration_in_millis\":\"double\",\"aws.lambda.function_name\":\"string\",\"aws.lambda.function_version\":\"string\",\"aws.lambda.invoked_arn\":\"string\",\"aws.lambda.invoked_function_arn\":\"string\",\"aws.lambda.remaining_time_in_millis\":\"double\",\"aws.log.group.names\":\"string[]\",\"aws.log.stream.names\":\"string[]\",\"aws.operation_name\":\"string\",aws_region:\"string\",\"aws.request.extended_id\":\"string\",\"aws.request_id\":\"string\",\"aws.request.id\":\"string\",\"aws.request.url\":\"string\",\"aws.s3.bucket\":\"string\",\"aws.s3.copy_source\":\"string\",\"aws.s3.delete\":\"string\",\"aws.s3.key\":\"string\",\"aws.s3.part_number\":\"integer\",\"aws.s3.upload_id\":\"string\",\"aws.secretsmanager.secret.arn\":\"string\",\"aws.sns.topic.arn\":\"string\",\"aws.sqs.queue.url\":\"string\",\"aws.step_functions.activity.arn\":\"string\",\"aws.step_functions.execution.arn\":\"string\",\"aws.step_functions.state_machine.arn\":\"string\",blocked_main_thread:\"boolean\",\"browser.bfcache.frame\":\"string\",\"browser.bfcache.not_restored_reason_count\":\"integer\",\"browser.bfcache.outcome\":\"string\",\"browser.bfcache.reason\":\"string\",\"browser.name\":\"string\",\"browser.navigation.id\":\"integer\",\"browser.navigation.type\":\"string\",\"browser.paint.type\":\"string\",\"browser.performance.navigation.activation_start\":\"double\",\"browser.performance.time_origin\":\"double\",\"browser.report.type\":\"string\",\"browser.script.invoker\":\"string\",\"browser.script.invoker_type\":\"string\",\"browser.script.source_char_position\":\"integer\",\"browser.version\":\"string\",\"browser.web_vital.cls.report_event\":\"string\",\"browser.web_vital.cls.source.<key>\":\"string\",\"browser.web_vital.cls.value\":\"double\",\"browser.web_vital.fcp.value\":\"double\",\"browser.web_vital.fp.value\":\"double\",\"browser.web_vital.inp.interaction_type\":\"string\",\"browser.web_vital.inp.target\":\"string\",\"browser.web_vital.inp.value\":\"double\",\"browser.web_vital.lcp.element\":\"string\",\"browser.web_vital.lcp.id\":\"string\",\"browser.web_vital.lcp.load_time\":\"integer\",\"browser.web_vital.lcp.render_time\":\"integer\",\"browser.web_vital.lcp.report_event\":\"string\",\"browser.web_vital.lcp.size\":\"integer\",\"browser.web_vital.lcp.url\":\"string\",\"browser.web_vital.lcp.value\":\"double\",\"browser.web_vital.ttfb.request_time\":\"double\",\"browser.web_vital.ttfb.value\":\"double\",\"cache.hit\":\"boolean\",\"cache.item_age\":\"integer\",\"cache.item_size\":\"integer\",\"cache.key\":\"string[]\",\"cache.operation\":\"string\",\"cache.tags\":\"string[]\",\"cache.ttl\":\"integer\",\"cache.write\":\"boolean\",channel:\"string\",\"client.address\":\"string\",\"client.port\":\"integer\",\"cloudflare.d1.duration\":\"integer\",\"cloudflare.d1.query_type\":\"string\",\"cloudflare.d1.rows_read\":\"integer\",\"cloudflare.d1.rows_written\":\"integer\",\"cloudflare.durable_object.query.bindings\":\"integer\",\"cloudflare.durable_object.response.rows_read\":\"integer\",\"cloudflare.durable_object.response.rows_written\":\"integer\",\"cloudflare.r2.bucket\":\"string\",\"cloudflare.r2.operation\":\"string\",\"cloudflare.r2.request.delimiter\":\"string\",\"cloudflare.r2.request.key\":\"string\",\"cloudflare.r2.request.part_number\":\"integer\",\"cloudflare.r2.request.prefix\":\"string\",\"cloudflare.workflow.attempt\":\"integer\",\"cloudflare.workflow.retries.backoff\":\"string\",\"cloudflare.workflow.retries.delay\":\"string\",\"cloudflare.workflow.retries.limit\":\"integer\",\"cloudflare.workflow.timeout\":\"string\",\"cloud.account.id\":\"string\",\"cloud.availability_zone\":\"string\",\"cloud.platform\":\"string\",\"cloud.provider\":\"string\",\"cloud.region\":\"string\",\"cloud.resource_id\":\"string\",cls:\"double\",\"cls.source.<key>\":\"string\",code:\"string\",\"code.filepath\":\"string\",\"code.file.path\":\"string\",\"code.function\":\"string\",\"code.function.name\":\"string\",\"code.lineno\":\"integer\",\"code.line.number\":\"integer\",\"code.namespace\":\"string\",connectionType:\"string\",\"connection.rtt\":\"integer\",\"culture.calendar\":\"string\",\"culture.display_name\":\"string\",\"culture.is_24_hour_format\":\"boolean\",\"culture.locale\":\"string\",\"culture.timezone\":\"string\",\"db.collection.name\":\"string\",\"db.connection_string\":\"string\",\"db.driver.name\":\"string\",\"db.mongodb.collection\":\"string\",\"db.name\":\"string\",\"db.namespace\":\"string\",\"db.operation\":\"string\",\"db.operation.batch.size\":\"integer\",\"db.operation.name\":\"string\",\"db.params\":\"string\",\"db.query.parameter.<key>\":\"string\",\"db.query.summary\":\"string\",\"db.query.text\":\"string\",\"db.redis.connection\":\"string\",\"db.redis.key\":\"string\",\"db.redis.parameters\":\"string[]\",\"db.response.status_code\":\"string\",\"db.sql.bindings\":\"string[]\",\"db.statement\":\"string\",\"db.stored_procedure.name\":\"string\",\"db.system\":\"string\",\"db.system.name\":\"string\",\"db.user\":\"string\",deviceMemory:\"string\",\"device.archs\":\"string[]\",\"device.battery_level\":\"double\",\"device.battery_temperature\":\"double\",\"device.boot_time\":\"string\",\"device.brand\":\"string\",\"device.charging\":\"boolean\",\"device.chipset\":\"string\",\"device.class\":\"string\",\"device.connection_type\":\"string\",\"device.cpu_description\":\"string\",\"device.external_free_storage\":\"integer\",\"device.external_storage_size\":\"integer\",\"device.family\":\"string\",\"device.free_memory\":\"integer\",\"device.free_storage\":\"integer\",\"device.id\":\"string\",\"device.locale\":\"string\",\"device.low_memory\":\"boolean\",\"device.low_power_mode\":\"boolean\",\"device.manufacturer\":\"string\",\"device.memory.estimated_capacity\":\"integer\",\"device.memory_size\":\"integer\",\"device.model\":\"string\",\"device.model_id\":\"string\",\"device.name\":\"string\",\"device.online\":\"boolean\",\"device.orientation\":\"string\",\"device.processor_count\":\"integer\",\"device.processor_frequency\":\"double\",\"device.screen_density\":\"double\",\"device.screen_dpi\":\"integer\",\"device.screen_height_pixels\":\"integer\",\"device.screen_width_pixels\":\"integer\",\"device.simulator\":\"boolean\",\"device.storage_size\":\"integer\",\"device.thermal_state\":\"string\",\"device.timezone\":\"string\",\"device.usable_memory\":\"integer\",dist:\"string\",\"django.function_name\":\"string\",\"django.middleware_name\":\"string\",effectiveConnectionType:\"string\",environment:\"string\",\"error.type\":\"string\",\"event.id\":\"integer\",\"event.name\":\"string\",\"exception.escaped\":\"boolean\",\"exception.message\":\"string\",\"exception.stacktrace\":\"string\",\"exception.type\":\"string\",\"faas.coldstart\":\"boolean\",\"faas.cron\":\"string\",\"faas.duration_in_ms\":\"integer\",\"faas.entry_point\":\"string\",\"faas.execution\":\"string\",\"faas.id\":\"string\",\"faas.identity\":\"string\",\"faas.invocation_id\":\"string\",\"faas.invoked_name\":\"string\",\"faas.invoked_provider\":\"string\",\"faas.invoked_region\":\"string\",\"faas.name\":\"string\",\"faas.time\":\"string\",\"faas.trigger\":\"string\",\"faas.version\":\"string\",fcp:\"double\",\"file.path\":\"string\",\"file.size\":\"integer\",\"flag.evaluation.<key>\":\"boolean\",fp:\"double\",\"frames.delay\":\"integer\",\"frames.frozen\":\"integer\",frames_frozen_rate:\"double\",\"frames.slow\":\"integer\",frames_slow_rate:\"double\",\"frames.total\":\"integer\",fs_error:\"string\",\"gcp.function.context.event_id\":\"string\",\"gcp.function.context.event_type\":\"string\",\"gcp.function.context.id\":\"string\",\"gcp.function.context.resource\":\"string\",\"gcp.function.context.source\":\"string\",\"gcp.function.context.specversion\":\"string\",\"gcp.function.context.time\":\"string\",\"gcp.function.context.timestamp\":\"string\",\"gcp.function.context.type\":\"string\",\"gcp.project.id\":\"string\",gcp_region:\"string\",\"gen_ai.agent.name\":\"string\",\"gen_ai.context.utilization\":\"double\",\"gen_ai.context.window_size\":\"integer\",\"gen_ai.conversation.id\":\"string\",\"gen_ai.cost.cache_creation.input_tokens\":\"double\",\"gen_ai.cost.cache_read.input_tokens\":\"double\",\"gen_ai.cost.input_tokens\":\"double\",\"gen_ai.cost.output_tokens\":\"double\",\"gen_ai.cost.reasoning.output_tokens\":\"double\",\"gen_ai.cost.total_tokens\":\"double\",\"gen_ai.embeddings.input\":\"string\",\"gen_ai.function_id\":\"string\",\"gen_ai.input.messages\":\"string\",\"gen_ai.memory.query.text\":\"string\",\"gen_ai.memory.records\":\"string\",\"gen_ai.memory.record.count\":\"integer\",\"gen_ai.memory.record.id\":\"string\",\"gen_ai.memory.store.id\":\"string\",\"gen_ai.operation.name\":\"string\",\"gen_ai.operation.type\":\"string\",\"gen_ai.output.messages\":\"string\",\"gen_ai.pipeline.name\":\"string\",\"gen_ai.prompt\":\"string\",\"gen_ai.prompt.name\":\"string\",\"gen_ai.prompt.variable.<key>\":\"string\",\"gen_ai.provider.name\":\"string\",\"gen_ai.request.available_tools\":\"string\",\"gen_ai.request.frequency_penalty\":\"double\",\"gen_ai.request.max_tokens\":\"integer\",\"gen_ai.request.messages\":\"string\",\"gen_ai.request.model\":\"string\",\"gen_ai.request.presence_penalty\":\"double\",\"gen_ai.request.reasoning.level\":\"string\",\"gen_ai.request.schema\":\"string\",\"gen_ai.request.seed\":\"string\",\"gen_ai.request.stop_sequences\":\"string[]\",\"gen_ai.request.temperature\":\"double\",\"gen_ai.request.top_k\":\"integer\",\"gen_ai.request.top_p\":\"double\",\"gen_ai.response.finish_reason\":\"string\",\"gen_ai.response.finish_reasons\":\"string\",\"gen_ai.response.id\":\"string\",\"gen_ai.response.model\":\"string\",\"gen_ai.response.object\":\"string\",\"gen_ai.response.streaming\":\"boolean\",\"gen_ai.response.text\":\"string\",\"gen_ai.response.time_to_first_chunk\":\"double\",\"gen_ai.response.time_to_first_token\":\"double\",\"gen_ai.response.tokens_per_second\":\"double\",\"gen_ai.response.tool_calls\":\"string\",\"gen_ai.system\":\"string\",\"gen_ai.system_instructions\":\"string\",\"gen_ai.system.message\":\"string\",\"gen_ai.tool.call.arguments\":\"string\",\"gen_ai.tool.call.result\":\"string\",\"gen_ai.tool.definitions\":\"string\",\"gen_ai.tool.description\":\"string\",\"gen_ai.tool.input\":\"string\",\"gen_ai.tool.message\":\"string\",\"gen_ai.tool.name\":\"string\",\"gen_ai.tool.output\":\"string\",\"gen_ai.tool.type\":\"string\",\"gen_ai.usage.cache_creation.input_tokens\":\"integer\",\"gen_ai.usage.cache_creation_input_tokens\":\"integer\",\"gen_ai.usage.cache_read.input_tokens\":\"integer\",\"gen_ai.usage.cache_read_input_tokens\":\"integer\",\"gen_ai.usage.completion_tokens\":\"integer\",\"gen_ai.usage.input_tokens\":\"integer\",\"gen_ai.usage.input_tokens.cached\":\"integer\",\"gen_ai.usage.input_tokens.cache_write\":\"integer\",\"gen_ai.usage.output_tokens\":\"integer\",\"gen_ai.usage.output_tokens.reasoning\":\"integer\",\"gen_ai.usage.prompt_tokens\":\"integer\",\"gen_ai.usage.reasoning.output_tokens\":\"integer\",\"gen_ai.usage.total_tokens\":\"integer\",\"graphql.document\":\"string\",\"graphql.operation.name\":\"string\",\"graphql.operation.type\":\"string\",\"graphql.processing.type\":\"string\",\"graphql.source\":\"string\",\"grpc.error.bad_request.field_violations\":\"string[]\",\"grpc.error.debug_info.detail\":\"string\",\"grpc.error.debug_info.stack_entries\":\"string[]\",\"grpc.error.error_info.domain\":\"string\",\"grpc.error.error_info.metadata.<key>\":\"string\",\"grpc.error.error_info.reason\":\"string\",\"grpc.error.precondition_failure.violations\":\"string[]\",\"grpc.error.quota_failure.violations\":\"string[]\",\"grpc.error.resource_info.description\":\"string\",\"grpc.error.resource_info.owner\":\"string\",\"grpc.error.resource_info.resource_name\":\"string\",\"grpc.error.resource_info.resource_type\":\"string\",\"grpc.error.retry_info.retry_delay_ms\":\"integer\",hardwareConcurrency:\"string\",\"http.client_ip\":\"string\",\"http.decoded_response_content_length\":\"integer\",\"http.flavor\":\"string\",\"http.fragment\":\"string\",\"http.host\":\"string\",\"http.method\":\"string\",\"http.query\":\"string\",\"http.request.body.data\":\"string\",\"http.request.body.decoded_size\":\"integer\",\"http.request.body.size\":\"integer\",\"http.request.connection_end\":\"double\",\"http.request.connect_start\":\"double\",\"http.request_content_length\":\"integer\",\"http.request_content_length_uncompressed\":\"integer\",\"http.request.domain_lookup_end\":\"double\",\"http.request.domain_lookup_start\":\"double\",\"http.request.fetch_start\":\"double\",\"http.request.header.<key>\":\"string[]\",\"http.request.method\":\"string\",\"http.request_method\":\"string\",\"http.request.redirect_end\":\"double\",\"http.request.redirect_start\":\"double\",\"http.request.request_start\":\"double\",\"http.request.resend_count\":\"integer\",\"http.request.response_end\":\"double\",\"http.request.response_start\":\"double\",\"http.request.same_origin\":\"boolean\",\"http.request.secure_connection_start\":\"double\",\"http.request.time_to_first_byte\":\"double\",\"http.request.worker_start\":\"double\",\"http.response.body.decoded_size\":\"integer\",\"http.response.body.size\":\"integer\",\"http.response_content_length\":\"integer\",\"http.response_content_length_uncompressed\":\"integer\",\"http.response.header.content-length\":\"string\",\"http.response.header.<key>\":\"string[]\",\"http.response.size\":\"integer\",\"http.response.status_code\":\"integer\",\"http.response.status_text\":\"string\",\"http.response_transfer_size\":\"integer\",\"http.route\":\"string\",\"http.scheme\":\"string\",\"http.server_name\":\"string\",\"http.server.request.time_in_queue\":\"double\",\"http.status_code\":\"integer\",\"http.status_text\":\"string\",\"http.target\":\"string\",\"http.url\":\"string\",\"http.user_agent\":\"string\",id:\"string\",inp:\"double\",\"integrity.blocked_url\":\"string\",\"integrity.destination\":\"string\",\"integrity.document_url\":\"string\",\"integrity.report_only\":\"boolean\",\"jsonrpc.protocol.version\":\"string\",\"jsonrpc.request.id\":\"string\",\"jvm.gc.action\":\"string\",\"jvm.gc.name\":\"string\",\"jvm.memory.pool.name\":\"string\",\"jvm.memory.type\":\"string\",\"jvm.thread.daemon\":\"boolean\",\"jvm.thread.state\":\"string\",\"koa.name\":\"string\",\"koa.type\":\"string\",\"langchain.chain.name\":\"string\",lcp:\"double\",\"lcp.element\":\"string\",\"lcp.id\":\"string\",\"lcp.loadTime\":\"integer\",\"lcp.renderTime\":\"integer\",\"lcp.size\":\"integer\",\"lcp.url\":\"string\",\"litestar.middleware_name\":\"string\",\"logger.name\":\"string\",\"mcp.auth.client.name\":\"string\",\"mcp.cancelled.reason\":\"string\",\"mcp.cancelled.request_id\":\"string\",\"mcp.client.name\":\"string\",\"mcp.client.title\":\"string\",\"mcp.client.version\":\"string\",\"mcp.lifecycle.phase\":\"string\",\"mcp.logging.data_type\":\"string\",\"mcp.logging.level\":\"string\",\"mcp.logging.logger\":\"string\",\"mcp.logging.message\":\"string\",\"mcp.method.name\":\"string\",\"mcp.progress.current\":\"double\",\"mcp.progress.message\":\"string\",\"mcp.progress.percentage\":\"double\",\"mcp.progress.token\":\"string\",\"mcp.progress.total\":\"double\",\"mcp.prompt.name\":\"string\",\"mcp.prompt.result.description\":\"string\",\"mcp.prompt.result.<key>.content\":\"string\",\"mcp.prompt.result.<key>.role\":\"string\",\"mcp.prompt.result.message_content\":\"string\",\"mcp.prompt.result.message_count\":\"integer\",\"mcp.prompt.result.message_role\":\"string\",\"mcp.protocol.ready\":\"integer\",\"mcp.protocol.version\":\"string\",\"mcp.request.argument.<key>\":\"string\",\"mcp.request.argument.name\":\"string\",\"mcp.request.argument.uri\":\"string\",\"mcp.request.id\":\"string\",\"mcp.resource.protocol\":\"string\",\"mcp.resource.uri\":\"string\",\"mcp.server.name\":\"string\",\"mcp.server.title\":\"string\",\"mcp.server.version\":\"string\",\"mcp.session.id\":\"string\",\"mcp.tool.name\":\"string\",\"mcp.tool.result.content\":\"string\",\"mcp.tool.result.content_count\":\"integer\",\"mcp.tool.result.content_type\":\"string\",\"mcp.tool.result.data_size\":\"integer\",\"mcp.tool.result.is_error\":\"boolean\",\"mcp.tool.result.<key>.content\":\"string\",\"mcp.tool.result.<key>.content_type\":\"string\",\"mcp.tool.result.<key>.data_size\":\"integer\",\"mcp.tool.result.<key>.mime_type\":\"string\",\"mcp.tool.result.<key>.name\":\"string\",\"mcp.tool.result.<key>.resource_mime_type\":\"string\",\"mcp.tool.result.<key>.resource_uri\":\"string\",\"mcp.tool.result.<key>.uri\":\"string\",\"mcp.tool.result.mime_type\":\"string\",\"mcp.tool.result.name\":\"string\",\"mcp.tool.result.resource_mime_type\":\"string\",\"mcp.tool.result.resource_uri\":\"string\",\"mcp.tool.result.uri\":\"string\",\"mcp.transport\":\"string\",\"mdc.<key>\":\"string\",\"messaging.batch.message_count\":\"integer\",\"messaging.conversation_id\":\"string\",\"messaging.destination\":\"string\",\"messaging.destination.connection\":\"string\",\"messaging.destination_kind\":\"string\",\"messaging.destination.name\":\"string\",\"messaging.destination.partition.id\":\"string\",\"messaging.kafka.message.key\":\"string\",\"messaging.kafka.message.tombstone\":\"boolean\",\"messaging.kafka.offset\":\"integer\",\"messaging.message.body.size\":\"integer\",\"messaging.message.conversation_id\":\"string\",\"messaging.message.envelope.size\":\"integer\",\"messaging.message.id\":\"string\",\"messaging.message_id\":\"string\",\"messaging.message.receive.latency\":\"integer\",\"messaging.message.retry.count\":\"integer\",\"messaging.operation\":\"string\",\"messaging.operation.name\":\"string\",\"messaging.operation.type\":\"string\",\"messaging.protocol\":\"string\",\"messaging.protocol_version\":\"string\",\"messaging.rabbitmq.destination.routing_key\":\"string\",\"messaging.rabbitmq.routing_key\":\"string\",\"messaging.system\":\"string\",\"messaging.url\":\"string\",method:\"string\",\"middleware.name\":\"string\",\"navigation.origin\":\"string\",\"navigation.route.id\":\"string\",\"navigation.type\":\"string\",\"nel.elapsed_time\":\"integer\",\"nel.phase\":\"string\",\"nel.referrer\":\"string\",\"nel.sampling_fraction\":\"double\",\"nel.sampling_function\":\"double\",\"nel.type\":\"string\",\"network.connection.effective_type\":\"string\",\"network.connection.rtt\":\"integer\",\"network.connection.type\":\"string\",\"network.local.address\":\"string\",\"network.local.port\":\"integer\",\"network.peer.address\":\"string\",\"network.peer.port\":\"integer\",\"network.protocol.name\":\"string\",\"network.protocol.version\":\"string\",\"network.transport\":\"string\",\"network.type\":\"string\",\"net.host.ip\":\"string\",\"net.host.name\":\"string\",\"net.host.port\":\"integer\",\"net.peer.ip\":\"string\",\"net.peer.name\":\"string\",\"net.peer.port\":\"integer\",\"net.protocol.name\":\"string\",\"net.protocol.version\":\"string\",\"net.sock.family\":\"string\",\"net.sock.host.addr\":\"string\",\"net.sock.host.port\":\"integer\",\"net.sock.peer.addr\":\"string\",\"net.sock.peer.name\":\"string\",\"net.sock.peer.port\":\"integer\",\"net.transport\":\"string\",\"os.build\":\"string\",\"os.build_id\":\"string\",\"os.description\":\"string\",\"os.kernel_version\":\"string\",\"os.name\":\"string\",\"os.raw_description\":\"string\",\"os.rooted\":\"boolean\",\"os.theme\":\"string\",\"os.type\":\"string\",\"os.version\":\"string\",\"otel.kind\":\"string\",\"otel.scope.name\":\"string\",\"otel.scope.version\":\"string\",\"otel.status_code\":\"string\",\"otel.status_description\":\"string\",\"params.<key>\":\"string\",\"performance.activationStart\":\"double\",\"performance.timeOrigin\":\"double\",port:\"integer\",previous_route:\"string\",\"process.command_args\":\"string[]\",\"process.executable.name\":\"string\",\"process.pid\":\"integer\",\"process.runtime.description\":\"string\",\"process.runtime.engine.name\":\"string\",\"process.runtime.engine.version\":\"string\",\"process.runtime.name\":\"string\",\"process.runtime.version\":\"string\",profile_id:\"string\",query:\"string\",\"query.<key>\":\"string\",\"react_native.architecture\":\"string\",\"react_native.module.call.count\":\"integer\",\"react_native.module.call.distinct_count\":\"integer\",\"react_native.module.duration.max\":\"double\",\"react_native.module.duration.total\":\"double\",\"react_native.module.error.count\":\"integer\",\"react_native.module.kind\":\"string\",\"react_native.module.method\":\"string\",\"react_native.module.name\":\"string\",\"react_native.module.top.duration\":\"double\",\"react_native.module.top.name\":\"string\",\"react.version\":\"string\",\"redis.command\":\"string\",\"redis.key\":\"string\",release:\"string\",\"remix.action_form_data.<key>\":\"string\",replayId:\"string\",replay_id:\"string\",\"resource.deployment.environment\":\"string\",\"resource.deployment.environment.name\":\"string\",\"resource.render_blocking_status\":\"string\",route:\"string\",\"router.navigation.origin\":\"string\",\"router.navigation.route.id\":\"string\",\"router.navigation.type\":\"string\",\"rpc.grpc.status_code\":\"integer\",\"rpc.method\":\"string\",\"rpc.response.status_code\":\"string\",\"rpc.service\":\"string\",\"rpc.system\":\"string\",\"rpc.system.name\":\"string\",\"runtime.build\":\"string\",\"runtime.name\":\"string\",\"runtime.raw_description\":\"string\",\"runtime.version\":\"string\",\"score.<key>\":\"double\",\"score.ratio.<key>\":\"double\",\"score.total\":\"double\",\"score.weight.<key>\":\"double\",\"sentry.action\":\"string\",\"sentry.browser.name\":\"string\",\"sentry.browser.version\":\"string\",\"sentry.cancellation_reason\":\"string\",\"sentry.category\":\"string\",\"sentry.client_sample_rate\":\"double\",\"sentry.description\":\"string\",\"sentry.dist\":\"string\",\"sentry.domain\":\"string\",\"sentry.dsc.environment\":\"string\",\"sentry.dsc.project_id\":\"string\",\"sentry.dsc.public_key\":\"string\",\"sentry.dsc.release\":\"string\",\"sentry.dsc.sampled\":\"boolean\",\"sentry.dsc.sample_rate\":\"string\",\"sentry.dsc.trace_id\":\"string\",\"sentry.dsc.transaction\":\"string\",\"sentry.environment\":\"string\",\"sentry.event.serialized_breadcrumbs\":\"string\",\"sentry.event.serialized_contexts\":\"string\",\"sentry.event.serialized_extra\":\"string\",\"sentry.event.serialized_meta\":\"string\",\"sentry.exclusive_time\":\"double\",\"sentry.frames.frozen\":\"integer\",\"sentry.frames.slow\":\"integer\",\"sentry.frames.total\":\"integer\",\"sentry.graphql.operation\":\"string\",\"sentry.group\":\"string\",\"sentry.http.prefetch\":\"boolean\",\"sentry.idle_span_finish_reason\":\"string\",\"sentry.is_localhost\":\"boolean\",\"sentry.is_remote\":\"boolean\",\"sentry.kind\":\"string\",\"sentry.link.type\":\"string\",\"sentry.main_thread\":\"boolean\",\"sentry.message.parameter.<key>\":\"string\",\"sentry.message.template\":\"string\",\"sentry.metric.source\":\"string\",\"sentry.mobile\":\"boolean\",\"sentry.module.<key>\":\"string\",\"sentry.nextjs.ssr.function.route\":\"string\",\"sentry.nextjs.ssr.function.type\":\"string\",\"sentry.normalized_db_query\":\"string\",\"sentry.normalized_db_query.hash\":\"string\",\"sentry.normalized_description\":\"string\",\"sentry.observed_timestamp_nanos\":\"string\",\"sentry.op\":\"string\",\"sentry.origin\":\"string\",\"sentry.pageload.span_id\":\"string\",\"sentry.platform\":\"string\",\"sentry.profiler_id\":\"string\",\"sentry.profile_id\":\"string\",\"sentry.relay.ingress\":\"string\",\"sentry.relay.pipeline\":\"string\",\"sentry.release\":\"string\",\"sentry.replay_id\":\"string\",\"sentry.replay_is_buffering\":\"boolean\",\"sentry.report_event\":\"string\",\"sentry.sdk.integrations\":\"string[]\",\"sentry.sdk.name\":\"string\",\"sentry.sdk.version\":\"string\",\"sentry.segment.id\":\"string\",\"sentry.segment_id\":\"string\",\"sentry.segment.name\":\"string\",\"sentry.segment.name.source\":\"string\",\"sentry.server_sample_rate\":\"double\",\"sentry.source\":\"string\",\"sentry.span.source\":\"string\",\"sentry.status\":\"string\",\"sentry.status_code\":\"integer\",\"sentry.status.message\":\"string\",\"sentry.sveltekit.navigation.from\":\"string\",\"sentry.sveltekit.navigation.to\":\"string\",\"sentry.sveltekit.navigation.type\":\"string\",\"sentry.thread.id\":\"integer\",\"sentry.timestamp.sequence\":\"integer\",\"sentry.trace_lifecycle\":\"string\",\"sentry.trace.parent_span_id\":\"string\",\"sentry.trace.status\":\"string\",\"sentry.transaction\":\"string\",\"sentry.user.email\":\"string\",\"sentry.user.geo.city\":\"string\",\"sentry.user.geo.country_code\":\"string\",\"sentry.user.geo.region\":\"string\",\"sentry.user.geo.subdivision\":\"string\",\"sentry.user.id\":\"string\",\"sentry.user.ip\":\"string\",\"sentry.user.username\":\"string\",\"server.address\":\"string\",server_name:\"string\",\"server.port\":\"integer\",\"service.name\":\"string\",\"service.version\":\"string\",\"session.id\":\"string\",stall_percentage:\"double\",stall_total_time:\"double\",\"starlette.middleware_name\":\"string\",\"starlite.middleware_name\":\"string\",\"state.type\":\"string\",\"subprocess.pid\":\"integer\",\"sveltekit.load.environment\":\"string\",\"sveltekit.load.node_id\":\"string\",\"sveltekit.load.node_type\":\"string\",\"sveltekit.tracing.original_name\":\"string\",\"thread.id\":\"integer\",\"thread.name\":\"string\",\"timber.tag\":\"string\",time_to_full_display:\"double\",time_to_initial_display:\"double\",transaction:\"string\",\"trpc.procedure_path\":\"string\",\"trpc.procedure_type\":\"string\",ttfb:\"double\",\"ttfb.requestTime\":\"double\",\"turbo_modules.total_call_count\":\"integer\",\"turbo_modules.total_duration_ms\":\"double\",\"turbo_modules.total_error_count\":\"integer\",\"turbo_modules.unique_methods\":\"integer\",\"turbo_module.arch\":\"string\",\"turbo_module.method\":\"string\",\"turbo_module.name\":\"string\",\"turbo_module.top_module\":\"string\",\"turbo_module.top_module_duration_ms\":\"double\",\"turbo_module.total_call_count\":\"integer\",\"turbo_module.total_duration_ms\":\"double\",\"turbo_module.total_error_count\":\"integer\",\"turbo_module.unique_methods\":\"integer\",type:\"string\",\"ui.component_name\":\"string\",\"ui.contributes_to_ttfd\":\"boolean\",\"ui.contributes_to_ttid\":\"boolean\",\"ui.element.height\":\"integer\",\"ui.element.id\":\"string\",\"ui.element.identifier\":\"string\",\"ui.element.load_time\":\"double\",\"ui.element.paint_type\":\"string\",\"ui.element.render_time\":\"double\",\"ui.element.type\":\"string\",\"ui.element.url\":\"string\",\"ui.element.width\":\"integer\",url:\"string\",\"url.domain\":\"string\",\"url.fragment\":\"string\",\"url.full\":\"string\",\"url.path\":\"string\",\"url.path.parameter.<key>\":\"string\",\"url.path.params.<key>\":\"string\",\"url.port\":\"integer\",\"url.query\":\"string\",\"url.same_origin\":\"boolean\",\"url.scheme\":\"string\",\"url.template\":\"string\",\"user_agent.original\":\"string\",\"user.email\":\"string\",\"user.full_name\":\"string\",\"user.geo.city\":\"string\",\"user.geo.country_code\":\"string\",\"user.geo.region\":\"string\",\"user.geo.subdivision\":\"string\",\"user.hash\":\"string\",\"user.id\":\"string\",\"user.ip_address\":\"string\",\"user.name\":\"string\",\"user.roles\":\"string[]\",\"vercel.ai.telemetry.metadata.<key>\":\"string\",\"vercel.branch\":\"string\",\"vercel.build_id\":\"string\",\"vercel.deployment_id\":\"string\",\"vercel.destination\":\"string\",\"vercel.edge_type\":\"string\",\"vercel.entrypoint\":\"string\",\"vercel.execution_region\":\"string\",\"vercel.id\":\"string\",\"vercel.ja3_digest\":\"string\",\"vercel.ja4_digest\":\"string\",\"vercel.log_type\":\"string\",\"vercel.path\":\"string\",\"vercel.project_id\":\"string\",\"vercel.project_name\":\"string\",\"vercel.proxy.cache_id\":\"string\",\"vercel.proxy.client_ip\":\"string\",\"vercel.proxy.host\":\"string\",\"vercel.proxy.lambda_region\":\"string\",\"vercel.proxy.method\":\"string\",\"vercel.proxy.path\":\"string\",\"vercel.proxy.path_type\":\"string\",\"vercel.proxy.path_type_variant\":\"string\",\"vercel.proxy.referer\":\"string\",\"vercel.proxy.region\":\"string\",\"vercel.proxy.response_byte_size\":\"integer\",\"vercel.proxy.scheme\":\"string\",\"vercel.proxy.status_code\":\"integer\",\"vercel.proxy.timestamp\":\"integer\",\"vercel.proxy.user_agent\":\"string[]\",\"vercel.proxy.vercel_cache\":\"string\",\"vercel.proxy.vercel_id\":\"string\",\"vercel.proxy.waf_action\":\"string\",\"vercel.proxy.waf_rule_id\":\"string\",\"vercel.request_id\":\"string\",\"vercel.source\":\"string\",\"vercel.status_code\":\"integer\"},cy={address:{brief:\"The destination hostname or IP address for a TCP connection.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",examples:[\"example.com\"],deprecation:{replacement:\"server.address\",reason:\"Old namespace-less attribute, to be replaced with server.address for span-first future\",status:\"backfill\"},aliases:[\"server.address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address attribute\"}]},\"ai.citations\":{brief:\"References or sources cited by the AI model in its response.\",type:\"string[]\",keys:[\"ai.citations\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Citation 1\",\"Citation 2\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.completion_tokens.used\":{brief:\"The number of tokens used to respond to the message.\",type:\"integer\",keys:[\"gen_ai.usage.output_tokens\",\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:10,deprecation:{replacement:\"gen_ai.usage.output_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.output_tokens\",\"gen_ai.usage.completion_tokens\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61]},{version:\"0.0.0\"}]},\"ai.documents\":{brief:\"Documents or content chunks used as context for the AI model.\",type:\"string[]\",keys:[\"ai.documents\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"document1.txt\",\"document2.pdf\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.finish_reason\":{brief:\"The reason why the model stopped generating.\",type:\"string\",keys:[\"gen_ai.response.finish_reasons\",\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"COMPLETE\",deprecation:{replacement:\"gen_ai.response.finish_reasons\",status:\"backfill\"},aliases:[\"gen_ai.response.finish_reasons\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.frequency_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is applied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.\",type:\"double\",keys:[\"gen_ai.request.frequency_penalty\",\"ai.frequency_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"gen_ai.request.frequency_penalty\",status:\"backfill\"},aliases:[\"gen_ai.request.frequency_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.function_call\":{brief:\"For an AI model call, the function that was called. This is deprecated for OpenAI, and replaced by tool_calls\",type:\"string\",keys:[\"gen_ai.tool.name\",\"ai.function_call\",\"mcp.tool.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"function_name\",deprecation:{replacement:\"gen_ai.tool.name\",status:\"backfill\"},aliases:[\"gen_ai.tool.name\",\"mcp.tool.name\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.generation_id\":{brief:\"Unique identifier for the completion.\",type:\"string\",keys:[\"gen_ai.response.id\",\"ai.generation_id\",\"ai.response.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gen_123abc\",deprecation:{replacement:\"gen_ai.response.id\",status:\"backfill\"},aliases:[\"gen_ai.response.id\",\"ai.response.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.id as an alias\"},{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.input_messages\":{brief:\"The input messages sent to the model\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{replacement:\"gen_ai.input.messages\",status:\"backfill\"},aliases:[\"gen_ai.request.messages\"],changelog:[{version:\"0.1.0\",prs:[65,119]},{version:\"0.0.0\"}]},\"ai.is_search_required\":{brief:\"Boolean indicating if the model needs to perform a search.\",type:\"boolean\",keys:[\"ai.is_search_required\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.metadata\":{brief:\"Extra metadata passed to an AI pipeline step.\",type:\"string\",keys:[\"ai.metadata\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"user_id\": 123, \"session_id\": \"abc123\"}',deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.model.id\":{brief:\"The id of the model used by the Vercel AI SDK.\",type:\"string\",keys:[\"gen_ai.request.model\",\"ai.model.id\",\"ai.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gpt-4o\",examples:[\"gpt-4o\"],deprecation:{replacement:\"gen_ai.request.model\",reason:\"This attribute is being deprecated in favor of gen_ai.request.model.\",status:\"backfill\"},aliases:[\"gen_ai.request.model\",\"ai.model_id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.model.id attribute\"}]},\"ai.model_id\":{brief:\"The vendor-specific ID of the model used.\",type:\"string\",keys:[\"gen_ai.request.model\",\"ai.model.id\",\"ai.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gpt-4\",deprecation:{replacement:\"gen_ai.request.model\",status:\"backfill\"},aliases:[\"gen_ai.request.model\",\"ai.model.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.model.id as an alias\"},{version:\"0.1.0\",prs:[57,61,127]},{version:\"0.0.0\"}]},\"ai.model.provider\":{brief:\"The provider of the model.\",type:\"string\",keys:[\"gen_ai.provider.name\",\"ai.model.provider\",\"gen_ai.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"openai\",deprecation:{replacement:\"gen_ai.provider.name\",status:\"backfill\"},aliases:[\"gen_ai.provider.name\",\"gen_ai.system\"],changelog:[{version:\"0.4.0\",prs:[253]},{version:\"0.1.0\",prs:[57,61,108,127]}]},\"ai.pipeline.name\":{brief:\"The name of the AI pipeline.\",type:\"string\",keys:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\",\"langchain.chain.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Autofix Pipeline\",deprecation:{replacement:\"gen_ai.pipeline.name\",status:\"backfill\"},aliases:[\"gen_ai.pipeline.name\",\"langchain.chain.name\"],changelog:[{version:\"0.22.0\",prs:[599],description:\"Added langchain.chain.name as an alias\"},{version:\"0.1.0\",prs:[53,76,108,127]}]},\"ai.preamble\":{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.\",type:\"string\",keys:[\"gen_ai.system_instructions\",\"ai.preamble\",\"gen_ai.system.message\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"You are now a clown.\",deprecation:{replacement:\"gen_ai.system_instructions\",status:\"backfill\"},aliases:[\"gen_ai.system_instructions\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.presence_penalty\":{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.\",type:\"double\",keys:[\"gen_ai.request.presence_penalty\",\"ai.presence_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"gen_ai.request.presence_penalty\",status:\"backfill\"},aliases:[\"gen_ai.request.presence_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.prompt\":{brief:\"The prompt passed to the Vercel AI SDK, as a stringified object.\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"prompt\":\"What is the weather in Paris?\"}',examples:['{\"prompt\":\"What is the weather in Paris?\"}'],deprecation:{replacement:\"gen_ai.input.messages\",reason:\"This attribute is being deprecated in favor of gen_ai.input.messages.\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.texts\",\"ai.prompt.messages\",\"gen_ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt attribute\"}]},\"ai.prompt.messages\":{brief:\"The input messages sent to the AI model.\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{replacement:\"gen_ai.input.messages\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.texts\",\"gen_ai.prompt\",\"ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.19.0\",prs:[498],description:\"Added ai.prompt.messages attribute\"}]},\"ai.prompt_tokens.used\":{brief:\"The number of tokens used to process just the prompt.\",type:\"integer\",keys:[\"gen_ai.usage.input_tokens\",\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:20,deprecation:{replacement:\"gen_ai.usage.input_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.prompt_tokens\",\"gen_ai.usage.input_tokens\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61]},{version:\"0.0.0\"}]},\"ai.prompt.tools\":{brief:\"The tools made available to the model, as an array of stringified tool definitions.\",type:\"string[]\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:['{\"type\":\"function\",\"name\":\"get_weather\"}'],examples:[['{\"type\":\"function\",\"name\":\"get_weather\"}']],deprecation:{replacement:\"gen_ai.tool.definitions\",reason:\"This attribute is being deprecated in favor of gen_ai.tool.definitions.\",status:\"backfill\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt.tools attribute\"}]},\"ai.raw_prompting\":{brief:\"When enabled, the user\\u2019s prompt will be sent to the model without any pre-processing.\",type:\"boolean\",keys:[\"ai.raw_prompting\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.responses\":{brief:\"The response messages sent back by the AI model.\",type:\"string[]\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"hello\",\"world\"],deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},changelog:[{version:\"0.1.0\",prs:[65,127]},{version:\"0.0.0\"}]},\"ai.response_format\":{brief:\"For an AI model call, the format of the response\",type:\"string\",keys:[\"ai.response_format\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"json_object\",deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.response.id\":{brief:\"The id of the response returned by the model.\",type:\"string\",keys:[\"gen_ai.response.id\",\"ai.generation_id\",\"ai.response.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"chatcmpl-BuKJgVSKAMTUYbBSjHTMUuNGKzOPY\",examples:[\"chatcmpl-BuKJgVSKAMTUYbBSjHTMUuNGKzOPY\"],deprecation:{replacement:\"gen_ai.response.id\",reason:\"This attribute is being deprecated in favor of gen_ai.response.id.\",status:\"backfill\"},aliases:[\"gen_ai.response.id\",\"ai.generation_id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.id attribute\"}]},\"ai.response.model\":{brief:\"The id of the model that produced the response.\",type:\"string\",keys:[\"gen_ai.response.model\",\"ai.response.model\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gpt-4o-2024-08-06\",examples:[\"gpt-4o-2024-08-06\"],deprecation:{replacement:\"gen_ai.response.model\",reason:\"This attribute is being deprecated in favor of gen_ai.response.model.\",status:\"backfill\"},aliases:[\"gen_ai.response.model\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.model attribute\"}]},\"ai.response.object\":{brief:\"The type of the object returned by the model.\",type:\"string\",keys:[\"ai.response.object\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"chat.completion\",examples:[\"chat.completion\"],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the raw Vercel AI response object type.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.object attribute\"}]},\"ai.response.text\":{brief:\"The text response from the AI model.\",type:\"string\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"The weather in Paris is currently rainy.\",deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},aliases:[\"gen_ai.output.messages\",\"ai.response.toolCalls\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.response.text attribute\"}]},\"ai.response.timestamp\":{brief:\"The ISO 8601 timestamp at which the response was produced.\",type:\"string\",keys:[\"ai.response.timestamp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2026-02-19T15:32:11.000Z\",examples:[\"2026-02-19T15:32:11.000Z\"],deprecation:{reason:\"This attribute is deprecated. The span start and end timestamps carry the same information.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.timestamp attribute\"}]},\"ai.response.toolCalls\":{brief:\"The tool calls in the AI model response.\",type:\"string\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]',deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},aliases:[\"gen_ai.output.messages\",\"ai.response.text\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.response.toolCalls attribute\"}]},\"ai.schema\":{brief:\"The stringified JSON schema the model output must conform to.\",type:\"string\",keys:[\"ai.schema\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}',examples:['{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}'],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the requested output schema.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.schema attribute\"}]},\"ai.search_queries\":{brief:\"Queries used to search for relevant context or documents.\",type:\"string[]\",keys:[\"ai.search_queries\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"climate change effects\",\"renewable energy\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.search_results\":{brief:\"Results returned from search queries for context.\",type:\"string[]\",keys:[\"ai.search_results\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"search_result_1, search_result_2\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.seed\":{brief:\"The seed, ideally models given the same seed and same other parameters will produce the exact same output.\",type:\"string\",keys:[\"gen_ai.request.seed\",\"ai.seed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",deprecation:{replacement:\"gen_ai.request.seed\",status:\"backfill\"},aliases:[\"gen_ai.request.seed\"],changelog:[{version:\"0.1.0\",prs:[55,57,61,108,127]}]},\"ai.streaming\":{brief:\"Whether the request was streamed back.\",type:\"boolean\",keys:[\"gen_ai.response.streaming\",\"ai.streaming\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{replacement:\"gen_ai.response.streaming\",status:\"backfill\"},aliases:[\"gen_ai.response.streaming\"],changelog:[{version:\"0.1.0\",prs:[76,108]},{version:\"0.0.0\"}]},\"ai.tags\":{brief:\"Tags that describe an AI pipeline step.\",type:\"string\",keys:[\"ai.tags\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"executed_function\": \"add_integers\"}',deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55,127]}]},\"ai.temperature\":{brief:\"For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.\",type:\"double\",keys:[\"gen_ai.request.temperature\",\"ai.temperature\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.1,deprecation:{replacement:\"gen_ai.request.temperature\",status:\"backfill\"},aliases:[\"gen_ai.request.temperature\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.texts\":{brief:\"Raw text inputs provided to the model.\",type:\"string[]\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Hello, how are you?\",\"What is the capital of France?\"],deprecation:{replacement:\"gen_ai.input.messages\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.prompt.messages\",\"gen_ai.prompt\",\"ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"ai.toolCall.args\":{brief:\"The arguments of the tool call.\",type:\"string\",keys:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\",\"gen_ai.tool.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"location\": \"Paris\"}',deprecation:{replacement:\"gen_ai.tool.call.arguments\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.arguments\",\"gen_ai.tool.input\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.toolCall.args attribute\"}]},\"ai.toolCall.result\":{brief:\"The result of the tool call.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.output\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added ai.toolCall.result attribute\"}]},\"ai.tools\":{brief:\"For an AI model call, the functions that are available\",type:\"string[]\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"function_1\",\"function_2\"],deprecation:{replacement:\"gen_ai.tool.definitions\",status:\"backfill\"},changelog:[{version:\"0.1.0\",prs:[55,65,127]}]},\"ai.tool_calls\":{brief:\"For an AI model call, the tool calls that were made.\",type:\"string[]\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"tool_call_1\",\"tool_call_2\"],deprecation:{replacement:\"gen_ai.output.messages\",status:\"backfill\"},changelog:[{version:\"0.1.0\",prs:[55,65]}]},\"ai.top_k\":{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).\",type:\"integer\",keys:[\"gen_ai.request.top_k\",\"ai.top_k\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:35,deprecation:{replacement:\"gen_ai.request.top_k\",status:\"backfill\"},aliases:[\"gen_ai.request.top_k\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.top_p\":{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).\",type:\"double\",keys:[\"gen_ai.request.top_p\",\"ai.top_p\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.7,deprecation:{replacement:\"gen_ai.request.top_p\",status:\"backfill\"},aliases:[\"gen_ai.request.top_p\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[55,57,61,108]}]},\"ai.total_cost\":{brief:\"The total cost for the tokens used.\",type:\"double\",keys:[\"gen_ai.cost.total_tokens\",\"ai.total_cost\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,deprecation:{replacement:\"gen_ai.cost.total_tokens\",status:\"backfill\"},aliases:[\"gen_ai.cost.total_tokens\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[53]}],searchAlias:{name:\"ai.total_cost\",type:\"currency\"}},\"ai.total_tokens.used\":{brief:\"The total number of tokens used to process the prompt.\",type:\"integer\",keys:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\",\"ai.usage.tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:30,deprecation:{replacement:\"gen_ai.usage.total_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.total_tokens\",\"ai.usage.tokens\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.usage.tokens as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57,61,108]},{version:\"0.0.0\"}]},\"ai.usage.tokens\":{brief:\"The total number of tokens used for the request and the response.\",type:\"integer\",keys:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\",\"ai.usage.tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:150,examples:[150],deprecation:{replacement:\"gen_ai.usage.total_tokens\",reason:\"This attribute is being deprecated in favor of gen_ai.usage.total_tokens.\",status:\"backfill\"},aliases:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.usage.tokens attribute\"}]},\"ai.values\":{brief:\"The stringified values produced by a Vercel AI SDK object or array generation.\",type:\"string\",keys:[\"ai.values\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"city\":\"Paris\"}]',examples:['[{\"city\":\"Paris\"}]'],deprecation:{reason:\"This attribute is deprecated. Use gen_ai.output.messages for model output instead.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.values attribute\"}]},\"ai.warnings\":{brief:\"Warning messages generated during model execution.\",type:\"string[]\",keys:[\"ai.warnings\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"Token limit exceeded\"],deprecation:{},changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.1.0\",prs:[55]}]},\"angular.version\":{brief:\"The version of the Angular framework\",type:\"string\",keys:[\"angular.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"17.1.0\",changelog:[{version:\"0.7.0\",prs:[367],description:\"Added angular.version attribute\"}]},\"anthropic.tool_result.content\":{brief:\"The content of the tool result.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",examples:[\"rainy, 57\\xB0F\"],deprecation:{replacement:\"gen_ai.tool.call.result\",reason:\"Use gen_ai.tool.call.result for tool results.\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.output\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"ai.toolCall.result\"],changelog:[{version:\"0.26.0\",prs:[660],description:\"Added anthropic.tool_result.content attribute, deprecated in favor of gen_ai.tool.call.result\"}]},\"app.app_build\":{brief:\"Internal build identifier, as it appears on the platform.\",type:\"string\",keys:[\"app.build\",\"app.app_build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",deprecation:{replacement:\"app.build\",reason:\"Deprecated in favor of app.build\",status:\"backfill\"},aliases:[\"app.build\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_build in favor of app.build\"}]},\"app.app_identifier\":{brief:\"Version-independent application identifier, often a dotted bundle ID.\",type:\"string\",keys:[\"app.identifier\",\"app.app_identifier\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"com.example.myapp\",deprecation:{replacement:\"app.identifier\",reason:\"Deprecated in favor of app.identifier\",status:\"backfill\"},aliases:[\"app.identifier\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_identifier in favor of app.identifier\"}]},\"app.app_name\":{brief:\"Human readable application name, as it appears on the platform.\",type:\"string\",keys:[\"app.name\",\"app.app_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"My App\",deprecation:{replacement:\"app.name\",reason:\"Deprecated in favor of app.name\",status:\"backfill\"},aliases:[\"app.name\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_name in favor of app.name\"}]},\"app.app_start_time\":{brief:\"Formatted UTC timestamp when the user started the application.\",type:\"string\",keys:[\"app.start_time\",\"app.app_start_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2025-01-01T00:00:00.000Z\",deprecation:{replacement:\"app.start_time\",reason:\"Deprecated in favor of app.start_time\",status:\"backfill\"},aliases:[\"app.start_time\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_start_time in favor of app.start_time\"}]},\"app.app_version\":{brief:\"Human readable application version, as it appears on the platform.\",type:\"string\",keys:[\"app.version\",\"app.app_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",deprecation:{replacement:\"app.version\",reason:\"Deprecated in favor of app.version\",status:\"backfill\"},aliases:[\"app.version\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added and deprecated app.app_version in favor of app.version\"}]},\"app.build\":{brief:\"Internal build identifier, as it appears on the platform.\",type:\"string\",keys:[\"app.build\",\"app.app_build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",aliases:[\"app.app_build\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.build attribute\"}]},\"app.identifier\":{brief:\"Version-independent application identifier, often a dotted bundle ID.\",type:\"string\",keys:[\"app.identifier\",\"app.app_identifier\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"com.example.myapp\",aliases:[\"app.app_identifier\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.identifier attribute\"}]},\"app.in_foreground\":{brief:\"Whether the application is currently in the foreground.\",type:\"boolean\",keys:[\"app.in_foreground\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.in_foreground attribute\"}]},\"app.name\":{brief:\"Human readable application name, as it appears on the platform.\",type:\"string\",keys:[\"app.name\",\"app.app_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"My App\",aliases:[\"app.app_name\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.name attribute\"}]},app_start_cold:{brief:\"The duration of a cold app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.cold.value\",\"app_start_cold\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.start.cold.value\",reason:\"Replaced by app.vitals.start.cold.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.start.cold.value\"],changelog:[{version:\"0.5.0\",prs:[323],description:\"Added and deprecated in favor of app.vitals.start.cold.value\"}]},\"app.start_time\":{brief:\"Formatted UTC timestamp when the user started the application.\",type:\"string\",keys:[\"app.start_time\",\"app.app_start_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2025-01-01T00:00:00.000Z\",aliases:[\"app.app_start_time\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.start_time attribute\"}]},app_start_type:{brief:\"Mobile app start variant. Either cold or warm.\",type:\"string\",keys:[\"app.vitals.start.type\",\"app_start_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cold\",deprecation:{replacement:\"app.vitals.start.type\",reason:\"Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.start.type\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.start.type\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},app_start_warm:{brief:\"The duration of a warm app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.warm.value\",\"app_start_warm\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.start.warm.value\",reason:\"Replaced by app.vitals.start.warm.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.start.warm.value\"],changelog:[{version:\"0.5.0\",prs:[323],description:\"Added and deprecated in favor of app.vitals.start.warm.value\"}]},\"app.version\":{brief:\"Human readable application version, as it appears on the platform.\",type:\"string\",keys:[\"app.version\",\"app.app_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",aliases:[\"app.app_version\"],changelog:[{version:\"0.5.0\",prs:[296],description:\"Added app.version attribute\"}]},\"app.vitals.frames.delay.value\":{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/).\",type:\"integer\",keys:[\"app.vitals.frames.delay.value\",\"frames.delay\",\"mobile.frames_delay\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,aliases:[\"frames.delay\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.delay.value to replace frames.delay\"}]},\"app.vitals.frames.frozen.count\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.frozen.count\",\"frames.frozen\",\"mobile.frozen_frames\",\"sentry.frames.frozen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,aliases:[\"frames.frozen\",\"sentry.frames.frozen\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.frozen as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.frozen.count to replace frames.frozen\"}]},\"app.vitals.frames.frozen.rate\":{brief:\"The fraction of rendered frames that were frozen, calculated as `app.vitals.frames.frozen.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.frozen.rate\",\"frames_frozen_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,aliases:[\"frames_frozen_rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.frames.frozen.rate attribute\"}]},\"app.vitals.frames.slow.count\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.slow.count\",\"frames.slow\",\"mobile.slow_frames\",\"sentry.frames.slow\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,aliases:[\"frames.slow\",\"sentry.frames.slow\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.slow as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.slow.count to replace frames.slow\"}]},\"app.vitals.frames.slow.rate\":{brief:\"The fraction of rendered frames that were slow, calculated as `app.vitals.frames.slow.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.slow.rate\",\"frames_slow_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.25,aliases:[\"frames_slow_rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.frames.slow.rate attribute\"}]},\"app.vitals.frames.total.count\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.total.count\",\"frames.total\",\"mobile.total_frames\",\"sentry.frames.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,aliases:[\"frames.total\",\"sentry.frames.total\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.total as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.frames.total.count to replace frames.total\"}]},\"app.vitals.stall.duration\":{brief:\"The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.duration\",\"stall_total_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:4e3,aliases:[\"stall_total_time\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.stall.duration attribute\"}]},\"app.vitals.stall.percentage\":{brief:\"The fraction of transaction duration during which the app was stalled, between 0.0 and 1.0. For example, 0.8 represents 80%. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.percentage\",\"stall_percentage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.8,aliases:[\"stall_percentage\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Added app.vitals.stall.percentage attribute\"}]},\"app.vitals.start.cold.value\":{brief:\"The duration of a cold app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.cold.value\",\"app_start_cold\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"app_start_cold\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.cold.value attribute\"}]},\"app.vitals.start.prewarmed\":{brief:\"Whether the app start was prewarmed.\",type:\"boolean\",keys:[\"app.vitals.start.prewarmed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.11.0\",prs:[379],description:\"Added app.vitals.start.prewarmed attribute\"}]},\"app.vitals.start.reason\":{brief:\"The reason that triggered the app start.\",type:\"string\",keys:[\"app.vitals.start.reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"push\",changelog:[{version:\"0.7.0\",prs:[353],description:\"Added app.vitals.start.reason attribute\"}]},\"app.vitals.start.screen\":{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.\",type:\"string\",keys:[\"app.vitals.start.screen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MainActivity\",changelog:[{version:\"0.7.0\",prs:[353],description:\"Added app.vitals.start.screen attribute\"}]},\"app.vitals.start.type\":{brief:\"The type of app start, for example `cold` or `warm`\",type:\"string\",keys:[\"app.vitals.start.type\",\"app_start_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cold\",aliases:[\"app_start_type\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.type attribute\"}]},\"app.vitals.start.warm.value\":{brief:\"The duration of a warm app start in milliseconds\",type:\"double\",keys:[\"app.vitals.start.warm.value\",\"app_start_warm\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"app_start_warm\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.start.warm.value attribute\"}]},\"app.vitals.ttfd.value\":{brief:\"The duration of time to full display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttfd.value\",\"time_to_full_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"time_to_full_display\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.ttfd.value attribute\"}]},\"app.vitals.ttid.value\":{brief:\"The duration of time to initial display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttid.value\",\"time_to_initial_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,aliases:[\"time_to_initial_display\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added app.vitals.ttid.value attribute\"}]},\"art.gc.blocking_count\":{brief:\"Total number of blocking (stop-the-world) garbage collections performed by the Android Runtime\",type:\"integer\",keys:[\"art.gc.blocking_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.blocking_count attribute\"}]},\"art.gc.blocking_time\":{brief:\"Total time spent in blocking (stop-the-world) garbage collections by the Android Runtime, in milliseconds\",type:\"double\",keys:[\"art.gc.blocking_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:11.873,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.blocking_time attribute\"}]},\"art.gc.pre_oome_count\":{brief:\"Total number of garbage collections triggered as a last resort before an OutOfMemoryError by the Android Runtime\",type:\"integer\",keys:[\"art.gc.pre_oome_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:0,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.pre_oome_count attribute\"}]},\"art.gc.total_count\":{brief:\"Total number of garbage collections performed by the Android Runtime\",type:\"integer\",keys:[\"art.gc.total_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.total_count attribute\"}]},\"art.gc.total_time\":{brief:\"Total time spent in garbage collection by the Android Runtime, in milliseconds\",type:\"double\",keys:[\"art.gc.total_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:11.807,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.total_time attribute\"}]},\"art.gc.waiting_time\":{brief:\"Total time threads spent waiting for garbage collection to complete in the Android Runtime, in milliseconds\",type:\"double\",keys:[\"art.gc.waiting_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8.054,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.gc.waiting_time attribute\"}]},\"art.memory.free\":{brief:\"Free memory available to the process as reported by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.free\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3181568,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free attribute\"}]},\"art.memory.free_until_gc\":{brief:\"Free memory available before a garbage collection would be triggered by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.free_until_gc\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3181568,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free_until_gc attribute\"}]},\"art.memory.free_until_oome\":{brief:\"Free memory available before an OutOfMemoryError would be thrown by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.free_until_oome\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:196083712,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.free_until_oome attribute\"}]},\"art.memory.max\":{brief:\"Maximum memory the process is allowed to use as reported by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.max\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:201326592,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.max attribute\"}]},\"art.memory.total\":{brief:\"Total memory currently allocated to the process by the Android Runtime, in bytes\",type:\"integer\",keys:[\"art.memory.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7774208,changelog:[{version:\"0.11.0\",prs:[382],description:\"Added art.memory.total attribute\"}]},\"aws.cloudwatch.logs.log_group\":{brief:\"The name of the CloudWatch Logs log group\",type:\"string\",keys:[\"aws.cloudwatch.logs.log_group\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/aws/lambda/my-function\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.log_group attribute\"}]},\"aws.cloudwatch.logs.log_stream\":{brief:\"The name of the CloudWatch Logs log stream\",type:\"string\",keys:[\"aws.cloudwatch.logs.log_stream\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024/01/01/[$LATEST]abcdef1234567890\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.log_stream attribute\"}]},\"aws.cloudwatch.logs.url\":{brief:\"The URL to the CloudWatch Logs log group\",type:\"string\",keys:[\"aws.cloudwatch.logs.url\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/my-log-group\",changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.cloudwatch.logs.url attribute\"}]},\"aws.dynamodb.attributes_to_get\":{brief:\"The value of the `AttributesToGet` request parameter.\",type:\"string[]\",keys:[\"aws.dynamodb.attributes_to_get\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"lives\",\"id\"],examples:[[\"lives\",\"id\"]],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.dynamodb.attributes_to_get attribute\"}]},\"aws.dynamodb.attribute_definitions\":{brief:\"The JSON-serialized value of each item in the `AttributeDefinitions` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.attribute_definitions\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.attribute_definitions attribute\"}]},\"aws.dynamodb.consistent_read\":{brief:\"The value of the `ConsistentRead` request parameter.\",type:\"boolean\",keys:[\"aws.dynamodb.consistent_read\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.consistent_read attribute\"}]},\"aws.dynamodb.consumed_capacity\":{brief:\"The JSON-serialized value of each item in the `ConsumedCapacity` response field.\",type:\"string[]\",keys:[\"aws.dynamodb.consumed_capacity\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"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 }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.consumed_capacity attribute\"}]},\"aws.dynamodb.count\":{brief:\"The value of the `Count` response parameter.\",type:\"integer\",keys:[\"aws.dynamodb.count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.count attribute\"}]},\"aws.dynamodb.exclusive_start_table\":{brief:\"The value of the `ExclusiveStartTableName` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.exclusive_start_table\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Users\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.exclusive_start_table attribute\"}]},\"aws.dynamodb.global_secondary_indexes\":{brief:\"The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.global_secondary_indexes\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.global_secondary_indexes attribute\"}]},\"aws.dynamodb.global_secondary_index_updates\":{brief:\"The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.global_secondary_index_updates\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.global_secondary_index_updates attribute\"}]},\"aws.dynamodb.index_name\":{brief:\"The value of the `IndexName` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.index_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"name_to_group\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.index_name attribute\"}]},\"aws.dynamodb.item_collection_metrics\":{brief:\"The JSON-serialized value of the `ItemCollectionMetrics` response field.\",type:\"string\",keys:[\"aws.dynamodb.item_collection_metrics\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",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 ] } ] }',changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.item_collection_metrics attribute\"}]},\"aws.dynamodb.limit\":{brief:\"The value of the `Limit` request parameter.\",type:\"integer\",keys:[\"aws.dynamodb.limit\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.limit attribute\"}]},\"aws.dynamodb.local_secondary_indexes\":{brief:\"The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.\",type:\"string[]\",keys:[\"aws.dynamodb.local_secondary_indexes\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:['{ \"IndexArn\": \"string\", \"IndexName\": \"string\", \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }'],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.local_secondary_indexes attribute\"}]},\"aws.dynamodb.projection\":{brief:\"The value of the `ProjectionExpression` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.projection\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Title, Price, Color\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.projection attribute\"}]},\"aws.dynamodb.provisioned_read_capacity\":{brief:\"The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.\",type:\"double\",keys:[\"aws.dynamodb.provisioned_read_capacity\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.provisioned_read_capacity attribute\"}]},\"aws.dynamodb.provisioned_write_capacity\":{brief:\"The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.\",type:\"double\",keys:[\"aws.dynamodb.provisioned_write_capacity\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.provisioned_write_capacity attribute\"}]},\"aws.dynamodb.scanned_count\":{brief:\"The value of the `ScannedCount` response parameter.\",type:\"integer\",keys:[\"aws.dynamodb.scanned_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:50,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.scanned_count attribute\"}]},\"aws.dynamodb.scan_forward\":{brief:\"The value of the `ScanIndexForward` request parameter.\",type:\"boolean\",keys:[\"aws.dynamodb.scan_forward\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.scan_forward attribute\"}]},\"aws.dynamodb.segment\":{brief:\"The value of the `Segment` request parameter.\",type:\"integer\",keys:[\"aws.dynamodb.segment\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.segment attribute\"}]},\"aws.dynamodb.select\":{brief:\"The value of the `Select` request parameter.\",type:\"string\",keys:[\"aws.dynamodb.select\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ALL_ATTRIBUTES\",changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.select attribute\"}]},\"aws.dynamodb.table_count\":{brief:\"The number of items in the `TableNames` response parameter.\",type:\"integer\",keys:[\"aws.dynamodb.table_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:20,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.table_count attribute\"}]},\"aws.dynamodb.table_names\":{brief:\"The keys in the `RequestItems` object field.\",type:\"string[]\",keys:[\"aws.dynamodb.table_names\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"Users\",\"Cats\"],changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.table_names attribute\"}]},\"aws.dynamodb.total_segments\":{brief:\"The value of the `TotalSegments` request parameter.\",type:\"integer\",keys:[\"aws.dynamodb.total_segments\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:100,changelog:[{version:\"0.16.0\",prs:[479],description:\"Added aws.dynamodb.total_segments attribute\"}]},\"aws.extended_request_id\":{brief:\"The AWS extended request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.extended_request_id\",\"aws.request.extended_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\",aliases:[\"aws.request.extended_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.extended_request_id attribute\"}]},\"aws.kinesis.stream_name\":{brief:\"The name of the AWS Kinesis stream the request refers to.\",type:\"string\",keys:[\"aws.kinesis.stream_name\",\"aws.kinesis.stream.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"some-stream-name\",aliases:[\"aws.kinesis.stream.name\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.kinesis.stream_name attribute\"}]},\"aws.kinesis.stream.name\":{brief:\"The name of the AWS Kinesis stream the request refers to.\",type:\"string\",keys:[\"aws.kinesis.stream_name\",\"aws.kinesis.stream.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"some-stream-name\",deprecation:{replacement:\"aws.kinesis.stream_name\",reason:\"This attribute is being deprecated in favor of aws.kinesis.stream_name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"aws.kinesis.stream_name\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.kinesis.stream.name attribute, deprecated in favor of aws.kinesis.stream_name\"}]},\"aws.lambda.aws_request_id\":{brief:\"The AWS request ID as received by the Lambda function runtime\",type:\"string\",keys:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\",\"faas.execution\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"8476a536-e9f4-11e8-9739-2dfe598c3fcd\",deprecation:{replacement:\"faas.invocation_id\",reason:\"This attribute is being deprecated in favor of faas.invocation_id\",status:\"backfill\"},aliases:[\"faas.invocation_id\",\"faas.execution\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution as an alias\"},{version:\"0.11.1\",prs:[414,424],description:\"Deprecated aws.lambda.aws_request_id in favor of faas.invocation_id\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.aws_request_id attribute\"}]},\"aws.lambda.execution_duration_in_millis\":{brief:\"The execution duration of the Lambda function invocation in milliseconds\",type:\"double\",keys:[\"aws.lambda.execution_duration_in_millis\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.execution_duration_in_millis attribute\"}]},\"aws.lambda.function_name\":{brief:\"The name of the Lambda function\",type:\"string\",keys:[\"faas.name\",\"aws.lambda.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-function\",deprecation:{replacement:\"faas.name\",reason:\"Use the OTel-aligned faas.name attribute instead\",status:\"backfill\"},aliases:[\"faas.name\"],changelog:[{version:\"0.11.1\",prs:[414],description:\"Deprecated aws.lambda.function_name in favor of faas.name\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.function_name attribute\"}]},\"aws.lambda.function_version\":{brief:\"The version of the Lambda function\",type:\"string\",keys:[\"faas.version\",\"aws.lambda.function_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"$LATEST\",deprecation:{replacement:\"faas.version\",reason:\"Use the OTel-aligned faas.version attribute instead\",status:\"backfill\"},aliases:[\"faas.version\"],changelog:[{version:\"0.11.1\",prs:[414,424],description:\"Deprecated aws.lambda.function_version in favor of faas.version\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.function_version attribute\"}]},\"aws.lambda.invoked_arn\":{brief:\"The full ARN of the Lambda function that was invoked\",type:\"string\",keys:[\"aws.lambda.invoked_arn\",\"aws.lambda.invoked_function_arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",aliases:[\"aws.lambda.invoked_function_arn\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.lambda.invoked_function_arn\":{brief:\"The full ARN of the Lambda function that was invoked\",type:\"string\",keys:[\"aws.lambda.invoked_arn\",\"aws.lambda.invoked_function_arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",deprecation:{replacement:\"aws.lambda.invoked_arn\",reason:\"This attribute is being deprecated in favor of aws.lambda.invoked_arn\",status:\"backfill\"},aliases:[\"aws.lambda.invoked_arn\"],changelog:[{version:\"0.11.1\",prs:[414],description:\"Deprecated aws.lambda.invoked_function_arn in favor of aws.lambda.invoked_arn\"},{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.invoked_function_arn attribute\"}]},\"aws.lambda.remaining_time_in_millis\":{brief:\"The remaining time in milliseconds before the Lambda function times out\",type:\"double\",keys:[\"aws.lambda.remaining_time_in_millis\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5e3,changelog:[{version:\"0.7.0\",prs:[369],description:\"Added aws.lambda.remaining_time_in_millis attribute\"}]},\"aws.log.group.names\":{brief:\"The name(s) of the AWS log group(s) an application is writing to.\",type:\"string[]\",keys:[\"aws.log.group.names\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"/aws/lambda/my-function\",\"opentelemetry-service\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.log.stream.names\":{brief:\"The name(s) of the AWS log stream(s) an application is writing to.\",type:\"string[]\",keys:[\"aws.log.stream.names\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"logs/main/10838bed-421f-43ef-870a-f43feacbbb5b\"],changelog:[{version:\"0.11.1\",prs:[414]}]},\"aws.operation_name\":{brief:\"The name of the API operation invoked on an AWS service.\",type:\"string\",keys:[\"rpc.method\",\"aws.operation_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"PutObject\",examples:[\"PutObject\"],deprecation:{replacement:\"rpc.method\",reason:\"This attribute is being deprecated in favor of rpc.method, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"rpc.method\"],changelog:[{version:\"0.19.0\",prs:[536],description:\"Added aws.operation_name attribute\"}]},aws_region:{brief:\"The geographical region the AWS resource is running\",type:\"string\",keys:[\"cloud.region\",\"aws_region\",\"gcp_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"us-east-1\",examples:[\"us-east-1\"],deprecation:{replacement:\"cloud.region\",status:\"backfill\"},aliases:[\"cloud.region\",\"gcp_region\"],changelog:[{version:\"0.19.0\",prs:[537],description:\"Added aws_region attribute\"}]},\"aws.request.extended_id\":{brief:\"The AWS extended request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.extended_request_id\",\"aws.request.extended_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\",deprecation:{replacement:\"aws.extended_request_id\",reason:\"This attribute is being deprecated in favor of aws.extended_request_id, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"aws.extended_request_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request.extended_id attribute, deprecated in favor of aws.extended_request_id\"}]},\"aws.request_id\":{brief:\"The AWS request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.request_id\",\"aws.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"79b9da39-b7ae-508a-a6bc-864b2829c622\",aliases:[\"aws.request.id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request_id attribute\"}]},\"aws.request.id\":{brief:\"The AWS request ID as returned in the response headers.\",type:\"string\",keys:[\"aws.request_id\",\"aws.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"79b9da39-b7ae-508a-a6bc-864b2829c622\",deprecation:{replacement:\"aws.request_id\",reason:\"This attribute is being deprecated in favor of aws.request_id, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"aws.request_id\"],changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.request.id attribute, deprecated in favor of aws.request_id\"}]},\"aws.request.url\":{brief:\"The URL of the AWS API request.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://sqs.us-east-1.amazonaws.com/123456789/my-queue\",deprecation:{replacement:\"url.full\",reason:\"This attribute is being deprecated in favor of url.full, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"url.full\",\"http.url\",\"url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.19.0\",prs:[488],description:\"Added aws.request.url attribute, deprecated in favor of url.full\"}]},\"aws.s3.bucket\":{brief:\"The S3 bucket name the request refers to.\",type:\"string\",keys:[\"aws.s3.bucket\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ot-demo-test\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.s3.bucket attribute\"}]},\"aws.s3.copy_source\":{brief:\"The source object (in the form bucket/key) for the copy operation.\",type:\"string\",keys:[\"aws.s3.copy_source\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"someFile.yml\",examples:[\"someFile.yml\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.copy_source attribute\"}],additionalContext:[\"Applicable to the copy-object and upload-part-copy operations, corresponding to the CopySource parameter.\"]},\"aws.s3.delete\":{brief:\"The delete request container that specifies the objects to be deleted.\",type:\"string\",keys:[\"aws.s3.delete\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean\",examples:[\"Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.delete attribute\"}],additionalContext:[\"Applicable only to the delete-objects operation, corresponding to its Delete parameter.\"]},\"aws.s3.key\":{brief:\"The S3 object key the request refers to. Corresponds to the --key parameter of the S3 API operations.\",type:\"string\",keys:[\"aws.s3.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"someFile.yml\",examples:[\"someFile.yml\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.key attribute\"}]},\"aws.s3.part_number\":{brief:\"The part number of the part being uploaded in a multipart-upload operation. This is a positive integer between 1 and 10,000.\",type:\"integer\",keys:[\"aws.s3.part_number\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:3456,examples:[3456],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.part_number attribute\"}],additionalContext:[\"Applicable only to the upload-part and upload-part-copy operations.\"]},\"aws.s3.upload_id\":{brief:\"Upload ID that identifies the multipart upload.\",type:\"string\",keys:[\"aws.s3.upload_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ\",examples:[\"dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.s3.upload_id attribute\"}]},\"aws.secretsmanager.secret.arn\":{brief:\"The ARN of the Secret stored in Secrets Manager.\",type:\"string\",keys:[\"aws.secretsmanager.secret.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.secretsmanager.secret.arn attribute\"}]},\"aws.sns.topic.arn\":{brief:\"The ARN of the AWS SNS Topic. An Amazon SNS topic is a logical access point that acts as a communication channel.\",type:\"string\",keys:[\"aws.sns.topic.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.sns.topic.arn attribute\"}]},\"aws.sqs.queue.url\":{brief:\"The URL of the AWS SQS Queue. It\\u2019s a unique identifier for a queue in Amazon Simple Queue Service (SQS) and is used to access the queue and perform actions on it.\",type:\"string\",keys:[\"aws.sqs.queue.url\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue\",examples:[\"https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.sqs.queue.url attribute\"}]},\"aws.step_functions.activity.arn\":{brief:\"The ARN of the AWS Step Functions Activity.\",type:\"string\",keys:[\"aws.step_functions.activity.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:activity:get-greeting\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.step_functions.activity.arn attribute\"}]},\"aws.step_functions.execution.arn\":{brief:\"The ARN of the AWS Step Functions Execution.\",type:\"string\",keys:[\"aws.step_functions.execution.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:execution:myStateMachine:myExecution\",examples:[\"arn:aws:states:us-east-1:123456789012:execution:myStateMachine:myExecution\"],changelog:[{version:\"0.27.0\",prs:[672],description:\"Added aws.step_functions.execution.arn attribute\"}]},\"aws.step_functions.state_machine.arn\":{brief:\"The ARN of the AWS Step Functions State Machine.\",type:\"string\",keys:[\"aws.step_functions.state_machine.arn\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1\",changelog:[{version:\"0.16.0\",prs:[480],description:\"Added aws.step_functions.state_machine.arn attribute\"}]},blocked_main_thread:{brief:\"Whether the main thread was blocked by the span.\",type:\"boolean\",keys:[\"blocked_main_thread\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"browser.bfcache.frame\":{brief:\"Which frame in the page's frame tree a back/forward cache not-restored reason originated from: the top document or a child frame.\",type:\"string\",keys:[\"browser.bfcache.frame\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"top\",examples:[\"top\",\"child\"],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.frame attribute\"}]},\"browser.bfcache.not_restored_reason_count\":{brief:\"The number of reported reasons a page was not restored from the back/forward cache on a back/forward navigation. 0 when the browser reported no reasons (e.g. non-Chromium browsers).\",type:\"integer\",keys:[\"browser.bfcache.not_restored_reason_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.not_restored_reason_count attribute\"}]},\"browser.bfcache.outcome\":{brief:\"Whether a back/forward navigation was restored from the browser's back/forward cache (bfcache). 'hit' means the page was restored; 'miss' means it was reloaded.\",type:\"string\",keys:[\"browser.bfcache.outcome\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"hit\",examples:[\"hit\",\"miss\"],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.outcome attribute\"}]},\"browser.bfcache.reason\":{brief:\"A browser-reported reason a page was not restored from the back/forward cache on a back/forward navigation, taken from the notRestoredReasons API. Reported per reason (a single miss can have several). Currently Chromium-only.\",type:\"string\",keys:[\"browser.bfcache.reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"unload-listener\",examples:[\"unload-listener\",\"websocket\",\"idbversionchangeevent\",\"response-cache-control-no-store\"],changelog:[{version:\"0.19.0\",prs:[513],description:\"Added browser.bfcache.reason attribute\"}]},\"browser.name\":{brief:\"The name of the browser.\",type:\"string\",keys:[\"browser.name\",\"sentry.browser.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Chrome\",aliases:[\"sentry.browser.name\"],changelog:[{version:\"0.1.0\",prs:[127,139]},{version:\"0.0.0\"}]},\"browser.navigation.id\":{brief:\"The identifier of the navigation the measurement belongs to, incremented by the browser for each navigation within a page's lifetime.\",type:\"integer\",keys:[\"browser.navigation.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,examples:[1,3,0],changelog:[{version:\"0.24.0\",prs:[640],description:\"Document 0 as the fallback value when the browser does not support `navigationId`\"},{version:\"0.22.0\",prs:[634],description:\"Added browser.navigation.id attribute\"}],additionalContext:[\"Sourced from `PerformanceEntry.navigationId`, defined by the Soft Navigations spec. Despite its origin it is not soft-navigation specific: the field is set on the `PerformanceNavigationTiming` entry of a hard navigation too.\",\"The value starts at 1 for the initial page load and increments for each subsequent navigation. It is only unique within a single page lifetime, not globally.\",\"A value of 0 is a fallback rather than a real navigation id: web-vitals reports 0 when the browser does not expose `PerformanceEntry.navigationId`, so 0 means the id is unknown.\",\"Pairs with `browser.navigation.type`: the type says how the browser arrived at the page, the id says which navigation of that page a measurement belongs to.\",\"Not to be confused with the Navigation API's `NavigationHistoryEntry.id`, which is an opaque string identifying a history entry rather than a counter, and is not interchangeable with this value.\",\"Also distinct from the `router.navigation.*` attributes, which describe the client-side router's own view of a navigation. Those come from the framework, this one comes from the browser, and both can be set on the same span.\"]},\"browser.navigation.type\":{brief:\"The type of navigation the browser performed to arrive at the page the metrics were measured on.\",type:\"string\",keys:[\"browser.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"navigate\",examples:[\"navigate\",\"reload\",\"back-forward\",\"back-forward-cache\",\"prerender\",\"restore\",\"soft-navigation\"],changelog:[{version:\"0.24.0\",prs:[640],description:\"Use the web-vitals navigation types as-is: `bfcache` is now `back-forward-cache`, and `back-forward` and `restore` are no longer reported as `navigate`\"},{version:\"0.22.0\",prs:[600],description:\"Added browser.navigation.type attribute\"}],additionalContext:[\"Carries the `navigationType` value reported by the web-vitals library verbatim. web-vitals hyphenates the Navigation Timing `PerformanceNavigationTiming.type` value (`back_forward` becomes `back-forward`) and adds states that API does not cover: `back-forward-cache` for a restore from the back/forward cache, `prerender`, `restore` for a discarded tab being reloaded, and `soft-navigation`.\",\"`back-forward-cache` is only set when the page was actually restored from the back/forward cache. A back/forward navigation that missed the cache is a full document load and reports `back-forward`. Use the `browser.bfcache.*` attributes to diagnose misses.\",\"`prerender` pages finish painting before activation, so their paint timings are offset by `browser.performance.navigation.activation_start`. Keep them separate when aggregating web vitals.\",\"Not to be confused with `router.navigation.type`, which holds the client-side router's own vocabulary (`link`, `goto`, `router.push`). The two are independent and can both be set on the same span.\"]},\"browser.paint.type\":{brief:\"The type of paint timing entry reported by the browser.\",type:\"string\",keys:[\"browser.paint.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"first-paint\",examples:[\"first-paint\",\"first-contentful-paint\"],changelog:[{version:\"0.22.0\",prs:[606],description:\"Added browser.paint.type attribute\"}]},\"browser.performance.navigation.activation_start\":{brief:\"The time between initiating a navigation to a page and the browser activating the page\",type:\"double\",keys:[\"browser.performance.navigation.activation_start\",\"performance.activationStart\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.983,aliases:[\"performance.activationStart\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added browser.performance.navigation.activation_start attribute\"}]},\"browser.performance.time_origin\":{brief:\"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",type:\"double\",keys:[\"browser.performance.time_origin\",\"performance.timeOrigin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1776185678886e-3,aliases:[\"performance.timeOrigin\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added browser.performance.time_origin attribute attribute\"}]},\"browser.report.type\":{brief:\"A browser report sent via reporting API..\",type:\"string\",keys:[\"browser.report.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"network-error\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"browser.script.invoker\":{brief:\"How a script was called in the browser.\",type:\"string\",keys:[\"browser.script.invoker\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Window.requestAnimationFrame\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"browser.script.invoker_type\":{brief:\"Browser script entry point type.\",type:\"string\",keys:[\"browser.script.invoker_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"event-listener\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"browser.script.source_char_position\":{brief:\"A number representing the script character position of the script.\",type:\"integer\",keys:[\"browser.script.source_char_position\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:678,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"browser.version\":{brief:\"The version of the browser.\",type:\"string\",keys:[\"browser.version\",\"sentry.browser.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"120.0.6099.130\",aliases:[\"sentry.browser.version\"],changelog:[{version:\"0.1.0\",prs:[59,127,139]}]},\"browser.web_vital.cls.report_event\":{brief:\"The event that caused the SDK to report CLS (pagehide or navigation)\",type:\"string\",keys:[\"browser.web_vital.cls.report_event\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"navigation\",deprecation:{reason:\"The JavaScript SDK stopped setting this in v11. With per-navigation web vitals, web-vitals decides when the CLS value is final, so there is no report event to record. No replacement.\"},changelog:[{version:\"0.24.0\",prs:[642],description:\"Deprecated browser.web_vital.cls.report_event, which has no replacement\"},{version:\"0.5.0\",prs:[319],description:\"Added browser.web_vital.cls.report_event attribute\"}]},\"browser.web_vital.cls.source.<key>\":{brief:\"The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N\",type:\"string\",keys:[\"browser.web_vital.cls.source.<key>\",\"cls.source.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"body > div#app\",aliases:[\"cls.source.<key>\"],changelog:[{version:\"0.5.0\",prs:[234]}]},\"browser.web_vital.cls.value\":{brief:\"The value of the recorded Cumulative Layout Shift (CLS) web vital\",type:\"double\",keys:[\"browser.web_vital.cls.value\",\"cls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2361,aliases:[\"cls\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.cls.value attribute\"}]},\"browser.web_vital.fcp.value\":{brief:\"The time it takes for the browser to render the first piece of meaningful content on the screen\",type:\"double\",keys:[\"browser.web_vital.fcp.value\",\"fcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:547.6951,aliases:[\"fcp\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.fp.value\":{brief:\"The time in milliseconds it takes for the browser to render the first pixel on the screen\",type:\"double\",keys:[\"browser.web_vital.fp.value\",\"fp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:477.1926,aliases:[\"fp\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.inp.interaction_type\":{brief:\"The kind of user interaction INP was reported on\",type:\"string\",keys:[\"browser.web_vital.inp.interaction_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"click\",examples:[\"click\",\"hover\",\"drag\",\"press\"],changelog:[{version:\"0.24.0\",prs:[641],description:\"Added browser.web_vital.inp.interaction_type attribute\"}],additionalContext:[\"One of `click`, `hover`, `drag` or `press`, derived from the DOM event name of the Event Timing entry: pointer, mouse and touch events map to `click`, `mouseover` and similar to `hover`, drag and drop events to `drag`, and keyboard and `input` events to `press`. The same value forms the suffix of the span's `ui.interaction.*` op.\",\"Not to be confused with the `interactionType` of the web-vitals attribution build, which only distinguishes `pointer` and `keyboard`.\",\"Omitted when INP is reported without an interaction to attribute it to, see `browser.web_vital.inp.target`. The op of such a span still falls into `ui.interaction.click` so that it stays within the interaction span family, which makes this attribute, not the op, the way to tell a real click from a value with no interaction.\"]},\"browser.web_vital.inp.target\":{brief:\"The HTML element selector or component name of the element the user interacted with, for the interaction INP was reported on\",type:\"string\",keys:[\"browser.web_vital.inp.target\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"body > div#app > button.submit\",examples:[\"body > div#app > button.submit\",\"SubmitButton\"],changelog:[{version:\"0.24.0\",prs:[641],description:\"Added browser.web_vital.inp.target attribute\"}],additionalContext:[\"Named after `PerformanceEventTiming.target`, the way `browser.web_vital.lcp.element` is named after `LargestContentfulPaint.element`. The value uses the same format as that attribute.\",\"Omitted when INP is reported without an interaction to attribute it to. web-vitals reports such a value for a soft navigation whose interactions all stayed below the Event Timing duration threshold, so there is no element to name. The span is still named and still carries `browser.web_vital.inp.value`.\"]},\"browser.web_vital.inp.value\":{brief:\"The value of the recorded Interaction to Next Paint (INP) web vital\",type:\"double\",keys:[\"browser.web_vital.inp.value\",\"inp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,aliases:[\"inp\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.inp.value attribute\"}]},\"browser.web_vital.lcp.element\":{brief:\"The HTML element selector or component name for which LCP was reported\",type:\"string\",keys:[\"browser.web_vital.lcp.element\",\"lcp.element\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"body > div#app > div#container > div\",aliases:[\"lcp.element\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.id\":{brief:\"The id of the dom element responsible for the largest contentful paint\",type:\"string\",keys:[\"browser.web_vital.lcp.id\",\"lcp.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"#gero\",aliases:[\"lcp.id\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.load_time\":{brief:\"The time it took for the LCP element to be loaded\",type:\"integer\",keys:[\"browser.web_vital.lcp.load_time\",\"lcp.loadTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1402,aliases:[\"lcp.loadTime\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.render_time\":{brief:\"The time it took for the LCP element to be rendered\",type:\"integer\",keys:[\"browser.web_vital.lcp.render_time\",\"lcp.renderTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1685,aliases:[\"lcp.renderTime\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.report_event\":{brief:\"The event that caused the SDK to report LCP (pagehide or navigation)\",type:\"string\",keys:[\"browser.web_vital.lcp.report_event\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pagehide\",deprecation:{reason:\"The JavaScript SDK stopped setting this in v11. With per-navigation web vitals, web-vitals decides when the LCP value is final, so there is no report event to record. No replacement.\"},changelog:[{version:\"0.24.0\",prs:[642],description:\"Deprecated browser.web_vital.lcp.report_event, which has no replacement\"},{version:\"0.5.0\",prs:[319],description:\"Added browser.web_vital.lcp.report_event attribute\"}]},\"browser.web_vital.lcp.size\":{brief:\"The size of the largest contentful paint element\",type:\"integer\",keys:[\"browser.web_vital.lcp.size\",\"lcp.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1024,aliases:[\"lcp.size\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.url\":{brief:\"The url of the dom element responsible for the largest contentful paint\",type:\"string\",keys:[\"browser.web_vital.lcp.url\",\"lcp.url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/static/img.png\",aliases:[\"lcp.url\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"browser.web_vital.lcp.value\":{brief:\"The value of the recorded Largest Contentful Paint (LCP) web vital\",type:\"double\",keys:[\"browser.web_vital.lcp.value\",\"lcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2500,aliases:[\"lcp\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added browser.web_vital.lcp.value attribute\"}]},\"browser.web_vital.ttfb.request_time\":{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\",type:\"double\",keys:[\"browser.web_vital.ttfb.request_time\",\"ttfb.requestTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1554.5814,aliases:[\"ttfb.requestTime\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"browser.web_vital.ttfb.value\":{brief:\"The value of the recorded Time To First Byte (TTFB) web vital in Milliseconds\",type:\"double\",keys:[\"browser.web_vital.ttfb.value\",\"ttfb\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:194.3322,aliases:[\"ttfb\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"cache.hit\":{brief:\"If the cache was hit during this span.\",type:\"boolean\",keys:[\"cache.hit\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"cache.item_age\":{brief:\"The age of the cache entry in seconds, measured at read time.\",type:\"integer\",keys:[\"cache.item_age\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,examples:[5,3600],changelog:[{version:\"0.23.0\",prs:[637],description:\"Added cache.item_age attribute\"}],additionalContext:[\"Set on reads that return an entry. Absent on a miss, or when the cache does not report a write time.\",\"Clamped to 0. On a shared cache, the writer's clock and the reader's clock can drift far enough to make the age negative.\",\"Can exceed `cache.ttl`. A cache that discards an expired entry on read still reports the age of that entry, with `cache.hit: false`.\"],searchAlias:{name:\"cache.item_age\",type:\"second\"}},\"cache.item_size\":{brief:\"The size of the requested item in the cache. In bytes.\",type:\"integer\",keys:[\"cache.item_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:58,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"cache.item_size\",type:\"byte\"}},\"cache.key\":{brief:\"The key of the cache accessed.\",type:\"string[]\",keys:[\"cache.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"my-cache-key\",\"my-other-cache-key\"],changelog:[{version:\"0.0.0\"}]},\"cache.operation\":{brief:\"The operation being performed on the cache.\",type:\"string\",keys:[\"cache.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"get\",examples:[\"get\",\"put\",\"remove\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"cache.tags\":{brief:\"The tags attached to the cache entry. Tags group entries so a cache can invalidate them together.\",type:\"string[]\",keys:[\"cache.tags\"],applyScrubbing:{key:\"auto\",reason:\"Applications pick tag values freely and often build them from record identifiers such as a user id.\"},isInOtel:!1,visibility:\"public\",example:[\"blog-posts\",\"post-42\"],examples:[[\"blog-posts\",\"post-42\"],[\"products\"]],changelog:[{version:\"0.23.0\",prs:[637],description:\"Added cache.tags attribute\"}],additionalContext:[\"Cache library examples that support tags: Next.js `cacheTag()`, Symfony `ItemInterface::tag()`, Laravel `Cache::tags()`.\",\"HTTP caches take tags from a response header. Cloudflare reads `Cache-Tag`, Fastly reads `Surrogate-Key`.\",\"Record only the tags the application declared. Leave out implicit tags that the framework adds itself, for example one tag per route.\",\"The tags describe the entry, not the operation. Take them from the entry the cache returned or stored.\"]},\"cache.ttl\":{brief:\"The ttl (maximum lifetime) of the cache in seconds\",type:\"integer\",keys:[\"cache.ttl\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:120,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cache.write\":{brief:\"If the cache operation resulted in a write to the cache.\",type:\"boolean\",keys:[\"cache.write\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},channel:{brief:\"The channel name that is being used.\",type:\"string\",keys:[\"channel\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"mail\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"client.address\":{brief:\"Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"client.address\",\"http.client_ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",aliases:[\"http.client_ip\"],changelog:[{version:\"0.1.0\",prs:[106,127]},{version:\"0.0.0\"}]},\"client.port\":{brief:\"Client port number.\",type:\"integer\",keys:[\"client.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:5432,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.duration\":{brief:\"The duration of a Cloudflare D1 operation.\",type:\"integer\",keys:[\"cloudflare.d1.duration\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:543,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.query_type\":{brief:\"The type of query executed in a Cloudflare D1 operation\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"run\",deprecation:{replacement:\"db.operation.name\",status:\"backfill\"},aliases:[\"db.operation.name\",\"db.operation\",\"redis.command\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command as an alias\"},{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.d1.query_type attribute\"}]},\"cloudflare.d1.rows_read\":{brief:\"The number of rows read in a Cloudflare D1 operation.\",type:\"integer\",keys:[\"cloudflare.d1.rows_read\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.d1.rows_written\":{brief:\"The number of rows written in a Cloudflare D1 operation.\",type:\"integer\",keys:[\"cloudflare.d1.rows_written\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"cloudflare.durable_object.query.bindings\":{brief:\"The number of bound parameters passed to the SQL exec call.\",type:\"integer\",keys:[\"cloudflare.durable_object.query.bindings\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.query.bindings attribute\"}]},\"cloudflare.durable_object.response.rows_read\":{brief:\"The number of rows read by a Cloudflare Durable Object SQL operation.\",type:\"integer\",keys:[\"cloudflare.durable_object.response.rows_read\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.response.rows_read attribute\"}]},\"cloudflare.durable_object.response.rows_written\":{brief:\"The number of rows written by a Cloudflare Durable Object SQL operation.\",type:\"integer\",keys:[\"cloudflare.durable_object.response.rows_written\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.13.0\",prs:[435],description:\"Added cloudflare.durable_object.response.rows_written attribute\"}]},\"cloudflare.r2.bucket\":{brief:\"The name of the Cloudflare R2 bucket binding\",type:\"string\",keys:[\"cloudflare.r2.bucket\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MY_BUCKET\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.bucket attribute\"}]},\"cloudflare.r2.operation\":{brief:\"The R2 API operation being performed\",type:\"string\",keys:[\"cloudflare.r2.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GetObject\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.operation attribute\"}]},\"cloudflare.r2.request.delimiter\":{brief:\"The delimiter used to group objects in an R2 list operation\",type:\"string\",keys:[\"cloudflare.r2.request.delimiter\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.delimiter attribute\"}]},\"cloudflare.r2.request.key\":{brief:\"The object key used in the R2 operation\",type:\"string\",keys:[\"cloudflare.r2.request.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-file.txt\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.key attribute\"}]},\"cloudflare.r2.request.part_number\":{brief:\"The part number in a multipart upload operation\",type:\"integer\",keys:[\"cloudflare.r2.request.part_number\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.part_number attribute\"}]},\"cloudflare.r2.request.prefix\":{brief:\"The prefix used to filter objects in an R2 list operation\",type:\"string\",keys:[\"cloudflare.r2.request.prefix\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"images/\",changelog:[{version:\"0.11.1\",prs:[413],description:\"Added cloudflare.r2.request.prefix attribute\"}]},\"cloudflare.workflow.attempt\":{brief:\"The current attempt number for a Cloudflare Workflow step\",type:\"integer\",keys:[\"cloudflare.workflow.attempt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.attempt attribute\"}]},\"cloudflare.workflow.retries.backoff\":{brief:\"The backoff strategy for Cloudflare Workflow step retries\",type:\"string\",keys:[\"cloudflare.workflow.retries.backoff\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"exponential\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.backoff attribute\"}]},\"cloudflare.workflow.retries.delay\":{brief:\"The delay between Cloudflare Workflow step retries\",type:\"string\",keys:[\"cloudflare.workflow.retries.delay\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"5 seconds\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.delay attribute\"}]},\"cloudflare.workflow.retries.limit\":{brief:\"The maximum number of retries for a Cloudflare Workflow step\",type:\"integer\",keys:[\"cloudflare.workflow.retries.limit\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.retries.limit attribute\"}]},\"cloudflare.workflow.timeout\":{brief:\"The timeout duration for a Cloudflare Workflow step\",type:\"string\",keys:[\"cloudflare.workflow.timeout\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1 minute\",changelog:[{version:\"0.11.0\",prs:[392],description:\"Added cloudflare.workflow.timeout attribute\"}]},\"cloud.account.id\":{brief:\"The cloud account ID the resource is assigned to\",type:\"string\",keys:[\"cloud.account.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"123456789012\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.account.id attribute\"}]},\"cloud.availability_zone\":{brief:\"Cloud regions often have multiple, isolated locations known as zones to increase availability\",type:\"string\",keys:[\"cloud.availability_zone\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"us-east-1c\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.availability_zone attribute\"}]},\"cloud.platform\":{brief:\"The cloud platform in use\",type:\"string\",keys:[\"cloud.platform\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws_lambda\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.platform attribute\"}]},\"cloud.provider\":{brief:\"Name of the cloud provider\",type:\"string\",keys:[\"cloud.provider\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws\",changelog:[{version:\"0.7.0\",prs:[364],description:\"Added cloud.provider attribute\"}]},\"cloud.region\":{brief:\"The geographical region the resource is running\",type:\"string\",keys:[\"cloud.region\",\"aws_region\",\"gcp_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"us-east-1\",aliases:[\"aws_region\",\"gcp_region\"],changelog:[{version:\"0.19.0\",prs:[535,537],description:\"Added aws_region and gcp_region as aliases\"},{version:\"0.7.0\",prs:[364],description:\"Added cloud.region attribute\"}]},\"cloud.resource_id\":{brief:\"Cloud provider-specific native identifier of the monitored cloud resource\",type:\"string\",keys:[\"cloud.resource_id\",\"faas.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\",aliases:[\"faas.id\"],changelog:[{version:\"0.16.0\",prs:[475],description:\"Added faas.id as an alias\"},{version:\"0.11.1\",prs:[414]}],additionalContext:[\"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.\"]},cls:{brief:\"The value of the recorded Cumulative Layout Shift (CLS) web vital\",type:\"double\",keys:[\"browser.web_vital.cls.value\",\"cls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2361,deprecation:{replacement:\"browser.web_vital.cls.value\",reason:\"The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.cls.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"cls.source.<key>\":{brief:\"The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N\",type:\"string\",keys:[\"browser.web_vital.cls.source.<key>\",\"cls.source.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"body > div#app\",deprecation:{replacement:\"browser.web_vital.cls.source.<key>\",reason:\"The CLS source is now recorded as a browser.web_vital.cls.source.<key> attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.cls.source.<key>\"],changelog:[{version:\"0.5.0\",prs:[234]}]},code:{brief:\"Status code of the RPC returned by the RPC server or generated by the client.\",type:\"string\",keys:[\"rpc.response.status_code\",\"code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"DEADLINE_EXCEEDED\",examples:[\"DEADLINE_EXCEEDED\"],deprecation:{replacement:\"rpc.response.status_code\",status:\"backfill\"},aliases:[\"rpc.grpc.status_code\",\"rpc.response.status_code\"],changelog:[{version:\"0.19.0\",prs:[533],description:\"Added code attribute\"}]},\"code.filepath\":{brief:\"The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\",type:\"string\",keys:[\"code.file.path\",\"sveltekit.load.node_id\",\"code.filepath\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/app/myapplication/http/handler/server.py\",deprecation:{replacement:\"code.file.path\",status:\"backfill\"},aliases:[\"code.file.path\",\"sveltekit.load.node_id\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_id as an alias\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"code.file.path\":{brief:\"The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\",type:\"string\",keys:[\"code.file.path\",\"sveltekit.load.node_id\",\"code.filepath\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/app/myapplication/http/handler/server.py\",aliases:[\"code.filepath\",\"sveltekit.load.node_id\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_id as an alias\"},{version:\"0.0.0\"}]},\"code.function\":{brief:\"The method or function name, or equivalent (usually rightmost part of the code unit's name).\",type:\"string\",keys:[\"code.function\",\"code.function.name\",\"django.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"server_request\",aliases:[\"code.function.name\",\"django.function_name\"],changelog:[{version:\"0.19.0\",prs:[538],description:\"Added django.function_name as an alias\"},{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},\"code.function.name\":{brief:\"The method or function fully-qualified name without arguments.\",type:\"string\",keys:[\"code.function.name\",\"code.function\",\"django.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"server_request\",aliases:[\"code.function\",\"django.function_name\"],changelog:[{version:\"0.19.0\",prs:[538],description:\"Added django.function_name as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"code.lineno\":{brief:\"The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function\",type:\"integer\",keys:[\"code.line.number\",\"code.lineno\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,deprecation:{replacement:\"code.line.number\",status:\"backfill\"},aliases:[\"code.line.number\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61,108]},{version:\"0.0.0\"}]},\"code.line.number\":{brief:\"The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function\",type:\"integer\",keys:[\"code.line.number\",\"code.lineno\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,aliases:[\"code.lineno\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"code.namespace\":{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.\",type:\"string\",keys:[\"code.namespace\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http.handler\",changelog:[{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},connectionType:{brief:\"Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).\",type:\"string\",keys:[\"network.connection.type\",\"connectionType\",\"device.connection_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wifi\",deprecation:{replacement:\"network.connection.type\",reason:\"Old namespace-less attribute, to be replaced with network.connection.type for span-first future\",status:\"backfill\"},aliases:[\"network.connection.type\",\"device.connection_type\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"connection.rtt\":{brief:\"Specifies the estimated effective round-trip time of the current connection, in milliseconds.\",type:\"integer\",keys:[\"network.connection.rtt\",\"connection.rtt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,deprecation:{replacement:\"network.connection.rtt\",reason:\"Old attribute name (no official namespace), to be replaced with network.connection.rtt for span-first future\",status:\"backfill\"},aliases:[\"network.connection.rtt\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"culture.calendar\":{brief:\"The calendar system used by the culture.\",type:\"string\",keys:[\"culture.calendar\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GregorianCalendar\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.display_name\":{brief:\"Human readable name of the culture.\",type:\"string\",keys:[\"culture.display_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"English (United States)\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.is_24_hour_format\":{brief:\"Whether the culture uses 24-hour time format.\",type:\"boolean\",keys:[\"culture.is_24_hour_format\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.locale\":{brief:\"The locale identifier following RFC 4646.\",type:\"string\",keys:[\"culture.locale\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"en-US\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"culture.timezone\":{brief:\"The timezone of the culture, as a geographic timezone identifier.\",type:\"string\",keys:[\"culture.timezone\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Europe/Vienna\",changelog:[{version:\"0.4.0\",prs:[243]}]},\"db.collection.name\":{brief:\"The name of a collection (table, container) within the database.\",type:\"string\",keys:[\"db.collection.name\",\"db.mongodb.collection\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"users\",aliases:[\"db.mongodb.collection\"],changelog:[{version:\"0.19.0\",prs:[483],description:\"Added db.mongodb.collection as an alias\"},{version:\"0.1.0\",prs:[106,127]},{version:\"0.0.0\"}]},\"db.connection_string\":{brief:\"The connection string used to connect to the database.\",type:\"string\",keys:[\"db.connection_string\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"redis://localhost:6379\",examples:[\"redis://localhost:6379\"],deprecation:{reason:\"This attribute is deprecated. The connection is described by server.address and server.port instead, so the value cannot be copied to a single replacement attribute.\"},changelog:[{version:\"0.21.0\",prs:[581],description:\"Added db.connection_string attribute\"}]},\"db.driver.name\":{brief:\"The name of the driver used for the database connection.\",type:\"string\",keys:[\"db.driver.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"psycopg2\",changelog:[{version:\"0.5.0\",prs:[297],description:\"Added db.driver.name attribute\"}]},\"db.mongodb.collection\":{brief:\"The MongoDB collection being accessed.\",type:\"string\",keys:[\"db.collection.name\",\"db.mongodb.collection\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"users\",deprecation:{replacement:\"db.collection.name\",reason:\"This attribute is being deprecated in favor of db.collection.name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"db.collection.name\"],changelog:[{version:\"0.19.0\",prs:[483],description:\"Added db.mongodb.collection attribute, deprecated in favor of db.collection.name\"}]},\"db.name\":{brief:\"The name of the database being accessed.\",type:\"string\",keys:[\"db.namespace\",\"db.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"customers\",deprecation:{replacement:\"db.namespace\",status:\"backfill\"},aliases:[\"db.namespace\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.namespace\":{brief:\"The name of the database being accessed.\",type:\"string\",keys:[\"db.namespace\",\"db.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"customers\",aliases:[\"db.name\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.operation\":{brief:\"The name of the operation being executed.\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT\",deprecation:{replacement:\"db.operation.name\",status:\"normalize\"},aliases:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"redis.command\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command as an alias\"},{version:\"0.4.0\",prs:[199]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.operation.batch.size\":{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.\",type:\"integer\",keys:[\"db.operation.batch.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:3,changelog:[{version:\"0.11.0\",prs:[407],description:\"Added db.operation.batch.size attribute\"}]},\"db.operation.name\":{brief:\"The name of the operation being executed.\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT\",aliases:[\"db.operation\",\"cloudflare.d1.query_type\",\"redis.command\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.params\":{brief:\"The query bindings for a database request.\",type:\"string\",keys:[\"db.params\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:'[{\"x\": 100}]',examples:['[{\"x\": 100}]'],deprecation:{replacement:\"db.query.parameter.<key>\",reason:\"Instead of adding every binding in the db.params attribute, add them as individual entries with db.query.parameter.<key>.\"},changelog:[{version:\"0.19.0\",prs:[529],description:\"Added db.params attribute\"}]},\"db.query.parameter.<key>\":{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.\",type:\"string\",keys:[\"db.query.parameter.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"db.query.parameter.foo='123'\",changelog:[{version:\"0.1.0\",prs:[103,127]}]},\"db.query.summary\":{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.\",type:\"string\",keys:[\"db.query.summary\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"SELECT users\",examples:[\"SELECT users\",\"INSERT products; UPDATE orders\"],changelog:[{version:\"0.19.0\",prs:[505],description:\"Added multiple examples\"},{version:\"0.4.0\",prs:[208]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.query.text\":{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.\",type:\"string\",keys:[\"db.query.text\",\"db.statement\",\"query\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"SELECT * FROM users WHERE id = $1\",aliases:[\"db.statement\",\"query\"],changelog:[{version:\"0.19.0\",prs:[530],description:\"Added query as an alias\"},{version:\"0.4.0\",prs:[208]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.redis.connection\":{brief:\"The redis connection name.\",type:\"string\",keys:[\"db.redis.connection\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-redis-instance\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.redis.key\":{brief:\"The key the Redis command is operating on.\",type:\"string\",keys:[\"db.redis.key\",\"redis.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user:2047:city\",aliases:[\"redis.key\"],changelog:[{version:\"0.19.0\",prs:[484],description:\"Added redis.key as an alias\"},{version:\"0.6.0\",prs:[326],description:\"Added db.redis.key attribute\"}]},\"db.redis.parameters\":{brief:\"The array of command parameters given to a redis command.\",type:\"string[]\",keys:[\"db.redis.parameters\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"test\",\"*\"],changelog:[{version:\"0.0.0\"}]},\"db.response.status_code\":{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.\",type:\"string\",keys:[\"db.response.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ORA-17002\",changelog:[{version:\"0.16.0\",prs:[462],description:\"Added db.response.status_code attribute\"}]},\"db.sql.bindings\":{brief:\"The array of query bindings.\",type:\"string[]\",keys:[\"db.sql.bindings\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"1\",\"foo\"],deprecation:{replacement:\"db.query.parameter.<key>\",reason:\"Instead of adding every binding in the db.sql.bindings attribute, add them as individual entires with db.query.parameter.<key>.\"},changelog:[{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"db.statement\":{brief:\"The database statement being executed.\",type:\"string\",keys:[\"db.query.text\",\"db.statement\",\"query\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"SELECT * FROM users WHERE id = $1\",deprecation:{replacement:\"db.query.text\",reason:\"While this attribute never specifically required parameterization, the replacement, db.query.text, does.\",status:\"normalize\"},aliases:[\"db.query.text\",\"query\"],changelog:[{version:\"0.19.0\",prs:[501],description:\"Improved example, added deprecation reason, and added query as an alias\"},{version:\"0.4.0\",prs:[199]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"db.stored_procedure.name\":{brief:\"The name of a stored procedure being called.\",type:\"string\",keys:[\"db.stored_procedure.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GetUserById\",changelog:[{version:\"0.11.0\",prs:[398]}]},\"db.system\":{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.\",type:\"string\",keys:[\"db.system.name\",\"db.system\",\"span.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"postgresql\",deprecation:{replacement:\"db.system.name\",status:\"backfill\"},aliases:[\"db.system.name\"],changelog:[{version:\"0.4.0\",prs:[199,224]},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}],searchAlias:{name:\"db.system\",deprecatedAliases:[\"span.system\"]}},\"db.system.name\":{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.\",type:\"string\",keys:[\"db.system.name\",\"db.system\",\"span.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"postgresql\",aliases:[\"db.system\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"db.user\":{brief:\"The database user.\",type:\"string\",keys:[\"db.user\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"fancy_user\",changelog:[{version:\"0.0.0\"}]},deviceMemory:{brief:\"The estimated total memory capacity of the device, only a rough estimation in gigabytes.\",type:\"string\",keys:[\"device.memory.estimated_capacity\",\"deviceMemory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"8 GB\",deprecation:{replacement:\"device.memory.estimated_capacity\",reason:\"Old namespace-less attribute, to be replaced with device.memory.estimated_capacity for span-first future\",status:\"backfill\"},aliases:[\"device.memory.estimated_capacity\"],changelog:[{version:\"0.5.0\",prs:[281],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"device.archs\":{brief:\"The CPU architectures of the device.\",type:\"string[]\",keys:[\"device.archs\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"arm64-v8a\",\"armeabi-v7a\",\"armeabi\"],changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.archs attribute\"}]},\"device.battery_level\":{brief:\"The battery level of the device as a percentage (0-100).\",type:\"double\",keys:[\"device.battery_level\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.battery_level attribute\"}]},\"device.battery_temperature\":{brief:\"The battery temperature of the device in Celsius.\",type:\"double\",keys:[\"device.battery_temperature\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:25,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.battery_temperature attribute\"}]},\"device.boot_time\":{brief:\"A formatted UTC timestamp when the system was booted.\",type:\"string\",keys:[\"device.boot_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2018-02-08T12:52:12Z\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.boot_time attribute\"}]},\"device.brand\":{brief:\"The brand of the device.\",type:\"string\",keys:[\"device.brand\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Apple\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.charging\":{brief:\"Whether the device was charging or not.\",type:\"boolean\",keys:[\"device.charging\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.charging attribute\"}]},\"device.chipset\":{brief:\"The chipset of the device.\",type:\"string\",keys:[\"device.chipset\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Qualcomm SM8550\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.chipset attribute\"}]},\"device.class\":{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.\",type:\"string\",keys:[\"device.class\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"medium\",changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.class attribute\"}]},\"device.connection_type\":{brief:\"The internet connection type currently being used by the device.\",type:\"string\",keys:[\"network.connection.type\",\"connectionType\",\"device.connection_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"wifi\",deprecation:{replacement:\"network.connection.type\",reason:\"This attribute is being deprecated in favor of network.connection.type\",status:\"backfill\"},aliases:[\"network.connection.type\",\"connectionType\"],changelog:[{version:\"0.5.0\",prs:[303],description:\"Added and deprecated device.connection_type in favor of network.connection.type\"}]},\"device.cpu_description\":{brief:\"A description of the CPU of the device.\",type:\"string\",keys:[\"device.cpu_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.cpu_description attribute\"}]},\"device.external_free_storage\":{brief:\"External storage free size in bytes.\",type:\"integer\",keys:[\"device.external_free_storage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:67108864e3,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.external_free_storage attribute\"}]},\"device.external_storage_size\":{brief:\"External storage total size in bytes.\",type:\"integer\",keys:[\"device.external_storage_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:134217728e3,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.external_storage_size attribute\"}]},\"device.family\":{brief:\"The family of the device.\",type:\"string\",keys:[\"device.family\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"iPhone\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.free_memory\":{brief:\"Free system memory in bytes.\",type:\"integer\",keys:[\"device.free_memory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2147483648,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.free_memory attribute\"}]},\"device.free_storage\":{brief:\"Free device storage in bytes.\",type:\"integer\",keys:[\"device.free_storage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:107374182400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.free_storage attribute\"}]},\"device.id\":{brief:\"Unique device identifier.\",type:\"string\",keys:[\"device.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.id attribute\"}]},\"device.locale\":{brief:\"The locale of the device.\",type:\"string\",keys:[\"device.locale\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"en-US\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.locale attribute\"}]},\"device.low_memory\":{brief:\"Whether the device was low on memory.\",type:\"boolean\",keys:[\"device.low_memory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.low_memory attribute\"}]},\"device.low_power_mode\":{brief:\"Whether the device is in Low Power Mode.\",type:\"boolean\",keys:[\"device.low_power_mode\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.6.0\",prs:[314],description:\"Added device.low_power_mode attribute\"}]},\"device.manufacturer\":{brief:\"The manufacturer of the device.\",type:\"string\",keys:[\"device.manufacturer\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Google\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.manufacturer attribute\"}]},\"device.memory.estimated_capacity\":{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\",type:\"integer\",keys:[\"device.memory.estimated_capacity\",\"deviceMemory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8,aliases:[\"deviceMemory\"],changelog:[{version:\"0.5.0\",prs:[281],description:\"Added attribute device.memory.estimated_capacity to be used instead of deviceMemory\"}]},\"device.memory_size\":{brief:\"Total system memory available in bytes.\",type:\"integer\",keys:[\"device.memory_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:17179869184,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.memory_size attribute\"}]},\"device.model\":{brief:\"The model of the device.\",type:\"string\",keys:[\"device.model\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"iPhone 15 Pro Max\",changelog:[{version:\"0.1.0\",prs:[116,127]}]},\"device.model_id\":{brief:\"An internal hardware revision to identify the device exactly.\",type:\"string\",keys:[\"device.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"N861AP\",changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.model_id attribute\"}]},\"device.name\":{brief:\"The user-assigned name of the mobile device.\",type:\"string\",keys:[\"device.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"localhost\",changelog:[{version:\"0.24.0\",prs:[647],description:\"Limit brief to mobile attributes and remove server_name alias\"},{version:\"0.21.0\",prs:[602],description:\"Added server_name as an alias\"},{version:\"0.5.0\",prs:[303],description:\"Added device.name attribute\"}]},\"device.online\":{brief:\"Whether the device was online or not.\",type:\"boolean\",keys:[\"device.online\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.online attribute\"}]},\"device.orientation\":{brief:'The orientation of the device, either \"portrait\" or \"landscape\".',type:\"string\",keys:[\"device.orientation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"portrait\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.orientation attribute\"}]},\"device.processor_count\":{brief:'Number of \"logical processors\".',type:\"integer\",keys:[\"device.processor_count\",\"hardwareConcurrency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:8,aliases:[\"hardwareConcurrency\"],changelog:[{version:\"0.5.0\",prs:[300],description:\"Added and deprecated attribute device.processor_count in favor of device.cpu.logical_core_count\"}]},\"device.processor_frequency\":{brief:\"Processor frequency in MHz.\",type:\"double\",keys:[\"device.processor_frequency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.processor_frequency attribute\"}]},\"device.screen_density\":{brief:\"The screen density of the device.\",type:\"double\",keys:[\"device.screen_density\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2.625,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_density attribute\"}]},\"device.screen_dpi\":{brief:\"The screen density in dots-per-inch (DPI) of the device.\",type:\"integer\",keys:[\"device.screen_dpi\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:420,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_dpi attribute\"}]},\"device.screen_height_pixels\":{brief:\"The height of the device screen in pixels.\",type:\"integer\",keys:[\"device.screen_height_pixels\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2400,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_height_pixels attribute\"}]},\"device.screen_width_pixels\":{brief:\"The width of the device screen in pixels.\",type:\"integer\",keys:[\"device.screen_width_pixels\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1080,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.screen_width_pixels attribute\"}]},\"device.simulator\":{brief:\"Whether the device is a simulator or an actual device.\",type:\"boolean\",keys:[\"device.simulator\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,changelog:[{version:\"0.5.0\",prs:[300],description:\"Added device.simulator attribute\"}]},\"device.storage_size\":{brief:\"Total device storage in bytes.\",type:\"integer\",keys:[\"device.storage_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:274877906944,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.storage_size attribute\"}]},\"device.thermal_state\":{brief:\"The thermal state of the device. Based on Apple's `ProcessInfo.ThermalState` enum.\",type:\"string\",keys:[\"device.thermal_state\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"nominal\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.thermal_state attribute\"}]},\"device.timezone\":{brief:\"The timezone of the device.\",type:\"string\",keys:[\"device.timezone\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Europe/Vienna\",changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.timezone attribute\"}]},\"device.usable_memory\":{brief:\"Memory usable for the app in bytes.\",type:\"integer\",keys:[\"device.usable_memory\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2147483648,changelog:[{version:\"0.5.0\",prs:[303],description:\"Added device.usable_memory attribute\"}]},dist:{brief:\"The sentry dist.\",type:\"string\",keys:[\"sentry.dist\",\"dist\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",deprecation:{replacement:\"sentry.dist\",reason:\"This attribute is being deprecated in favor of sentry.dist.\",status:\"backfill\"},aliases:[\"sentry.dist\"],changelog:[{version:\"0.16.0\",prs:[489],description:\"Added dist attribute\"}]},\"django.function_name\":{brief:\"The fully qualified name of a function used in a Django context.\",type:\"string\",keys:[\"code.function.name\",\"code.function\",\"django.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"django.contrib.sessions.middleware.SessionMiddleware\",examples:[\"django.contrib.sessions.middleware.SessionMiddleware\"],deprecation:{replacement:\"code.function.name\",reason:\"This attribute is being deprecated in favor of code.function.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"code.function.name\",\"code.function\"],changelog:[{version:\"0.19.0\",prs:[538],description:\"Added django.function_name attribute\"}]},\"django.middleware_name\":{brief:\"The name of the Django middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",examples:[\"AuthenticationMiddleware\"],deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[520],description:\"Added django.middleware_name attribute\"}]},effectiveConnectionType:{brief:\"Specifies the estimated effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).\",type:\"string\",keys:[\"network.connection.effective_type\",\"effectiveConnectionType\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"4g\",deprecation:{replacement:\"network.connection.effective_type\",reason:\"Old namespace-less attribute, to be replaced with network.connection.effective_type for span-first future\",status:\"backfill\"},aliases:[\"network.connection.effective_type\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},environment:{brief:\"The sentry environment.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\",status:\"normalize\"},aliases:[\"sentry.environment\"],changelog:[{version:\"0.19.0\",prs:[427],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"error.type\":{brief:\"Describes a class of error the operation ended with.\",type:\"string\",keys:[\"error.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"timeout\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"event.id\":{brief:\"The unique identifier for this event (log record)\",type:\"integer\",keys:[\"event.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234567890,changelog:[{version:\"0.1.0\",prs:[101]}]},\"event.name\":{brief:\"The name that uniquely identifies this event (log record)\",type:\"string\",keys:[\"event.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Process Payload\",changelog:[{version:\"0.1.0\",prs:[101,127]}]},\"exception.escaped\":{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.\",type:\"boolean\",keys:[\"exception.escaped\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"exception.message\":{brief:\"The error message.\",type:\"string\",keys:[\"exception.message\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"ENOENT: no such file or directory\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"exception.stacktrace\":{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.\",type:\"string\",keys:[\"exception.stacktrace\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",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)`,changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"exception.type\":{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.\",type:\"string\",keys:[\"exception.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"OSError\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.coldstart\":{brief:\"A boolean that is true if the serverless function is executed for the first time (aka cold-start).\",type:\"boolean\",keys:[\"faas.coldstart\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"faas.cron\":{brief:\"A string containing the schedule period as Cron Expression.\",type:\"string\",keys:[\"faas.cron\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"0/5 * * * ? *\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.duration_in_ms\":{brief:\"The duration a function took to run, in milliseconds.\",type:\"integer\",keys:[\"faas.duration_in_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:120,changelog:[{version:\"0.11.0\",prs:[403]}]},\"faas.entry_point\":{brief:\"The code that's run when the cloud provider invokes your function.\",type:\"string\",keys:[\"faas.entry_point\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my_main_function\",changelog:[{version:\"0.11.0\",prs:[403,415]}]},\"faas.execution\":{brief:\"The execution ID of the current function execution.\",type:\"string\",keys:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\",\"faas.execution\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\",deprecation:{replacement:\"faas.invocation_id\",reason:\"This attribute is being deprecated in favor of faas.invocation_id, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution attribute, deprecated in favor of faas.invocation_id\"}]},\"faas.id\":{brief:\"The unique ID of the single function that this runtime instance executes.\",type:\"string\",keys:[\"cloud.resource_id\",\"faas.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\",deprecation:{replacement:\"cloud.resource_id\",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).\",status:\"backfill\"},aliases:[\"cloud.resource_id\"],changelog:[{version:\"0.16.0\",prs:[475],description:\"Added faas.id attribute, deprecated in favor of cloud.resource_id\"}]},\"faas.identity\":{brief:\"The Service Account (GCP), IAM Execution Role (AWS), or Managed Identity (Azure) used by the serverless function when interacting with other cloud services\",type:\"string\",keys:[\"faas.identity\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"name@project.iam.gserviceaccount.com (GCP), arn:aws:iam::123456789012:role/role-name (AWS), 00000000-0000-0000-0000-000000000000 (Azure)\",changelog:[{version:\"0.11.0\",prs:[403]}]},\"faas.invocation_id\":{brief:\"The invocation ID of the current function invocation.\",type:\"string\",keys:[\"faas.invocation_id\",\"aws.lambda.aws_request_id\",\"faas.execution\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\",aliases:[\"aws.lambda.aws_request_id\",\"faas.execution\"],changelog:[{version:\"0.16.0\",prs:[473],description:\"Added faas.execution as an alias\"},{version:\"0.11.1\",prs:[414,424]}]},\"faas.invoked_name\":{brief:\"The name of the invoked function.\",type:\"string\",keys:[\"faas.invoked_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"my-function\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_name attribute\"}]},\"faas.invoked_provider\":{brief:\"The cloud provider of the invoked function.\",type:\"string\",keys:[\"faas.invoked_provider\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_provider attribute\"}]},\"faas.invoked_region\":{brief:\"The cloud region of the invoked function.\",type:\"string\",keys:[\"faas.invoked_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"eu-central-1\",changelog:[{version:\"0.16.0\",prs:[481],description:\"Added faas.invoked_region attribute\"}]},\"faas.name\":{brief:\"The name of the serverless function\",type:\"string\",keys:[\"faas.name\",\"aws.lambda.function_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"my_function\",aliases:[\"aws.lambda.function_name\"],changelog:[{version:\"0.11.0\",prs:[403,415]}]},\"faas.time\":{brief:\"A string containing the function invocation time in the ISO 8601 format expressed in UTC.\",type:\"string\",keys:[\"faas.time\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2020-01-23T13:47:06Z\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.trigger\":{brief:\"Type of the trigger which caused this function invocation.\",type:\"string\",keys:[\"faas.trigger\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"timer\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"faas.version\":{brief:\"The version of the function that was invoked\",type:\"string\",keys:[\"faas.version\",\"aws.lambda.function_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"$LATEST\",aliases:[\"aws.lambda.function_version\"],changelog:[{version:\"0.11.1\",prs:[414,424]}]},fcp:{brief:\"The time it takes for the browser to render the first piece of meaningful content on the screen\",type:\"double\",keys:[\"browser.web_vital.fcp.value\",\"fcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:547.6951,deprecation:{replacement:\"browser.web_vital.fcp.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.fcp.value\",status:\"backfill\"},aliases:[\"browser.web_vital.fcp.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"file.path\":{brief:\"Path to the file.\",type:\"string\",keys:[\"file.path\"],applyScrubbing:{key:\"auto\",reason:\"File paths can contain end-user paths (e.g. from stack traces) that may be sensitive.\"},isInOtel:!0,visibility:\"public\",example:\"/home/user/example.txt\",changelog:[{version:\"0.17.0\",prs:[458],description:\"Added file.path attribute\"}]},\"file.size\":{brief:\"File size in bytes.\",type:\"integer\",keys:[\"file.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1024,changelog:[{version:\"0.17.0\",prs:[458],description:\"Added file.size attribute\"}]},\"flag.evaluation.<key>\":{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.\",type:\"boolean\",keys:[\"flag.evaluation.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"flag.evaluation.is_new_ui=true\",changelog:[{version:\"0.1.0\",prs:[103]}]},fp:{brief:\"The time it takes for the browser to render the first pixel on the screen\",type:\"double\",keys:[\"browser.web_vital.fp.value\",\"fp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:477.1926,deprecation:{replacement:\"browser.web_vital.fp.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.fp.value\",status:\"backfill\"},aliases:[\"browser.web_vital.fp.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"frames.delay\":{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/).\",type:\"integer\",keys:[\"app.vitals.frames.delay.value\",\"frames.delay\",\"mobile.frames_delay\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5,deprecation:{replacement:\"app.vitals.frames.delay.value\",reason:\"Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.delay.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.delay.value\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.frames_delay\",type:\"second\"}},\"frames.frozen\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.frozen.count\",\"frames.frozen\",\"mobile.frozen_frames\",\"sentry.frames.frozen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,deprecation:{replacement:\"app.vitals.frames.frozen.count\",reason:\"Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.frozen.count\",\"sentry.frames.frozen\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.frozen as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.frozen.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.frozen_frames\"}},frames_frozen_rate:{brief:\"The rate of frozen frames, or `app.vitals.frames.frozen.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.frozen.rate\",\"frames_frozen_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.frames.frozen.rate\",reason:\"Replaced by app.vitals.frames.frozen.rate to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.frozen.rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.frames.frozen.rate\"},{version:\"0.7.0\",prs:[362],description:\"Added frames_frozen_rate attribute\"}]},\"frames.slow\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.slow.count\",\"frames.slow\",\"mobile.slow_frames\",\"sentry.frames.slow\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,deprecation:{replacement:\"app.vitals.frames.slow.count\",reason:\"Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.slow.count\",\"sentry.frames.slow\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.slow as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.slow.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.slow_frames\"}},frames_slow_rate:{brief:\"The rate of slow frames, or `app.vitals.frames.slow.count` divided by `app.vitals.frames.total.count`. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.frames.slow.rate\",\"frames_slow_rate\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.frames.slow.rate\",reason:\"Replaced by app.vitals.frames.slow.rate to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.slow.rate\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.frames.slow.rate\"},{version:\"0.7.0\",prs:[362],description:\"Added frames_slow_rate attribute\"}]},\"frames.total\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.total.count\",\"frames.total\",\"mobile.total_frames\",\"sentry.frames.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,deprecation:{replacement:\"app.vitals.frames.total.count\",reason:\"Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.total.count\",\"sentry.frames.total\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.total as an alias\"},{version:\"0.5.0\",prs:[313],description:\"Deprecated in favor of app.vitals.frames.total.count\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"mobile.total_frames\"}},fs_error:{brief:\"The error message of a file system error.\",type:\"string\",keys:[\"fs_error\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"ENOENT: no such file or directory\",deprecation:{replacement:\"error.type\",reason:\"This attribute is not part of the OpenTelemetry specification and error.type fits much better. The value changes from the full error message to the syscall error code, so the old value cannot be copied over.\"},changelog:[{version:\"0.23.0\",prs:[638],description:\"Remove unnecessary transformation and change deprecation status to null.\"},{version:\"0.22.0\",prs:[589],description:\"Transform fs_error into error.type\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"gcp.function.context.event_id\":{brief:\"The event ID from the legacy GCP Cloud Function context (1st gen)\",type:\"string\",keys:[\"gcp.function.context.event_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.event_id attribute\"}]},\"gcp.function.context.event_type\":{brief:\"The type of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.event_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"google.pubsub.topic.publish\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.event_type attribute\"}]},\"gcp.function.context.id\":{brief:\"The unique event ID from the GCP CloudEvents context (2nd gen Cloud Functions)\",type:\"string\",keys:[\"gcp.function.context.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.id attribute\"}]},\"gcp.function.context.resource\":{brief:\"The resource that triggered the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.resource\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"projects/my-project/topics/my-topic\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.resource attribute\"}]},\"gcp.function.context.source\":{brief:\"The source of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.source\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"//pubsub.googleapis.com/projects/my-project/topics/my-topic\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.source attribute\"}]},\"gcp.function.context.specversion\":{brief:\"The CloudEvents specification version of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.specversion\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.specversion attribute\"}]},\"gcp.function.context.time\":{brief:\"The timestamp of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024-01-01T00:00:00.000Z\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.time attribute\"}]},\"gcp.function.context.timestamp\":{brief:\"The legacy timestamp of the GCP Cloud Function event\",type:\"string\",keys:[\"gcp.function.context.timestamp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"2024-01-01T00:00:00.000Z\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.timestamp attribute\"}]},\"gcp.function.context.type\":{brief:\"The type of the GCP Cloud Function event context\",type:\"string\",keys:[\"gcp.function.context.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"cloud_functions.context\",changelog:[{version:\"0.7.0\",prs:[371],description:\"Added gcp.function.context.type attribute\"}]},\"gcp.project.id\":{brief:\"The ID of the project in GCP that this resource is associated with\",type:\"string\",keys:[\"gcp.project.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-project-123\",changelog:[{version:\"0.11.0\",prs:[403]}]},gcp_region:{brief:\"The geographical region the GCP resource is running\",type:\"string\",keys:[\"cloud.region\",\"aws_region\",\"gcp_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"us-east-1\",examples:[\"us-east-1\"],deprecation:{replacement:\"cloud.region\",status:\"backfill\"},aliases:[\"cloud.region\",\"aws_region\"],changelog:[{version:\"0.19.0\",prs:[535],description:\"Added gcp_region attribute\"}]},\"gen_ai.agent.name\":{brief:\"The name of the agent being used.\",type:\"string\",keys:[\"gen_ai.agent.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ResearchAssistant\",changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.context.utilization\":{brief:\"The fraction of the model context window utilized by this generation.\",type:\"double\",keys:[\"gen_ai.context.utilization\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.75,changelog:[{version:\"0.5.0\",prs:[315],description:\"Added gen_ai.context.utilization attribute\"}]},\"gen_ai.context.window_size\":{brief:\"The maximum context window size supported by the model for this generation.\",type:\"integer\",keys:[\"gen_ai.context.window_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128e3,changelog:[{version:\"0.5.0\",prs:[315],description:\"Added gen_ai.context.window_size attribute\"}]},\"gen_ai.conversation.id\":{brief:\"The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.\",type:\"string\",keys:[\"gen_ai.conversation.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"conv_5j66UpCpwteGg4YSxUnt7lPY\",changelog:[{version:\"0.4.0\",prs:[250]}]},\"gen_ai.cost.cache_creation.input_tokens\":{brief:\"The cost of input tokens written to cache in USD.\",type:\"double\",keys:[\"gen_ai.cost.cache_creation.input_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.cache_creation.input_tokens attribute\"}],additionalContext:[\"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.\",\"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.\",\"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.\"]},\"gen_ai.cost.cache_read.input_tokens\":{brief:\"The cost of cached input tokens in USD.\",type:\"double\",keys:[\"gen_ai.cost.cache_read.input_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.cache_read.input_tokens attribute\"}],additionalContext:[\"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.\",\"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.\",\"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.\"]},\"gen_ai.cost.input_tokens\":{brief:\"The total cost of all input tokens in USD (includes cached and cache creation tokens).\",type:\"double\",keys:[\"gen_ai.cost.input_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:123.45,changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]}],additionalContext:[\"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.\",\"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.\",\"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.\"]},\"gen_ai.cost.output_tokens\":{brief:\"The total cost of all output tokens in USD (includes reasoning tokens).\",type:\"double\",keys:[\"gen_ai.cost.output_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:123.45,changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]}],additionalContext:[\"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.\",\"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.\",\"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.\"]},\"gen_ai.cost.reasoning.output_tokens\":{brief:\"The cost of reasoning output tokens in USD.\",type:\"double\",keys:[\"gen_ai.cost.reasoning.output_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,changelog:[{version:\"0.16.0\",description:\"Added gen_ai.cost.reasoning.output_tokens attribute\"}],additionalContext:[\"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.\",\"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.\",\"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.\"]},\"gen_ai.cost.total_tokens\":{brief:\"The total cost for the tokens used.\",type:\"double\",keys:[\"gen_ai.cost.total_tokens\",\"ai.total_cost\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12.34,aliases:[\"ai.total_cost\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[126]}],additionalContext:[\"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.\",\"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.\"]},\"gen_ai.embeddings.input\":{brief:\"The input to the embeddings model.\",type:\"string\",keys:[\"gen_ai.embeddings.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"What's the weather in Paris?\",changelog:[{version:\"0.3.1\",prs:[195]}]},\"gen_ai.function_id\":{brief:\"Framework-specific tracing label for the execution of a function or other unit of execution in a generative AI system.\",type:\"string\",keys:[\"gen_ai.function_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-awesome-function\",changelog:[{version:\"0.5.0\",prs:[308],description:\"Added gen_ai.function_id attribute\"}]},\"gen_ai.input.messages\":{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:\"...\"}`. For `gen_ai.decide` operations, the array holds one object `{type: \"evaluation\", state: ..., questions: {...}}` with the evaluated state and the questions keyed by name, as the caller passed them.',type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Weather in Paris?\"}]}, {\"role\": \"assistant\", \"parts\": [{\"type\": \"tool_call\", \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\", \"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]}, {\"role\": \"tool\", \"parts\": [{\"type\": \"tool_call_response\", \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\", \"result\": \"rainy, 57\\xB0F\"}]}]',aliases:[\"ai.texts\",\"ai.prompt.messages\",\"gen_ai.prompt\",\"ai.prompt\"],changelog:[{version:\"0.26.0\",prs:[650],description:\"Describe the evaluation message shape for gen_ai.evaluate\"},{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.memory.query.text\":{brief:\"The search query used to retrieve memories. Only applicable to 'search_memory'. Opt-in: instrumentations SHOULD NOT capture this by default and SHOULD gate it behind explicit user opt-in, as it may contain sensitive information.\",type:\"string\",keys:[\"gen_ai.memory.query.text\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"user dietary preferences\",examples:[\"user dietary preferences\",\"past flight bookings\"],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.query.text attribute\"}]},\"gen_ai.memory.records\":{brief:\"The memory records stored or retrieved in a memory operation. Stringified JSON array; each element follows the OTel MemoryRecord schema: {content (required), id, metadata, score}. Opt-in: instrumentations SHOULD NOT capture this by default and SHOULD gate it behind explicit user opt-in, as it may contain sensitive information including user/PII data.\",type:\"string\",keys:[\"gen_ai.memory.records\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"content\": \"User prefers dark mode\", \"id\": \"mem_123\", \"score\": 0.95}, {\"content\": {\"preference\": \"vegetarian meals\", \"confidence\": 0.9}, \"metadata\": {\"source\": \"profile\"}}]',examples:['[{\"content\": \"User prefers dark mode\", \"id\": \"mem_123\", \"score\": 0.95}, {\"content\": {\"preference\": \"vegetarian meals\", \"confidence\": 0.9}, \"metadata\": {\"source\": \"profile\"}}]'],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.records attribute\"}]},\"gen_ai.memory.record.count\":{brief:\"The number of memory records relevant to the operation. For 'search_memory' this is the number returned; for 'create_memory', 'update_memory', 'upsert_memory' and 'delete_memory' it is the number the operation attempted to create, modify, create-or-update, or delete respectively.\",type:\"integer\",keys:[\"gen_ai.memory.record.count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:3,examples:[3],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.record.count attribute\"}]},\"gen_ai.memory.record.id\":{brief:\"The unique identifier of the memory record. Set when the operation applies to a specific memory record. For 'delete_memory', its absence may indicate the operation intends to delete all memory records in the store.\",type:\"string\",keys:[\"gen_ai.memory.record.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"mem_5j66UpCpwteGg4YSxUnt7lPY\",examples:[\"mem_5j66UpCpwteGg4YSxUnt7lPY\"],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.record.id attribute\"}]},\"gen_ai.memory.store.id\":{brief:\"The unique identifier of the memory store the operation targets. What this maps to is implementation-specific (e.g. a collection, namespace, or vector index) and SHOULD be documented per integration.\",type:\"string\",keys:[\"gen_ai.memory.store.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ms_abc123\",examples:[\"ms_abc123\",\"user-preferences-store\",\"seer-knowledge\"],changelog:[{version:\"0.27.0\",prs:[653],description:\"Added gen_ai.memory.store.id attribute\"}]},\"gen_ai.operation.name\":{brief:\"The name of the operation being performed.\",type:\"string\",keys:[\"gen_ai.operation.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"chat\",changelog:[{version:\"0.27.0\",prs:[653,680],description:\"Added memory operation values, 'evaluate', and 'decide' to the well-known values; deprecated 'evaluate' in favor of 'decide'\"},{version:\"0.4.0\",prs:[225]},{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.operation.type\":{brief:\"The type of AI operation. Added during ingestion based on span.op and gen_ai.operation.type. Used to filter and aggregate data in the UI\",type:\"string\",keys:[\"gen_ai.operation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"tool\",changelog:[{version:\"0.27.0\",prs:[653],description:\"Added 'memory' value\"},{version:\"0.4.0\",prs:[257]},{version:\"0.1.0\",prs:[113,127]}]},\"gen_ai.output.messages\":{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. For `gen_ai.decide` operations, the array holds one object `{type: \"evaluation\", answers: {...}}` with the answers keyed by question name, as the provider returned them.',type:\"string\",keys:[\"gen_ai.output.messages\",\"ai.response.text\",\"ai.response.toolCalls\",\"ai.responses\",\"ai.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"The weather in Paris is currently rainy with a temperature of 57\\xB0F.\"}], \"finish_reason\": \"stop\"}]',aliases:[\"ai.response.toolCalls\",\"ai.response.text\"],changelog:[{version:\"0.26.0\",prs:[650],description:\"Describe the evaluation message shape for gen_ai.evaluate\"},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.pipeline.name\":{brief:\"Name of the AI pipeline or chain being executed.\",type:\"string\",keys:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\",\"langchain.chain.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Autofix Pipeline\",aliases:[\"ai.pipeline.name\",\"langchain.chain.name\"],changelog:[{version:\"0.22.0\",prs:[599],description:\"Added langchain.chain.name as an alias\"},{version:\"0.1.0\",prs:[76,127]}]},\"gen_ai.prompt\":{brief:\"The input messages sent to the model\",type:\"string\",keys:[\"gen_ai.input.messages\",\"ai.input_messages\",\"ai.prompt\",\"ai.prompt.messages\",\"ai.texts\",\"gen_ai.prompt\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',deprecation:{replacement:\"gen_ai.input.messages\",reason:\"Deprecated from OTEL, use gen_ai.input.messages with the new format instead.\",status:\"backfill\"},aliases:[\"gen_ai.input.messages\",\"ai.texts\",\"ai.prompt.messages\",\"ai.prompt\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.prompt as an alias\"},{version:\"0.1.0\",prs:[74,108,119]},{version:\"0.0.0\"}]},\"gen_ai.prompt.name\":{brief:\"The name of the prompt that uniquely identifies it.\",type:\"string\",keys:[\"gen_ai.prompt.name\",\"mcp.prompt.name\"],applyScrubbing:{key:\"manual\",reason:\"Prompt names may reveal user behavior patterns or sensitive operations\"},isInOtel:!0,visibility:\"public\",example:\"summarize_text\",aliases:[\"mcp.prompt.name\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Added gen_ai.prompt.name attribute\"}]},\"gen_ai.prompt.variable.<key>\":{brief:\"Variables supplied to the prompt template. The <key> is the variable name, and the value is the variable value serialized as a string.\",type:\"string\",keys:[\"gen_ai.prompt.variable.<key>\"],applyScrubbing:{key:\"auto\",reason:\"Prompt variables contain user input and may include sensitive information\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"gen_ai.prompt.variable.language='French'\",examples:[\"gen_ai.prompt.variable.language='French'\",\"gen_ai.prompt.variable.topic='weather'\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Added the OpenTelemetry convention for prompt variables\"}],additionalContext:[\"Capture only when the user explicitly opts in to recording prompt inputs. In MCP, these values are the arguments supplied in prompts/get requests.\"]},\"gen_ai.provider.name\":{brief:\"The Generative AI provider as identified by the client or server instrumentation.\",type:\"string\",keys:[\"gen_ai.provider.name\",\"ai.model.provider\",\"gen_ai.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"openai\",aliases:[\"ai.model.provider\",\"gen_ai.system\"],changelog:[{version:\"0.4.0\",prs:[253]}]},\"gen_ai.request.available_tools\":{brief:\"The available tools for the model. It has to be a stringified version of an array of objects.\",type:\"string\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"description\": \"Get the weather for a given location\"}, {\"name\": \"get_news\", \"description\": \"Get the news for a given topic\"}]',deprecation:{replacement:\"gen_ai.tool.definitions\",status:\"normalize\"},aliases:[\"gen_ai.tool.definitions\"],changelog:[{version:\"0.22.0\",prs:[595],description:\"Added gen_ai.tool.definitions as an alias\"},{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,127]}]},\"gen_ai.request.frequency_penalty\":{brief:\"Used to reduce repetitiveness of generated tokens. The higher the value, the stronger a penalty is applied to previously present tokens, proportional to how many times they have already appeared in the prompt or prior generation.\",type:\"double\",keys:[\"gen_ai.request.frequency_penalty\",\"ai.frequency_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.5,aliases:[\"ai.frequency_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.max_tokens\":{brief:\"The maximum number of tokens to generate in the response.\",type:\"integer\",keys:[\"gen_ai.request.max_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2048,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.request.messages\":{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:\"...\"}`.',type:\"string\",keys:[\"gen_ai.request.messages\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",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\"}}]',deprecation:{replacement:\"gen_ai.input.messages\",status:\"transform\",transformation:\"gen_ai_request_messages_to_input_messages\"},aliases:[\"ai.input_messages\"],changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74,108,119,122]}]},\"gen_ai.request.model\":{brief:\"The model identifier being used for the request.\",type:\"string\",keys:[\"gen_ai.request.model\",\"ai.model.id\",\"ai.model_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gpt-4-turbo-preview\",aliases:[\"ai.model_id\",\"ai.model.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.model.id as an alias\"},{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.request.presence_penalty\":{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.\",type:\"double\",keys:[\"gen_ai.request.presence_penalty\",\"ai.presence_penalty\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.5,aliases:[\"ai.presence_penalty\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.reasoning.level\":{brief:\"The reasoning or thinking effort level requested for a GenAI model.\",type:\"string\",keys:[\"gen_ai.request.reasoning.level\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"high\",changelog:[{version:\"0.17.0\",prs:[502],description:\"Added gen_ai.request.reasoning.level attribute\"}]},\"gen_ai.request.schema\":{brief:\"The stringified JSON schema the model output must conform to.\",type:\"string\",keys:[\"gen_ai.request.schema\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}',examples:['{\"type\":\"object\",\"properties\":{\"city\":{\"type\":\"string\"}}}'],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the requested output schema.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added gen_ai.request.schema attribute\"}]},\"gen_ai.request.seed\":{brief:\"The seed, ideally models given the same seed and same other parameters will produce the exact same output.\",type:\"string\",keys:[\"gen_ai.request.seed\",\"ai.seed\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1234567890\",aliases:[\"ai.seed\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.request.stop_sequences\":{brief:\"List of sequences that the model will use to stop generating further tokens.\",type:\"string[]\",keys:[\"gen_ai.request.stop_sequences\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:[\"forest\",\"lived\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added gen_ai.request.stop_sequences attribute\"}]},\"gen_ai.request.temperature\":{brief:\"For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.\",type:\"double\",keys:[\"gen_ai.request.temperature\",\"ai.temperature\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.1,aliases:[\"ai.temperature\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.top_k\":{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).\",type:\"integer\",keys:[\"gen_ai.request.top_k\",\"ai.top_k\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:35,aliases:[\"ai.top_k\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.request.top_p\":{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).\",type:\"double\",keys:[\"gen_ai.request.top_p\",\"ai.top_p\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.7,aliases:[\"ai.top_p\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}]},\"gen_ai.response.finish_reason\":{brief:\"The reason why the model stopped generating (singular form).\",type:\"string\",keys:[\"gen_ai.response.finish_reasons\",\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"COMPLETE\",deprecation:{replacement:\"gen_ai.response.finish_reasons\",status:\"normalize\"},aliases:[\"gen_ai.response.finish_reasons\"],changelog:[{version:\"0.19.0\",prs:[498],description:\"Added gen_ai.response.finish_reason attribute\"}]},\"gen_ai.response.finish_reasons\":{brief:\"The reason why the model stopped generating.\",type:\"string\",keys:[\"gen_ai.response.finish_reasons\",\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"COMPLETE\",aliases:[\"ai.finish_reason\",\"gen_ai.response.finish_reason\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.response.id\":{brief:\"Unique identifier for the completion.\",type:\"string\",keys:[\"gen_ai.response.id\",\"ai.generation_id\",\"ai.response.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gen_123abc\",aliases:[\"ai.generation_id\",\"ai.response.id\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.id as an alias\"},{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.response.model\":{brief:\"The vendor-specific ID of the model used.\",type:\"string\",keys:[\"gen_ai.response.model\",\"ai.response.model\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"gpt-4\",aliases:[\"ai.response.model\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.response.model as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"gen_ai.response.object\":{brief:\"The type of the object returned by the model.\",type:\"string\",keys:[\"gen_ai.response.object\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"chat.completion\",examples:[\"chat.completion\"],deprecation:{reason:\"This attribute is deprecated. The Sentry conventions have no replacement for the raw response object type.\"},changelog:[{version:\"0.21.0\",prs:[583],description:\"Added gen_ai.response.object attribute\"}]},\"gen_ai.response.streaming\":{brief:\"Whether or not the AI model call's response was streamed back asynchronously\",type:\"boolean\",keys:[\"gen_ai.response.streaming\",\"ai.streaming\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,aliases:[\"ai.streaming\"],changelog:[{version:\"0.1.0\",prs:[76]}]},\"gen_ai.response.text\":{brief:\"The model's response text messages. It has to be a stringified version of an array of response text messages.\",type:\"string\",keys:[\"gen_ai.response.text\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",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\"]',deprecation:{replacement:\"gen_ai.output.messages\",status:\"transform\",transformation:\"gen_ai_response_to_output_messages\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.response.time_to_first_chunk\":{brief:\"Time in seconds when the first response content chunk arrived in streaming responses.\",type:\"double\",keys:[\"gen_ai.response.time_to_first_chunk\",\"gen_ai.response.time_to_first_token\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:.6853435,aliases:[\"gen_ai.response.time_to_first_token\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.response.time_to_first_chunk attribute\"}]},\"gen_ai.response.time_to_first_token\":{brief:\"Time in seconds when the first response content chunk arrived in streaming responses.\",type:\"double\",keys:[\"gen_ai.response.time_to_first_chunk\",\"gen_ai.response.time_to_first_token\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.6853435,deprecation:{replacement:\"gen_ai.response.time_to_first_chunk\",status:\"backfill\"},aliases:[\"gen_ai.response.time_to_first_chunk\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.response.time_to_first_chunk\"},{version:\"0.4.0\",prs:[227]}]},\"gen_ai.response.tokens_per_second\":{brief:\"The total output tokens per seconds throughput\",type:\"double\",keys:[\"gen_ai.response.tokens_per_second\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12345.67,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[66]}]},\"gen_ai.response.tool_calls\":{brief:\"The tool calls in the model's response. It has to be a stringified version of an array of objects.\",type:\"string\",keys:[\"gen_ai.response.tool_calls\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'[{\"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]',deprecation:{replacement:\"gen_ai.output.messages\",status:\"transform\",transformation:\"gen_ai_response_to_output_messages\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.system\":{brief:\"The provider of the model.\",type:\"string\",keys:[\"gen_ai.provider.name\",\"ai.model.provider\",\"gen_ai.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"openai\",deprecation:{replacement:\"gen_ai.provider.name\",status:\"normalize\"},aliases:[\"ai.model.provider\",\"gen_ai.provider.name\"],changelog:[{version:\"0.4.0\",prs:[253]},{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.system_instructions\":{brief:\"The system instructions passed to the model.\",type:\"string\",keys:[\"gen_ai.system_instructions\",\"ai.preamble\",\"gen_ai.system.message\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"You are a helpful assistant\",aliases:[\"ai.preamble\"],changelog:[{version:\"0.5.0\",prs:[264]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.system.message\":{brief:\"The system instructions passed to the model.\",type:\"string\",keys:[\"gen_ai.system_instructions\",\"ai.preamble\",\"gen_ai.system.message\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"You are a helpful assistant\",deprecation:{replacement:\"gen_ai.system_instructions\",status:\"backfill\"},changelog:[{version:\"0.4.0\",prs:[221]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.tool.call.arguments\":{brief:\"The arguments of the tool call. It has to be a stringified version of the arguments to the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\",\"gen_ai.tool.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:'{\"location\": \"Paris\"}',aliases:[\"gen_ai.tool.input\",\"ai.toolCall.args\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.call.result\":{brief:\"The result of the tool call. It has to be a stringified version of the result of the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"rainy, 57\\xB0F\",aliases:[\"gen_ai.tool.output\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.definitions\":{brief:\"The list of source system tool definitions available to the GenAI agent or model.\",type:\"string\",keys:[\"gen_ai.tool.definitions\",\"ai.prompt.tools\",\"ai.tools\",\"gen_ai.request.available_tools\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",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\"]}}]',aliases:[\"gen_ai.request.available_tools\"],changelog:[{version:\"0.22.0\",prs:[595],description:\"Added gen_ai.request.available_tools as an alias\"},{version:\"0.4.0\",prs:[221]}]},\"gen_ai.tool.description\":{brief:\"The description of the tool being used.\",type:\"string\",keys:[\"gen_ai.tool.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Searches the web for current information about a topic\",changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.tool.input\":{brief:\"The input of the tool being used. It has to be a stringified version of the input to the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\",\"gen_ai.tool.input\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:'{\"location\": \"Paris\"}',deprecation:{replacement:\"gen_ai.tool.call.arguments\",status:\"normalize\"},aliases:[\"gen_ai.tool.call.arguments\",\"ai.toolCall.args\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.tool.message\":{brief:\"The response from a tool or function call passed to the model.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\",status:\"normalize\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.output\",\"mcp.tool.result.content\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[62]}]},\"gen_ai.tool.name\":{brief:\"Name of the tool utilized by the agent.\",type:\"string\",keys:[\"gen_ai.tool.name\",\"ai.function_call\",\"mcp.tool.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Flights\",aliases:[\"ai.function_call\",\"mcp.tool.name\"],changelog:[{version:\"0.1.0\",prs:[57,127]}]},\"gen_ai.tool.output\":{brief:\"The output of the tool being used. It has to be a stringified version of the output of the tool.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rainy, 57\\xB0F\",deprecation:{replacement:\"gen_ai.tool.call.result\",status:\"normalize\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.message\",\"mcp.tool.result.content\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.5.0\",prs:[265]},{version:\"0.1.0\",prs:[63,74]}]},\"gen_ai.tool.type\":{brief:\"The type of tool being used.\",type:\"string\",keys:[\"gen_ai.tool.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"function\",deprecation:{reason:\"The gen_ai.tool.type attribute is deprecated and should no longer be set.\"},changelog:[{version:\"0.1.0\",prs:[62,127]}]},\"gen_ai.usage.cache_creation.input_tokens\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:100,aliases:[\"gen_ai.usage.input_tokens.cache_write\",\"gen_ai.usage.cache_creation_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_creation_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.cache_creation.input_tokens attribute\"}],additionalContext:[\"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.\"]},\"gen_ai.usage.cache_creation_input_tokens\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,examples:[100],deprecation:{replacement:\"gen_ai.usage.cache_creation.input_tokens\",reason:\"This attribute is being deprecated in favor of gen_ai.usage.cache_creation.input_tokens.\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_creation_input_tokens attribute\"}]},\"gen_ai.usage.cache_read.input_tokens\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\",\"gen_ai.usage.input_tokens.cached\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:50,aliases:[\"gen_ai.usage.input_tokens.cached\",\"gen_ai.usage.cache_read_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_read_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.cache_read.input_tokens attribute\"}],additionalContext:[\"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.\",\"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.\"]},\"gen_ai.usage.cache_read_input_tokens\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\",\"gen_ai.usage.input_tokens.cached\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,examples:[50],deprecation:{replacement:\"gen_ai.usage.cache_read.input_tokens\",reason:\"This attribute is being deprecated in favor of gen_ai.usage.cache_read.input_tokens.\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.input_tokens.cached\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_read_input_tokens attribute\"}]},\"gen_ai.usage.completion_tokens\":{brief:\"The number of tokens used in the GenAI response (completion).\",type:\"integer\",keys:[\"gen_ai.usage.output_tokens\",\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,deprecation:{replacement:\"gen_ai.usage.output_tokens\",status:\"backfill\"},aliases:[\"ai.completion_tokens.used\",\"gen_ai.usage.output_tokens\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],additionalContext:[\"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.\"]},\"gen_ai.usage.input_tokens\":{brief:\"The number of tokens used to process the AI input (prompt) including cached input tokens.\",type:\"integer\",keys:[\"gen_ai.usage.input_tokens\",\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,aliases:[\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Update additional_context to reference gen_ai.usage.cache_read.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[261]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]},{version:\"0.0.0\"}],additionalContext:[\"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.\",\"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.\"]},\"gen_ai.usage.input_tokens.cached\":{brief:\"The number of cached tokens used to process the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\",\"gen_ai.usage.input_tokens.cached\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,deprecation:{replacement:\"gen_ai.usage.cache_read.input_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_read.input_tokens\",\"gen_ai.usage.cache_read_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_read_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.cache_read.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62,112]}],additionalContext:[\"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.\",\"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.\"]},\"gen_ai.usage.input_tokens.cache_write\":{brief:\"The number of tokens written to the cache when processing the AI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\",\"gen_ai.usage.input_tokens.cache_write\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,deprecation:{replacement:\"gen_ai.usage.cache_creation.input_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.cache_creation.input_tokens\",\"gen_ai.usage.cache_creation_input_tokens\"],changelog:[{version:\"0.24.0\",prs:[582],description:\"Added gen_ai.usage.cache_creation_input_tokens as an alias\"},{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.cache_creation.input_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[217,228]}],additionalContext:[\"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.\"]},\"gen_ai.usage.output_tokens\":{brief:\"The number of tokens used for creating the AI output (including reasoning tokens).\",type:\"integer\",keys:[\"gen_ai.usage.output_tokens\",\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,aliases:[\"ai.completion_tokens.used\",\"gen_ai.usage.completion_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Update additional_context to reference gen_ai.usage.reasoning.output_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.5.0\",prs:[261]},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[112]},{version:\"0.0.0\"}],additionalContext:[\"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.\",\"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.\"]},\"gen_ai.usage.output_tokens.reasoning\":{brief:\"The number of tokens used for reasoning to create the AI output.\",type:\"integer\",keys:[\"gen_ai.usage.reasoning.output_tokens\",\"gen_ai.usage.output_tokens.reasoning\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:75,deprecation:{replacement:\"gen_ai.usage.reasoning.output_tokens\",status:\"backfill\"},aliases:[\"gen_ai.usage.reasoning.output_tokens\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Deprecate in favor of gen_ai.usage.reasoning.output_tokens\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[62,112]}],additionalContext:[\"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.\",\"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.\"]},\"gen_ai.usage.prompt_tokens\":{brief:\"The number of tokens used in the GenAI input (prompt).\",type:\"integer\",keys:[\"gen_ai.usage.input_tokens\",\"ai.prompt_tokens.used\",\"gen_ai.usage.prompt_tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:20,deprecation:{replacement:\"gen_ai.usage.input_tokens\",status:\"backfill\"},aliases:[\"ai.prompt_tokens.used\",\"gen_ai.usage.input_tokens\"],changelog:[{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],additionalContext:[\"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.\"]},\"gen_ai.usage.reasoning.output_tokens\":{brief:\"The number of tokens used for reasoning to create the AI output.\",type:\"integer\",keys:[\"gen_ai.usage.reasoning.output_tokens\",\"gen_ai.usage.output_tokens.reasoning\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:75,aliases:[\"gen_ai.usage.output_tokens.reasoning\"],changelog:[{version:\"0.11.0\",prs:[418],description:\"Added gen_ai.usage.reasoning.output_tokens attribute\"}],additionalContext:[\"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.\",\"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.\"]},\"gen_ai.usage.total_tokens\":{brief:\"The total number of tokens used to process the prompt. (input tokens plus output todkens)\",type:\"integer\",keys:[\"gen_ai.usage.total_tokens\",\"ai.total_tokens.used\",\"ai.usage.tokens\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:20,aliases:[\"ai.total_tokens.used\",\"ai.usage.tokens\"],changelog:[{version:\"0.21.0\",prs:[583],description:\"Added ai.usage.tokens as an alias\"},{version:\"0.9.0\",prs:[397],description:\"Add additional_context\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[57]}],additionalContext:[\"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.\",\"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.\"]},\"graphql.document\":{brief:\"The GraphQL document being executed.\",type:\"string\",keys:[\"graphql.document\",\"graphql.source\"],applyScrubbing:{key:\"auto\",reason:\"The document may contain sensitive information in arguments or variables. Instrumentation should redact sensitive information when possible.\"},isInOtel:!0,visibility:\"public\",example:\"query findBookById { bookById(id: ?) { name } }\",aliases:[\"graphql.source\"],changelog:[{version:\"0.21.0\",prs:[584],description:\"Added graphql.source as an alias\"},{version:\"0.7.0\",description:\"Adds the `graphql.document` attribute to track the GraphQL document being executed.\"}]},\"graphql.operation.name\":{brief:\"The name of the operation being executed.\",type:\"string\",keys:[\"graphql.operation.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"findBookById\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"graphql.operation.type\":{brief:\"The type of the operation being executed.\",type:\"string\",keys:[\"graphql.operation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"query\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"graphql.processing.type\":{brief:\"The type of processing represented by this span.\",type:\"string\",keys:[\"graphql.processing.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"parse\",examples:[\"parse\",\"validate\",\"execute\",\"resolve\"],changelog:[{version:\"0.21.0\",prs:[572],description:\"Added graphql.processing.type attribute\"}],additionalContext:[\"Well-known values are request, parse, validate, variable_coercion, plan, execute, subscription_event, step_execute, resolve, dataloader_dispatch, dataloader_batch and _OTHER. Use one of these if it applies, otherwise a custom value.\",\"Not to be confused with graphql.operation.type, which holds the GraphQL operation type (query, mutation, subscription) and only applies to spans that run an operation.\"]},\"graphql.source\":{brief:\"The GraphQL document being executed.\",type:\"string\",keys:[\"graphql.document\",\"graphql.source\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"query findBookById { bookById(id: ?) { name } }\",examples:[\"query findBookById { bookById(id: ?) { name } }\"],deprecation:{replacement:\"graphql.document\",reason:\"This attribute is being deprecated in favor of graphql.document, which is the OpenTelemetry name for the same value.\",status:\"backfill\"},aliases:[\"graphql.document\"],changelog:[{version:\"0.21.0\",prs:[584],description:\"Added graphql.source attribute\"}]},\"grpc.error.bad_request.field_violations\":{brief:\"The individual field violations from a google.rpc.BadRequest error detail. Each entry is a JSON-encoded object with field, description, reason, and (optional) localized_message keys, mirroring google.rpc.BadRequest.FieldViolation.\",type:\"string[]\",keys:[\"grpc.error.bad_request.field_violations\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:['{\"field\":\"email\",\"description\":\"must be a valid email address\",\"reason\":\"FIELD_INVALID\",\"localized_message\":{\"locale\":\"en-US\",\"message\":\"Must be a valid email address\"}}'],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.bad_request.field_violations attribute\"}]},\"grpc.error.debug_info.detail\":{brief:\"Additional debugging information, such as a server-side stack trace, from a google.rpc.DebugInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.debug_info.detail\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"at com.example.Service.method(Service.java:42)\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.debug_info.detail attribute\"}]},\"grpc.error.debug_info.stack_entries\":{brief:\"The server-side stack trace entries from a google.rpc.DebugInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string[]\",keys:[\"grpc.error.debug_info.stack_entries\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:[\"com.example.Service.method(Service.java:42)\",\"com.example.Server.handle(Server.java:100)\"],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.debug_info.stack_entries attribute\"}]},\"grpc.error.error_info.domain\":{brief:\"The logical grouping to which the gRPC error reason belongs, from the google.rpc.ErrorInfo error detail.\",type:\"string\",keys:[\"grpc.error.error_info.domain\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.sentry.io\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.error_info.domain attribute\"}]},\"grpc.error.error_info.metadata.<key>\":{brief:\"Additional structured metadata attached to a google.rpc.ErrorInfo error detail, with <key> being the metadata key name. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.error_info.metadata.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"grpc.error.error_info.metadata.user_id='123'\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.error_info.metadata.<key> attribute\"}]},\"grpc.error.error_info.reason\":{brief:\"The reason for the gRPC error, as defined by the service that generated it, from the google.rpc.ErrorInfo error detail.\",type:\"string\",keys:[\"grpc.error.error_info.reason\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"FIELD_INVALID\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.error_info.reason attribute\"}]},\"grpc.error.precondition_failure.violations\":{brief:\"The individual precondition violations from a google.rpc.PreconditionFailure error detail. Each entry is a JSON-encoded object with type, subject, and description keys. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly, since violation subjects may identify specific resources or users.\",type:\"string[]\",keys:[\"grpc.error.precondition_failure.violations\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:['{\"type\":\"TOS\",\"subject\":\"example.com/user/123\",\"description\":\"User must accept the terms of service\"}'],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.precondition_failure.violations attribute\"}]},\"grpc.error.quota_failure.violations\":{brief:\"The individual quota violations from a google.rpc.QuotaFailure error detail. Each entry is a JSON-encoded object with subject, description, api_service, quota_metric, quota_id, quota_dimensions, quota_value, and (optional) future_quota_value keys, mirroring google.rpc.QuotaFailure.Violation. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly, since violation subjects may identify specific resources or users.\",type:\"string[]\",keys:[\"grpc.error.quota_failure.violations\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:['{\"subject\":\"clientip:127.0.0.1\",\"description\":\"Limit checks failed.\",\"api_service\":\"example.googleapis.com\",\"quota_metric\":\"example.googleapis.com/read_requests\",\"quota_id\":\"ReadRequestsPerMinutePerProject\",\"quota_dimensions\":{\"region\":\"us-central1\"},\"quota_value\":1000}'],changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.quota_failure.violations attribute\"}]},\"grpc.error.resource_info.description\":{brief:\"A description of the error that occurred while accessing the resource, from a google.rpc.ResourceInfo error detail.\",type:\"string\",keys:[\"grpc.error.resource_info.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Instance is not ready for the request.\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.description attribute\"}]},\"grpc.error.resource_info.owner\":{brief:\"The owner of the resource being accessed (e.g. project or account owning it), from a google.rpc.ResourceInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.resource_info.owner\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"user@example.com\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.owner attribute\"}]},\"grpc.error.resource_info.resource_name\":{brief:\"The name of the resource being accessed, from a google.rpc.ResourceInfo error detail. SDKs should only send this attribute when sendDefaultPii is enabled or dataCollection is configured accordingly.\",type:\"string\",keys:[\"grpc.error.resource_info.resource_name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"projects/example/instances/example-instance\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.resource_name attribute\"}]},\"grpc.error.resource_info.resource_type\":{brief:\"The type of resource being accessed, from a google.rpc.ResourceInfo error detail.\",type:\"string\",keys:[\"grpc.error.resource_info.resource_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"database\",changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.resource_info.resource_type attribute\"}]},\"grpc.error.retry_info.retry_delay_ms\":{brief:\"How long the client should wait before retrying the gRPC call, in milliseconds, from the google.rpc.RetryInfo error detail.\",type:\"integer\",keys:[\"grpc.error.retry_info.retry_delay_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:5e3,changelog:[{version:\"0.17.0\",prs:[460],description:\"Added grpc.error.retry_info.retry_delay_ms attribute\"}]},hardwareConcurrency:{brief:\"The number of logical CPU cores available.\",type:\"string\",keys:[\"device.processor_count\",\"hardwareConcurrency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"14\",deprecation:{replacement:\"device.processor_count\",reason:\"Old namespace-less attribute, to be replaced with device.processor_count for span-first future\",status:\"backfill\"},aliases:[\"device.processor_count\"],changelog:[{version:\"0.5.0\",prs:[281,300],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"http.client_ip\":{brief:\"Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"client.address\",\"http.client_ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"client.address\",status:\"backfill\"},aliases:[\"client.address\"],changelog:[{version:\"0.1.0\",prs:[61,106,127]},{version:\"0.0.0\"}]},\"http.decoded_response_content_length\":{brief:\"The decoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,deprecation:{replacement:\"http.response.body.decoded_size\",status:\"backfill\"},aliases:[\"http.response.body.decoded_size\",\"http.response_content_length_uncompressed\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Deprecated in favor of http.response.body.decoded_size\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"http.decoded_response_content_length\",type:\"byte\"}},\"http.flavor\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",deprecation:{replacement:\"network.protocol.version\",status:\"backfill\"},aliases:[\"network.protocol.version\",\"net.protocol.version\",\"messaging.protocol_version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.fragment\":{brief:\"The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not.\",type:\"string\",keys:[\"http.fragment\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"#details\",changelog:[{version:\"0.0.0\"}]},\"http.host\":{brief:\"The domain name.\",type:\"string\",keys:[\"http.host\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"Deprecated, use one of `server.address` or `client.address`, depending on the usage\"},aliases:[\"address\",\"server.address\",\"client.address\",\"http.server_name\",\"net.host.name\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.method\":{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\",status:\"backfill\"},aliases:[\"http.request.method\",\"http.request_method\",\"method\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"http.query\":{brief:\"The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not.\",type:\"string\",keys:[\"http.query\"],applyScrubbing:{key:\"auto\",reason:\"Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\"},isInOtel:!1,visibility:\"public\",example:\"?foo=bar&bar=baz\",changelog:[{version:\"0.0.0\"}]},\"http.request.body.data\":{brief:\"HTTP request body data. Can be given as string or structural data of any format.\",type:\"string\",keys:[\"http.request.body.data\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:'[{\"role\": \"user\", \"message\": \"hello\"}]',changelog:[{version:\"0.6.0\",prs:[336],description:\"Added http.request.body.data attribute\"}]},\"http.request.body.decoded_size\":{brief:\"The decoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.decoded_size\",\"http.request_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,aliases:[\"http.request_content_length_uncompressed\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request.body.decoded_size attribute\"}],additionalContext:[\"This is the size after content decoding. Set it only when the decoded size is actually known, for example by measuring a decompressed request stream.\",\"Do not derive this from the `content-length` header, which always carries the encoded size. Use `http.request.body.size` for that.\"]},\"http.request.body.size\":{brief:\"The encoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.size\",\"http.request_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,aliases:[\"http.request_content_length\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request.body.size attribute\"}],additionalContext:[\"This is the on-the-wire (encoded) size. The `content-length` header always carries the encoded size, so set this attribute whenever `content-length` is known, regardless of whether `content-encoding` is present.\"]},\"http.request.connection_end\":{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.\",type:\"double\",keys:[\"http.request.connection_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955515e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.connect_start\":{brief:\"The UNIX timestamp representing the time immediately before the user agent starts establishing the connection to the server to retrieve the resource.\",type:\"double\",keys:[\"http.request.connect_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555111e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request_content_length\":{brief:\"The encoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.size\",\"http.request_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,deprecation:{replacement:\"http.request.body.size\",status:\"backfill\"},aliases:[\"http.request.body.size\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request_content_length attribute, deprecated in favor of http.request.body.size\"}]},\"http.request_content_length_uncompressed\":{brief:\"The decoded body size of the request (in bytes).\",type:\"integer\",keys:[\"http.request.body.decoded_size\",\"http.request_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:456,deprecation:{replacement:\"http.request.body.decoded_size\",status:\"backfill\"},aliases:[\"http.request.body.decoded_size\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.request_content_length_uncompressed attribute, deprecated in favor of http.request.body.decoded_size\"}]},\"http.request.domain_lookup_end\":{brief:\"The UNIX timestamp representing the time immediately after the browser finishes the domain-name lookup for the resource.\",type:\"double\",keys:[\"http.request.domain_lookup_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555201e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.domain_lookup_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts the domain name lookup for the resource.\",type:\"double\",keys:[\"http.request.domain_lookup_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555322e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.fetch_start\":{brief:\"The UNIX timestamp representing the time immediately before the browser starts to fetch the resource.\",type:\"double\",keys:[\"http.request.fetch_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555389e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.header.<key>\":{brief:\"HTTP request headers, <key> being the lower-cased, but otherwise unchanged HTTP Header name, the value being the header values.\",type:\"string[]\",keys:[\"http.request.header.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.request.header.custom-header=['foo', 'bar']\",examples:[\"http.request.header.custom-header=['foo', 'bar']\",\"http.request.header.content-length=['123']\"],changelog:[{version:\"0.4.0\",prs:[201,204]},{version:\"0.1.0\",prs:[103]}]},\"http.request.method\":{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"GET\",aliases:[\"method\",\"http.method\",\"http.request_method\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"http.request_method\":{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\",status:\"backfill\"},aliases:[\"method\",\"http.method\",\"http.request.method\"],changelog:[{version:\"0.6.0\",prs:[343],description:\"Added http.request_method attribute\"}]},\"http.request.redirect_end\":{brief:\"The UNIX timestamp representing the timestamp immediately after receiving the last byte of the response of the last redirect\",type:\"double\",keys:[\"http.request.redirect_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829558502e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[130,134]}]},\"http.request.redirect_start\":{brief:\"The UNIX timestamp representing the start time of the fetch which that initiates the redirect.\",type:\"double\",keys:[\"http.request.redirect_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732829555495e-3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.request_start\":{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.\",type:\"double\",keys:[\"http.request.request_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955551e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.resend_count\":{brief:\"The ordinal number of request resending attempt (for any reason, including redirects).\",type:\"integer\",keys:[\"http.request.resend_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.request.response_end\":{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.\",type:\"double\",keys:[\"http.request.response_end\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955589e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.response_start\":{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.\",type:\"double\",keys:[\"http.request.response_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:17328295557e-1,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.same_origin\":{brief:\"Indicates that a URL has the same origin as the current page's origin in the browser.\",type:\"boolean\",keys:[\"http.request.same_origin\",\"url.same_origin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,aliases:[\"url.same_origin\"],changelog:[{version:\"0.16.0\",prs:[456],description:\"Added http.request.same_origin attribute\"}]},\"http.request.secure_connection_start\":{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.\",type:\"double\",keys:[\"http.request.secure_connection_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955573e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[134]},{version:\"0.0.0\"}]},\"http.request.time_to_first_byte\":{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\",type:\"double\",keys:[\"http.request.time_to_first_byte\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.032,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[131]}]},\"http.request.worker_start\":{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.\",type:\"double\",keys:[\"http.request.worker_start\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:173282955368e-2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[130,134]}]},\"http.response.body.decoded_size\":{brief:\"The decoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,aliases:[\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.response.body.decoded_size attribute\"}],additionalContext:[\"This is the size after content decoding. Set it only when the decoded size is actually known, for example from the browser Resource Timing `decodedBodySize` or by measuring a decompressed response stream.\",\"Do not derive this from the `content-length` header, which always carries the encoded size. Use `http.response.body.size` for that.\"]},\"http.response.body.size\":{brief:\"The encoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.size\",\"http.response.header.content-length\",\"http.response_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,aliases:[\"http.response_content_length\",\"http.response.header.content-length\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[106]},{version:\"0.0.0\"}]},\"http.response_content_length\":{brief:\"The encoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.size\",\"http.response.header.content-length\",\"http.response_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:123,deprecation:{replacement:\"http.response.body.size\",status:\"backfill\"},aliases:[\"http.response.body.size\",\"http.response.header.content-length\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61,106]},{version:\"0.0.0\"}],searchAlias:{name:\"http.response_content_length\",type:\"byte\"}},\"http.response_content_length_uncompressed\":{brief:\"The decoded body size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\",\"http.response_content_length_uncompressed\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:456,deprecation:{replacement:\"http.response.body.decoded_size\",status:\"backfill\"},aliases:[\"http.response.body.decoded_size\",\"http.decoded_response_content_length\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.response_content_length_uncompressed attribute, deprecated in favor of http.response.body.decoded_size\"}]},\"http.response.header.content-length\":{brief:\"The size of the message body sent to the recipient (in bytes)\",type:\"string\",keys:[\"http.response.header.content-length\",\"http.response.body.size\",\"http.response_content_length\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http.response.header.custom-header=['foo', 'bar']\",aliases:[\"http.response_content_length\",\"http.response.body.size\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"http.response.header.<key>\":{brief:\"HTTP response headers, <key> being the lower-cased, but otherwise unchanged HTTP Header name, the value being the header values.\",type:\"string[]\",keys:[\"http.response.header.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.response.header.custom-header=['foo', 'bar']\",examples:[\"http.response.header.custom-header=['foo', 'bar']\",\"http.response.header.content-length=['123']\"],changelog:[{version:\"0.4.0\",prs:[201,204]},{version:\"0.1.0\",prs:[103]}]},\"http.response.size\":{brief:\"The transfer size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.size\",\"http.response_transfer_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:456,aliases:[\"http.response_transfer_size\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"http.response.status_code\":{brief:\"The status code of the HTTP response.\",type:\"integer\",keys:[\"http.response.status_code\",\"http.response_status_code\",\"http.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:404,aliases:[\"http.status_code\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"http.response_status_code\"}},\"http.response.status_text\":{brief:\"The reason phrase of the HTTP response.\",type:\"string\",keys:[\"http.response.status_text\",\"http.status_text\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"NOT FOUND\",aliases:[\"http.status_text\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.response.status_text attribute\"}],additionalContext:[\"HTTP/2 and HTTP/3 do not carry a reason phrase. Do not set this attribute when the protocol provides none; use `http.response.status_code` instead.\"]},\"http.response_transfer_size\":{brief:\"The transfer size of the response (in bytes).\",type:\"integer\",keys:[\"http.response.size\",\"http.response_transfer_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:456,deprecation:{replacement:\"http.response.size\",status:\"backfill\"},aliases:[\"http.response.size\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}],searchAlias:{name:\"http.response_transfer_size\",type:\"byte\"}},\"http.route\":{brief:\"The matched route, that is, the path template in the format used by the respective server framework.\",type:\"string\",keys:[\"http.route\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/users/:id\",examples:[\"/users/:id\",\"my-controller/my-action/{id}\",\"/posts\"],aliases:[\"route\"],changelog:[{version:\"0.19.0\",prs:[505,521],description:\"Added multiple examples, removed alias to `url.template`, added additional context\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}],additionalContext:[\"This attribute should primarily be set by server-side instrumentation that captures the framework route of an incoming request.\",\"For `http.client` spans and client-side routing, use `url.template` instead.\"]},\"http.scheme\":{brief:\"The URI scheme component identifying the used protocol.\",type:\"string\",keys:[\"url.scheme\",\"http.scheme\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https\",deprecation:{replacement:\"url.scheme\",status:\"backfill\"},aliases:[\"url.scheme\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"http.server_name\":{brief:\"The server domain name\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",status:\"backfill\"},aliases:[\"address\",\"server.address\",\"net.host.name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"http.server.request.time_in_queue\":{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.\",type:\"double\",keys:[\"http.server.request.time_in_queue\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,changelog:[{version:\"0.5.0\",prs:[267]}]},\"http.status_code\":{brief:\"The status code of the HTTP response.\",type:\"integer\",keys:[\"http.response.status_code\",\"http.response_status_code\",\"http.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:404,deprecation:{replacement:\"http.response.status_code\",status:\"backfill\"},aliases:[\"http.response.status_code\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"http.status_text\":{brief:\"The reason phrase of the HTTP response\",type:\"string\",keys:[\"http.response.status_text\",\"http.status_text\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"NOT FOUND\",examples:[\"NOT FOUND\"],deprecation:{replacement:\"http.response.status_text\",status:\"backfill\"},aliases:[\"http.response.status_text\"],changelog:[{version:\"0.21.0\",prs:[574],description:\"Added http.status_text attribute, deprecated in favor of http.response.status_text\"}]},\"http.target\":{brief:\"The pathname and query string of the URL.\",type:\"string\",keys:[\"http.target\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/test?foo=bar#buzz\",deprecation:{reason:\"This attribute is being deprecated in favor of url.path, url.query and url.fragment. The value holds all three parts at once, so it has no single replacement.\"},changelog:[{version:\"0.21.0\",prs:[587],description:\"Documented url.path, url.query and url.fragment as the replacements for http.target\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"http.url\":{brief:\"The URL of the resource that was fetched.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",deprecation:{replacement:\"url.full\",status:\"backfill\"},aliases:[\"url.full\",\"url\",\"aws.request.url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.1.0\",prs:[61,108]},{version:\"0.0.0\"}]},\"http.user_agent\":{brief:\"Value of the HTTP User-Agent header sent by the client.\",type:\"string\",keys:[\"user_agent.original\",\"http.user_agent\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",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\",deprecation:{replacement:\"user_agent.original\",status:\"backfill\"},aliases:[\"user_agent.original\"],changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},id:{brief:\"A unique identifier for the span.\",type:\"string\",keys:[\"id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"f47ac10b58cc4372a5670e02b2c3d479\",changelog:[{version:\"0.0.0\"}]},inp:{brief:\"The value of the recorded Interaction to Next Paint (INP) web vital\",type:\"double\",keys:[\"browser.web_vital.inp.value\",\"inp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,deprecation:{replacement:\"browser.web_vital.inp.value\",reason:\"The INP web vital is now recorded as a browser.web_vital.inp.value attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.inp.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"integrity.blocked_url\":{brief:\"The URL of the resource blocked by the integrity policy.\",type:\"string\",keys:[\"integrity.blocked_url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/app.js\",changelog:[{version:\"0.27.0\",prs:[691]}]},\"integrity.destination\":{brief:\"The destination type of the resource affected by the integrity policy.\",type:\"string\",keys:[\"integrity.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"script\",changelog:[{version:\"0.27.0\",prs:[691]}]},\"integrity.document_url\":{brief:\"The URL of the document where the integrity violation occurred.\",type:\"string\",keys:[\"integrity.document_url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/index.html\",changelog:[{version:\"0.27.0\",prs:[691]}]},\"integrity.report_only\":{brief:\"Whether the integrity violation was generated by a report-only policy.\",type:\"boolean\",keys:[\"integrity.report_only\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.27.0\",prs:[691]}]},\"jsonrpc.protocol.version\":{brief:\"The version of the JSON-RPC protocol used.\",type:\"string\",keys:[\"jsonrpc.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2.0\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Added jsonrpc.protocol.version attribute\"}]},\"jsonrpc.request.id\":{brief:\"The JSON-RPC request identifier, used to correlate a request with its response.\",type:\"string\",keys:[\"jsonrpc.request.id\",\"mcp.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1\",examples:[\"1\"],aliases:[\"mcp.request.id\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the session-scoped uniqueness requirement from the request identifier\"},{version:\"0.12.0\",prs:[420],description:\"Added jsonrpc.request.id attribute\"}]},\"jvm.gc.action\":{brief:\"Name of the garbage collector action.\",type:\"string\",keys:[\"jvm.gc.action\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"end of minor GC\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.gc.name\":{brief:\"Name of the garbage collector.\",type:\"string\",keys:[\"jvm.gc.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Young Generation\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.memory.pool.name\":{brief:\"Name of the memory pool.\",type:\"string\",keys:[\"jvm.memory.pool.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Old Gen\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.memory.type\":{brief:\"Name of the memory pool.\",type:\"string\",keys:[\"jvm.memory.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"G1 Old Gen\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"jvm.thread.daemon\":{brief:\"Whether the thread is daemon or not.\",type:\"boolean\",keys:[\"jvm.thread.daemon\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"jvm.thread.state\":{brief:\"State of the thread.\",type:\"string\",keys:[\"jvm.thread.state\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"blocked\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"koa.name\":{brief:\"The name of the Koa middleware or matched route that handled the request.\",type:\"string\",keys:[\"koa.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{reason:\"No single replacement. SDKs should use http.route for router layers and code.function.name for middleware layers instead.\"},changelog:[{version:\"0.16.0\",prs:[490],description:\"Added koa.name attribute as deprecated\"}]},\"koa.type\":{brief:\"The type of the Koa layer that handled the request.\",type:\"string\",keys:[\"koa.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router\",changelog:[{version:\"0.16.0\",prs:[471],description:\"Added koa.type attribute\"}]},\"langchain.chain.name\":{brief:\"The name of the LangChain chain being executed.\",type:\"string\",keys:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\",\"langchain.chain.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"format_prompt\",examples:[\"format_prompt\",\"RunnableSequence\"],deprecation:{replacement:\"gen_ai.pipeline.name\",reason:\"This attribute is being deprecated in favor of gen_ai.pipeline.name, which is the SDK-agnostic replacement for the name of the AI pipeline or chain being executed.\",status:\"backfill\"},aliases:[\"gen_ai.pipeline.name\",\"ai.pipeline.name\"],changelog:[{version:\"0.22.0\",prs:[599],description:\"Added langchain.chain.name attribute\"}]},lcp:{brief:\"The value of the recorded Largest Contentful Paint (LCP) web vital\",type:\"double\",keys:[\"browser.web_vital.lcp.value\",\"lcp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2500,deprecation:{replacement:\"browser.web_vital.lcp.value\",reason:\"The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.value\"],changelog:[{version:\"0.5.0\",prs:[229],description:\"Added and deprecated attribute to document JS SDK's current behaviour\"}]},\"lcp.element\":{brief:\"The dom element responsible for the largest contentful paint.\",type:\"string\",keys:[\"browser.web_vital.lcp.element\",\"lcp.element\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"img\",deprecation:{replacement:\"browser.web_vital.lcp.element\",reason:\"The LCP element is now recorded as a browser.web_vital.lcp.element attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.element\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"lcp.id\":{brief:\"The id of the dom element responsible for the largest contentful paint.\",type:\"string\",keys:[\"browser.web_vital.lcp.id\",\"lcp.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"#hero\",deprecation:{replacement:\"browser.web_vital.lcp.id\",reason:\"The LCP id is now recorded as a browser.web_vital.lcp.id attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.id\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"lcp.loadTime\":{brief:\"The time it took for the LCP element to be loaded\",type:\"integer\",keys:[\"browser.web_vital.lcp.load_time\",\"lcp.loadTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1402,deprecation:{replacement:\"browser.web_vital.lcp.load_time\",reason:\"The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.load_time\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"lcp.renderTime\":{brief:\"The time it took for the LCP element to be rendered\",type:\"integer\",keys:[\"browser.web_vital.lcp.render_time\",\"lcp.renderTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1685,deprecation:{replacement:\"browser.web_vital.lcp.render_time\",reason:\"The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.render_time\"],changelog:[{version:\"0.5.0\",prs:[233]}]},\"lcp.size\":{brief:\"The size of the largest contentful paint element.\",type:\"integer\",keys:[\"browser.web_vital.lcp.size\",\"lcp.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234,deprecation:{replacement:\"browser.web_vital.lcp.size\",reason:\"The LCP size is now recorded as a browser.web_vital.lcp.size attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.size\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"lcp.url\":{brief:\"The url of the dom element responsible for the largest contentful paint.\",type:\"string\",keys:[\"browser.web_vital.lcp.url\",\"lcp.url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com\",deprecation:{replacement:\"browser.web_vital.lcp.url\",reason:\"The LCP url is now recorded as a browser.web_vital.lcp.url attribute.\",status:\"backfill\"},aliases:[\"browser.web_vital.lcp.url\"],changelog:[{version:\"0.5.0\",prs:[233]},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"litestar.middleware_name\":{brief:\"The name of the Litestar middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[486],description:\"Added litestar.middleware_name attribute, deprecated in favor of middleware.name\"}]},\"logger.name\":{brief:\"The name of the logger that generated this event.\",type:\"string\",keys:[\"logger.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"myLogger\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"mcp.auth.client.name\":{brief:\"Registered OAuth client application name associated with the authenticated MCP request. Taken from OAuth client registration metadata (client_name) made available by the authentication layer. This is distinct from the MCP implementation name in mcp.client.name; omit it when the OAuth client name is unavailable.\",type:\"string\",keys:[\"mcp.auth.client.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Example Desktop\",examples:[\"Example Desktop\",\"Example CLI\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Added mcp.auth.client.name attribute\"}]},\"mcp.cancelled.reason\":{brief:\"Reason for the cancellation of an MCP operation.\",type:\"string\",keys:[\"mcp.cancelled.reason\"],applyScrubbing:{key:\"manual\",reason:\"Cancellation reasons may contain user-specific or sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"User cancelled the request\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.cancelled.request_id\":{brief:\"Request ID of the cancelled MCP operation.\",type:\"string\",keys:[\"mcp.cancelled.request_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"123\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.client.name\":{brief:\"Name of the MCP client implementation, as declared in clientInfo. This is distinct from the registered OAuth application name in mcp.auth.client.name.\",type:\"string\",keys:[\"mcp.client.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example-mcp-client\",examples:[\"example-mcp-client\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.client.title\":{brief:\"Display title of the MCP client implementation, as declared in clientInfo.\",type:\"string\",keys:[\"mcp.client.title\"],applyScrubbing:{key:\"manual\",reason:\"Client titles may reveal user-specific application configurations or custom setups\"},isInOtel:!1,visibility:\"public\",example:\"Example MCP Client\",examples:[\"Example MCP Client\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.client.version\":{brief:\"Version of the MCP client implementation, as declared in clientInfo.\",type:\"string\",keys:[\"mcp.client.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1.0.0\",examples:[\"1.0.0\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.lifecycle.phase\":{brief:\"Lifecycle phase indicator for MCP operations.\",type:\"string\",keys:[\"mcp.lifecycle.phase\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"initialization_complete\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.data_type\":{brief:\"Data type of the logged message content.\",type:\"string\",keys:[\"mcp.logging.data_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"string\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.level\":{brief:\"Log level for MCP logging operations.\",type:\"string\",keys:[\"mcp.logging.level\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"info\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.logger\":{brief:\"Logger name for MCP logging operations.\",type:\"string\",keys:[\"mcp.logging.logger\"],applyScrubbing:{key:\"manual\",reason:\"Logger names may be user-defined and could contain sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"mcp_server\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.logging.message\":{brief:\"Log message content from MCP logging operations.\",type:\"string\",keys:[\"mcp.logging.message\"],applyScrubbing:{key:\"auto\",reason:\"Log messages can contain user data\"},isInOtel:!1,visibility:\"public\",example:\"Tool execution completed successfully\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.method.name\":{brief:\"The name of the MCP request or notification method being called.\",type:\"string\",keys:[\"mcp.method.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tools/call\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.current\":{brief:\"Current progress value of an MCP operation.\",type:\"double\",keys:[\"mcp.progress.current\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.2,examples:[.2,50],changelog:[{version:\"0.27.0\",prs:[671],description:\"Changed the type to double to support fractional MCP progress values\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.message\":{brief:\"Progress message describing the current state of an MCP operation.\",type:\"string\",keys:[\"mcp.progress.message\"],applyScrubbing:{key:\"manual\",reason:\"Progress messages may contain user-specific or sensitive information\"},isInOtel:!1,visibility:\"public\",example:\"Processing 50 of 100 items\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.percentage\":{brief:\"Calculated progress percentage of an MCP operation. Computed from current/total * 100.\",type:\"double\",keys:[\"mcp.progress.percentage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:50,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.token\":{brief:\"Token for tracking progress of an MCP operation.\",type:\"string\",keys:[\"mcp.progress.token\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"progress-token-123\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.progress.total\":{brief:\"Total progress target value of an MCP operation.\",type:\"double\",keys:[\"mcp.progress.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,examples:[1,100],changelog:[{version:\"0.27.0\",prs:[671],description:\"Changed the type to double to support fractional MCP progress values\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.name\":{brief:\"Name of the MCP prompt template being used.\",type:\"string\",keys:[\"gen_ai.prompt.name\",\"mcp.prompt.name\"],applyScrubbing:{key:\"manual\",reason:\"Prompt names may reveal user behavior patterns or sensitive operations\"},isInOtel:!1,visibility:\"public\",example:\"summarize\",deprecation:{replacement:\"gen_ai.prompt.name\",reason:\"OTel uses gen_ai.prompt.name for MCP prompt names\",status:\"backfill\"},aliases:[\"gen_ai.prompt.name\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.prompt.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.description\":{brief:\"Description of the prompt result.\",type:\"string\",keys:[\"mcp.prompt.result.description\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"A summary of the requested information\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.<key>.content\":{brief:\"Legacy text content of an indexed message in a multi-message MCP prompt result.\",type:\"string\",keys:[\"mcp.prompt.result.<key>.content\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"Summarize the document.\",examples:[\"Summarize the document.\"],changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple messages. <key> is the zero-based position in the original messages array; absent fields do not renumber later messages.\",\"Recorded only when output capture is enabled.\"]},\"mcp.prompt.result.<key>.role\":{brief:\"Legacy role of an indexed message in a multi-message MCP prompt result.\",type:\"string\",keys:[\"mcp.prompt.result.<key>.role\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"user\",examples:[\"user\",\"assistant\"],changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple messages. <key> is the zero-based position in the original messages array; absent fields do not renumber later messages.\",\"Recorded only when output capture is enabled.\"]},\"mcp.prompt.result.message_content\":{brief:\"Content of the message in the prompt result. Used for single message results only.\",type:\"string\",keys:[\"mcp.prompt.result.message_content\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"Please provide a summary of the document\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.message_count\":{brief:\"Number of messages in the prompt result.\",type:\"integer\",keys:[\"mcp.prompt.result.message_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.prompt.result.message_role\":{brief:\"Role of the message in the prompt result. Used for single message results only.\",type:\"string\",keys:[\"mcp.prompt.result.message_role\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.protocol.ready\":{brief:\"Readiness indicator for the legacy MCP initialization handshake. A non-zero value indicates that notifications/initialized has completed initialization. Omit for protocol versions without this handshake.\",type:\"integer\",keys:[\"mcp.protocol.ready\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,examples:[1],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that readiness describes the legacy MCP initialization handshake\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.protocol.version\":{brief:\"Version of the Model Context Protocol used for the operation.\",type:\"string\",keys:[\"mcp.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2024-11-05\",examples:[\"2024-11-05\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the protocol version applies to an operation without requiring a session\"},{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.request.argument.<key>\":{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.\",type:\"string\",keys:[\"mcp.request.argument.<key>\"],applyScrubbing:{key:\"auto\",reason:\"Arguments contain user input\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"mcp.request.argument.query='weather in Paris'\",changelog:[{version:\"0.3.0\",prs:[176]}]},\"mcp.request.argument.name\":{brief:\"Name argument from prompts/get MCP request.\",type:\"string\",keys:[\"mcp.request.argument.name\"],applyScrubbing:{key:\"auto\",reason:\"Prompt names can contain user input\"},isInOtel:!1,visibility:\"public\",example:\"summarize\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.request.argument.uri\":{brief:\"URI argument from resources/read MCP request.\",type:\"string\",keys:[\"mcp.request.argument.uri\"],applyScrubbing:{key:\"auto\",reason:\"URIs can contain user file paths\"},isInOtel:!1,visibility:\"public\",example:\"file:///path/to/resource\",changelog:[{version:\"0.3.0\",prs:[171]}]},\"mcp.request.id\":{brief:\"JSON-RPC request identifier for the MCP request, used to correlate the request with its response.\",type:\"string\",keys:[\"jsonrpc.request.id\",\"mcp.request.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1\",examples:[\"1\"],deprecation:{replacement:\"jsonrpc.request.id\",reason:\"OTel models MCP as JSON-RPC, uses jsonrpc.request.id\",status:\"backfill\"},aliases:[\"jsonrpc.request.id\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the session-scoped uniqueness requirement from the request identifier\"},{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of jsonrpc.request.id\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.resource.protocol\":{brief:\"URI scheme of the MCP resource being accessed, extracted from its URI. This is distinct from the network protocol used to communicate with the MCP server.\",type:\"string\",keys:[\"mcp.resource.protocol\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"file\",examples:[\"file\",\"postgres\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified Sentry-specific semantics and removed the incorrect network attribute alias and deprecation\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol as an alias\"},{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of network.protocol.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.resource.uri\":{brief:\"The resource URI being accessed in an MCP operation.\",type:\"string\",keys:[\"mcp.resource.uri\"],applyScrubbing:{key:\"auto\",reason:\"URIs can contain sensitive file paths\"},isInOtel:!0,visibility:\"public\",example:\"file:///path/to/file.txt\",changelog:[{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.server.name\":{brief:\"Name of the MCP server implementation, as declared in serverInfo.\",type:\"string\",keys:[\"mcp.server.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example-mcp-server\",examples:[\"example-mcp-server\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.server.title\":{brief:\"Display title of the MCP server implementation, as declared in serverInfo.\",type:\"string\",keys:[\"mcp.server.title\"],applyScrubbing:{key:\"manual\",reason:\"Server titles may reveal user-specific application configurations or custom setups\"},isInOtel:!1,visibility:\"public\",example:\"Example MCP Server\",examples:[\"Example MCP Server\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.server.version\":{brief:\"Version of the MCP server implementation, as declared in serverInfo.\",type:\"string\",keys:[\"mcp.server.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"0.1.0\",examples:[\"0.1.0\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the attribute describes declared MCP implementation metadata\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.session.id\":{brief:\"Identifier for an MCP protocol session, when the operation belongs to a session.\",type:\"string\",keys:[\"mcp.session.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"550e8400-e29b-41d4-a716-446655440000\",examples:[\"550e8400-e29b-41d4-a716-446655440000\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified that the identifier requires a real MCP protocol session\"},{version:\"0.12.0\",prs:[420],description:\"Set is_in_otel=true, attribute exists in OTel MCP registry\"},{version:\"0.3.0\",prs:[171]}],additionalContext:[\"Applies to protocol versions and transports that provide MCP session management, including legacy Streamable HTTP sessions. Omit for operations without a protocol session; do not synthesize a session identifier from a request, connection, or conversation.\"]},\"mcp.tool.name\":{brief:\"Name of the MCP tool being called.\",type:\"string\",keys:[\"gen_ai.tool.name\",\"ai.function_call\",\"mcp.tool.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"calculator\",deprecation:{replacement:\"gen_ai.tool.name\",reason:\"OTel uses gen_ai.tool.name for MCP tool names\",status:\"backfill\"},aliases:[\"gen_ai.tool.name\",\"ai.function_call\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.tool.name\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.content\":{brief:\"The content of the tool result.\",type:\"string\",keys:[\"gen_ai.tool.call.result\",\"ai.toolCall.result\",\"anthropic.tool_result.content\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"mcp.tool.result.content\"],applyScrubbing:{key:\"auto\",reason:\"Tool results can contain user data\"},isInOtel:!1,visibility:\"public\",example:'{\"output\": \"rainy\", \"toolCallId\": \"1\"}',deprecation:{replacement:\"gen_ai.tool.call.result\",reason:\"OTel uses gen_ai.tool.call.result for MCP tool results\",status:\"backfill\"},aliases:[\"gen_ai.tool.call.result\",\"gen_ai.tool.message\",\"gen_ai.tool.output\",\"ai.toolCall.result\",\"anthropic.tool_result.content\"],changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of gen_ai.tool.call.result\"},{version:\"0.3.0\",prs:[171]},{version:\"0.2.0\",prs:[164]}]},\"mcp.tool.result.content_count\":{brief:\"Number of content items in the tool result.\",type:\"integer\",keys:[\"mcp.tool.result.content_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,deprecation:{reason:\"A count can be calculcated from the value of the gen_ai.tool.call.result attribute.\"},changelog:[{version:\"0.27.0\",prs:[669],description:\"Deprecate the attribute since it is redundant given gen_ai.tool.call.result.\"},{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.content_type\":{brief:\"Legacy content type of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.content_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text\",examples:[\"text\",\"image\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded even when output capture is disabled.\"]},\"mcp.tool.result.data_size\":{brief:\"Legacy length of the data string in UTF-16 code units of the content item in a single-item MCP tool result.\",type:\"integer\",keys:[\"mcp.tool.result.data_size\"],applyScrubbing:{key:\"manual\",reason:\"The length contains no result content.\"},isInOtel:!1,visibility:\"public\",example:4,examples:[4,1024],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\",\"The JavaScript SDK records data.length. For base64-encoded image or audio data, this counts encoded characters, not decoded bytes.\"]},\"mcp.tool.result.is_error\":{brief:\"Whether a tool execution resulted in an error.\",type:\"boolean\",keys:[\"mcp.tool.result.is_error\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!1,deprecation:{replacement:\"error.type\",reason:\"OTel uses error.type set to 'tool_error' when isError is true. Cannot be automatically backfilled due to type mismatch (boolean vs string).\"},changelog:[{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of error.type\"},{version:\"0.3.0\",prs:[171]}]},\"mcp.tool.result.<key>.content\":{brief:\"Legacy text content of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.content\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"The operation completed.\",examples:[\"The operation completed.\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\",\"This is one item's text, not the complete tool result. It must not be aliased or directly backfilled to gen_ai.tool.call.result; reconstructing the complete result requires aggregation.\"]},\"mcp.tool.result.<key>.content_type\":{brief:\"Legacy content type of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.content_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text\",examples:[\"text\",\"image\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded even when output capture is disabled.\"]},\"mcp.tool.result.<key>.data_size\":{brief:\"Legacy length of the data string in UTF-16 code units of an indexed content item in a multi-item MCP tool result.\",type:\"integer\",keys:[\"mcp.tool.result.<key>.data_size\"],applyScrubbing:{key:\"manual\",reason:\"The length contains no result content.\"},isInOtel:!1,visibility:\"public\",example:4,examples:[4,1024],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\",\"The JavaScript SDK records data.length. For base64-encoded image or audio data, this counts encoded characters, not decoded bytes.\"]},\"mcp.tool.result.<key>.mime_type\":{brief:\"Legacy MIME type of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"image/png\",examples:[\"image/png\",\"audio/wav\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.name\":{brief:\"Legacy resource link name of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.name\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"report.txt\",examples:[\"report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.resource_mime_type\":{brief:\"Legacy embedded resource MIME type of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.resource_mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text/plain\",examples:[\"text/plain\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.resource_uri\":{brief:\"Legacy embedded resource URI of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.resource_uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.<key>.uri\":{brief:\"Legacy resource link URI of an indexed content item in a multi-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.<key>.uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted for results with multiple content items. <key> is the zero-based position in the original content array; absent fields do not renumber later items.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.mime_type\":{brief:\"Legacy MIME type of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"image/png\",examples:[\"image/png\",\"audio/wav\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.name\":{brief:\"Legacy resource link name of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.name\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"report.txt\",examples:[\"report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.resource_mime_type\":{brief:\"Legacy embedded resource MIME type of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.resource_mime_type\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"text/plain\",examples:[\"text/plain\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.resource_uri\":{brief:\"Legacy embedded resource URI of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.resource_uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.tool.result.uri\":{brief:\"Legacy resource link URI of the content item in a single-item MCP tool result.\",type:\"string\",keys:[\"mcp.tool.result.uri\"],applyScrubbing:{key:\"auto\",reason:\"Preserve automatic scrubbing of server-provided result fields.\"},isInOtel:!1,visibility:\"public\",example:\"file:///project/report.txt\",examples:[\"file:///project/report.txt\"],deprecation:{reason:\"Capture the complete tool result in gen_ai.tool.call.result instead. This attribute describes only part of the result and cannot be directly backfilled.\"},changelog:[{version:\"0.27.0\",prs:[689],description:\"Register an existing JavaScript SDK MCP result attribute as deprecated in favor of gen_ai.tool.call.result, without backfill.\"}],additionalContext:[\"Registers an existing Sentry JavaScript SDK attribute for compatibility.\",\"Emitted only when the result contains exactly one content item.\",\"Recorded only when output capture is enabled.\"]},\"mcp.transport\":{brief:\"MCP transport implementation name, such as the transport class name. This identifies the implementation, not the network transport or application protocol.\",type:\"string\",keys:[\"mcp.transport\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"StdioServerTransport\",examples:[\"StdioServerTransport\",\"CustomHTTPTransport\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Clarified Sentry-specific semantics and removed the incorrect network attribute alias and deprecation\"},{version:\"0.12.0\",prs:[420],description:\"Deprecated in favor of network.transport\"},{version:\"0.3.0\",prs:[171]}]},\"mdc.<key>\":{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.\",type:\"string\",keys:[\"mdc.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"mdc.some_key='some_value'\",changelog:[{version:\"0.3.0\",prs:[176]}]},\"messaging.batch.message_count\":{brief:\"The number of messages sent, received, or processed in the scope of the batching operation.\",type:\"integer\",keys:[\"messaging.batch.message_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:10,changelog:[{version:\"0.6.0\",prs:[341],description:\"Added messaging.batch.message_count attribute\"}]},\"messaging.conversation_id\":{brief:'The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".',type:\"string\",keys:[\"messaging.message.conversation_id\",\"messaging.conversation_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MyConversationId\",examples:[\"MyConversationId\"],deprecation:{replacement:\"messaging.message.conversation_id\",reason:\"This attribute is being deprecated in favor of messaging.message.conversation_id.\",status:\"backfill\"},aliases:[\"messaging.message.conversation_id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.conversation_id attribute\"}]},\"messaging.destination\":{brief:\"The message destination name.\",type:\"string\",keys:[\"messaging.destination.name\",\"messaging.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"BestTopic\",deprecation:{replacement:\"messaging.destination.name\",reason:\"This attribute is being deprecated in favor of messaging.destination.name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"messaging.destination.name\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added messaging.destination attribute, deprecated in favor of messaging.destination.name\"}]},\"messaging.destination.connection\":{brief:\"The message destination connection.\",type:\"string\",keys:[\"messaging.destination.connection\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"BestTopic\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.destination_kind\":{brief:\"The kind of message destination.\",type:\"string\",keys:[\"messaging.destination_kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"topic\",deprecation:{reason:\"Deprecated from OTEL, which now models the destination kind via messaging.operation.type and messaging.destination.name.\"},changelog:[{version:\"0.19.0\",prs:[509],description:\"Added deprecated messaging.destination_kind attribute for parity with legacy OTel instrumentations.\"}]},\"messaging.destination.name\":{brief:\"The message destination name.\",type:\"string\",keys:[\"messaging.destination.name\",\"messaging.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"BestTopic\",aliases:[\"messaging.destination\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added messaging.destination as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.destination.partition.id\":{brief:\"The identifier of the partition messages are sent to or received from, unique within the messaging.destination.name.\",type:\"string\",keys:[\"messaging.destination.partition.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1\",changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.destination.partition.id attribute\"}]},\"messaging.kafka.message.key\":{brief:\"Message keys in Kafka are used for grouping alike messages to ensure they're processed on the same partition. They differ from messaging.message.id in that they're not unique. If the key is null, the attribute MUST NOT be set.\",type:\"string\",keys:[\"messaging.kafka.message.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myKey\",changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.kafka.message.key attribute\"}]},\"messaging.kafka.message.tombstone\":{brief:\"A boolean that is true if the message is a tombstone.\",type:\"boolean\",keys:[\"messaging.kafka.message.tombstone\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:!0,changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.kafka.message.tombstone attribute\"}]},\"messaging.kafka.offset\":{brief:\"The offset of a record in the corresponding Kafka partition.\",type:\"integer\",keys:[\"messaging.kafka.offset\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:42,changelog:[{version:\"0.19.0\",prs:[474],description:\"Added messaging.kafka.offset attribute\"}]},\"messaging.message.body.size\":{brief:\"The size of the message body in bytes.\",type:\"integer\",keys:[\"messaging.message.body.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:839,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"messaging.message.body.size\",type:\"byte\"}},\"messaging.message.conversation_id\":{brief:'The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".',type:\"string\",keys:[\"messaging.message.conversation_id\",\"messaging.conversation_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"MyConversationId\",aliases:[\"messaging.conversation_id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.conversation_id as an alias\"},{version:\"0.16.0\",prs:[468],description:\"Added messaging.message.conversation_id attribute\"}]},\"messaging.message.envelope.size\":{brief:\"The size of the message body and metadata in bytes.\",type:\"integer\",keys:[\"messaging.message.envelope.size\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1045,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.message.id\":{brief:\"A value used by the messaging system as an identifier for the message, represented as a string.\",type:\"string\",keys:[\"messaging.message.id\",\"messaging.message_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"f47ac10b58cc4372a5670e02b2c3d479\",aliases:[\"messaging.message_id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.message_id as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.message_id\":{brief:\"A value used by the messaging system as an identifier for the message, represented as a string.\",type:\"string\",keys:[\"messaging.message.id\",\"messaging.message_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"452a7c7c7c7048c2f887f0e7\",examples:[\"452a7c7c7c7048c2f887f0e7\"],deprecation:{replacement:\"messaging.message.id\",reason:\"This attribute is being deprecated in favor of messaging.message.id.\",status:\"backfill\"},aliases:[\"messaging.message.id\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.message_id attribute\"}]},\"messaging.message.receive.latency\":{brief:\"The latency between when the message was published and received.\",type:\"integer\",keys:[\"messaging.message.receive.latency\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1732847252,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}],searchAlias:{name:\"messaging.message.receive.latency\",type:\"millisecond\"}},\"messaging.message.retry.count\":{brief:\"The amount of attempts to send the message.\",type:\"integer\",keys:[\"messaging.message.retry.count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"messaging.operation\":{brief:\"The name of the messaging operation being performed.\",type:\"string\",keys:[\"messaging.operation.name\",\"messaging.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"publish\",examples:[\"publish\"],deprecation:{replacement:\"messaging.operation.name\",reason:\"This attribute is being deprecated in favor of messaging.operation.name.\",status:\"backfill\"},aliases:[\"messaging.operation.name\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.operation attribute\"}]},\"messaging.operation.name\":{brief:\"The name of the messaging operation being performed\",type:\"string\",keys:[\"messaging.operation.name\",\"messaging.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"send\",aliases:[\"messaging.operation\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.operation as an alias\"},{version:\"0.11.0\",prs:[392],description:\"Added messaging.operation.name attribute\"}]},\"messaging.operation.type\":{brief:\"A string identifying the type of the messaging operation\",type:\"string\",keys:[\"messaging.operation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"create\",changelog:[{version:\"0.1.0\",prs:[51,127]}]},\"messaging.protocol\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.protocol.name\",\"messaging.protocol\",\"net.protocol.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AMQP\",examples:[\"AMQP\"],deprecation:{replacement:\"network.protocol.name\",reason:\"This attribute is being deprecated in favor of network.protocol.name.\",status:\"backfill\"},aliases:[\"network.protocol.name\",\"net.protocol.name\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.resource.protocol alias\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol attribute\"}]},\"messaging.protocol_version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"0.9.1\",examples:[\"0.9.1\"],deprecation:{replacement:\"network.protocol.version\",reason:\"This attribute is being deprecated in favor of network.protocol.version.\",status:\"backfill\"},aliases:[\"network.protocol.version\",\"http.flavor\",\"net.protocol.version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version attribute\"}]},\"messaging.rabbitmq.destination.routing_key\":{brief:\"RabbitMQ message routing key.\",type:\"string\",keys:[\"messaging.rabbitmq.destination.routing_key\",\"messaging.rabbitmq.routing_key\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myKey\",aliases:[\"messaging.rabbitmq.routing_key\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.rabbitmq.routing_key as an alias\"},{version:\"0.16.0\",prs:[468],description:\"Added messaging.rabbitmq.destination.routing_key attribute\"}]},\"messaging.rabbitmq.routing_key\":{brief:\"RabbitMQ message routing key.\",type:\"string\",keys:[\"messaging.rabbitmq.destination.routing_key\",\"messaging.rabbitmq.routing_key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"myKey\",examples:[\"myKey\"],deprecation:{replacement:\"messaging.rabbitmq.destination.routing_key\",reason:\"This attribute is being deprecated in favor of messaging.rabbitmq.destination.routing_key.\",status:\"backfill\"},aliases:[\"messaging.rabbitmq.destination.routing_key\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.rabbitmq.routing_key attribute\"}]},\"messaging.system\":{brief:\"The messaging system as identified by the client instrumentation.\",type:\"string\",keys:[\"messaging.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"activemq\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"messaging.url\":{brief:\"The connection string of the messaging broker.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"amqp://guest:guest@localhost:5672\",examples:[\"amqp://guest:guest@localhost:5672\"],deprecation:{replacement:\"url.full\",reason:\"This attribute is being deprecated in favor of url.full.\",status:\"backfill\"},aliases:[\"url.full\",\"http.url\",\"url\",\"aws.request.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url attribute\"}]},method:{brief:\"The HTTP method used.\",type:\"string\",keys:[\"http.request.method\",\"http.method\",\"http.request_method\",\"method\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",deprecation:{replacement:\"http.request.method\",status:\"normalize\"},aliases:[\"http.request.method\",\"http.request_method\",\"http.method\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"middleware.name\":{brief:\"The name of the middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",aliases:[\"django.middleware_name\",\"starlite.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\"],changelog:[{version:\"0.19.0\",prs:[485,486,519,520],description:\"Added django.middleware_name, starlite.middleware_name, litestar.middleware_name and starlette.middleware_name as aliases\"},{version:\"0.6.0\",prs:[336],description:\"Added middleware.name attribute\"}]},\"navigation.origin\":{brief:\"The origin of the navigation (usually client side router navigations). Should preferrably parameterized template (like url.template) or a URL path otherwise.\",type:\"string\",keys:[\"router.navigation.origin\",\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{replacement:\"router.navigation.origin\",reason:\"Moved to the router.* namespace to separate client-side router navigations from browser navigations.\",status:\"backfill\"},aliases:[\"router.navigation.origin\",\"sentry.sveltekit.navigation.from\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Deprecated in favor of router.navigation.origin\"},{version:\"0.16.0\",prs:[467],description:\"Added navigation.origin attribute\"}]},\"navigation.route.id\":{brief:\"The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id).\",type:\"string\",keys:[\"router.navigation.route.id\",\"navigation.route.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"AboutView\",deprecation:{replacement:\"router.navigation.route.id\",reason:\"Moved to the router.* namespace to separate client-side router navigations from browser navigations.\",status:\"backfill\"},aliases:[\"router.navigation.route.id\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Deprecated in favor of router.navigation.route.id\"},{version:\"0.16.0\",prs:[468],description:\"Added navigation.route.id attribute\"}]},\"navigation.type\":{brief:\"The type of navigation done by a client-side router.\",type:\"string\",keys:[\"router.navigation.type\",\"navigation.type\",\"sentry.sveltekit.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router.push\",deprecation:{replacement:\"router.navigation.type\",reason:\"Moved to the router.* namespace to separate client-side router navigations from browser navigations.\",status:\"backfill\"},aliases:[\"router.navigation.type\",\"sentry.sveltekit.navigation.type\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Deprecated in favor of router.navigation.type\"},{version:\"0.16.0\",prs:[467],description:\"Added new deprecated alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"nel.elapsed_time\":{brief:\"The elapsed number of milliseconds between the start of the resource fetch and when it was completed or aborted by the user agent.\",type:\"integer\",keys:[\"nel.elapsed_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[68]}]},\"nel.phase\":{brief:'If request failed, the phase of its network error. If request succeeded, \"application\".',type:\"string\",keys:[\"nel.phase\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"application\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"nel.referrer\":{brief:\"request's referrer, as determined by the referrer policy associated with its client.\",type:\"string\",keys:[\"nel.referrer\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/foo?bar=baz\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"nel.sampling_fraction\":{brief:\"The sampling fraction used to determine if the request should be sampled.\",type:\"double\",keys:[\"nel.sampling_fraction\",\"nel.sampling_function\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,examples:[.5],aliases:[\"nel.sampling_function\"],changelog:[{version:\"0.26.0\",prs:[668],description:\"Added nel.sampling_fraction attribute\"}]},\"nel.sampling_function\":{brief:\"The sampling function used to determine if the request should be sampled.\",type:\"double\",keys:[\"nel.sampling_fraction\",\"nel.sampling_function\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:.5,deprecation:{replacement:\"nel.sampling_fraction\",reason:\"The correct name of this attribute is nel.sampling_fraction\",status:\"backfill\"},aliases:[\"nel.sampling_fraction\"],changelog:[{version:\"0.26.0\",prs:[668],description:\"Deprecated in favor of nel.sampling_fraction\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[68]}]},\"nel.type\":{brief:'If request failed, the type of its network error. If request succeeded, \"ok\".',type:\"string\",keys:[\"nel.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dns.unreachable\",changelog:[{version:\"0.1.0\",prs:[68,127]}]},\"network.connection.effective_type\":{brief:\"Specifies the effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).\",type:\"string\",keys:[\"network.connection.effective_type\",\"effectiveConnectionType\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"4g\",aliases:[\"effectiveConnectionType\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.effective_type to be used instead of effectiveConnectionType\"}]},\"network.connection.rtt\":{brief:\"Specifies the estimated effective round-trip time of the current connection, in milliseconds.\",type:\"integer\",keys:[\"network.connection.rtt\",\"connection.rtt\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:100,aliases:[\"connection.rtt\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.rtt to be used instead of connection.rtt\"}]},\"network.connection.type\":{brief:\"Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).\",type:\"string\",keys:[\"network.connection.type\",\"connectionType\",\"device.connection_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"wifi\",aliases:[\"device.connection_type\",\"connectionType\"],changelog:[{version:\"0.5.0\",prs:[279],description:\"Added attribute network.connection.type to be used instead of connectionType\"}]},\"network.local.address\":{brief:\"Local address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.local.address\",\"net.host.ip\",\"net.sock.host.addr\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"10.1.2.80\",examples:[\"10.1.2.80\",\"/var/run/my.sock\"],aliases:[\"net.host.ip\",\"net.sock.host.addr\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.local.port\":{brief:\"Local port number of the network connection.\",type:\"integer\",keys:[\"network.local.port\",\"net.sock.host.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:65400,aliases:[\"net.sock.host.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"network.peer.address\":{brief:\"Peer address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.peer.address\",\"net.peer.ip\",\"net.sock.peer.addr\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"10.1.2.80\",aliases:[\"net.peer.ip\",\"net.sock.peer.addr\"],changelog:[{version:\"0.1.0\",prs:[108,127]},{version:\"0.0.0\"}]},\"network.peer.port\":{brief:\"Peer port number of the network connection.\",type:\"integer\",keys:[\"network.peer.port\",\"net.sock.peer.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:65400,aliases:[\"net.sock.peer.port\"],changelog:[{version:\"0.21.0\",prs:[588],description:\"Added net.sock.peer.port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"network.protocol.name\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.protocol.name\",\"messaging.protocol\",\"net.protocol.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http\",examples:[\"http\"],aliases:[\"net.protocol.name\",\"messaging.protocol\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.resource.protocol alias\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.protocol.version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",aliases:[\"http.flavor\",\"net.protocol.version\",\"messaging.protocol_version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version as an alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.transport\":{brief:\"OSI transport layer or inter-process communication method.\",type:\"string\",keys:[\"network.transport\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tcp\",examples:[\"tcp\"],aliases:[\"net.transport\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.transport alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"network.type\":{brief:\"OSI network layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"ipv4\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"net.host.ip\":{brief:\"Local address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.local.address\",\"net.host.ip\",\"net.sock.host.addr\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.local.address\",status:\"backfill\"},aliases:[\"network.local.address\",\"net.sock.host.addr\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.host.name\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",status:\"backfill\"},aliases:[\"address\",\"server.address\",\"http.server_name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.host.port\":{brief:\"Server port number.\",type:\"integer\",keys:[\"server.port\",\"net.host.port\",\"port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,deprecation:{replacement:\"server.port\",status:\"backfill\"},aliases:[\"server.port\",\"port\"],changelog:[{version:\"0.19.0\",prs:[532],description:\"Added port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.peer.ip\":{brief:\"Peer address of the network connection - IP address or Unix domain socket name.\",type:\"string\",keys:[\"network.peer.address\",\"net.peer.ip\",\"net.sock.peer.addr\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.peer.address\",status:\"backfill\"},aliases:[\"network.peer.address\",\"net.sock.peer.addr\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.peer.name\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"net.peer.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"Deprecated, use server.address on client spans and client.address on server spans.\"},aliases:[\"address\",\"server.address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"server_name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Added server_name as an alias\"},{version:\"0.21.0\",prs:[588,602],description:\"Added the server.address alias group to net.peer.name\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.peer.port\":{brief:\"Peer port number.\",type:\"integer\",keys:[\"net.peer.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,deprecation:{replacement:\"server.port\",reason:\"Deprecated, use server.port on client spans and client.port on server spans.\"},changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.protocol.name\":{brief:\"OSI application layer or non-OSI equivalent.\",type:\"string\",keys:[\"network.protocol.name\",\"messaging.protocol\",\"net.protocol.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"http\",examples:[\"http\"],deprecation:{replacement:\"network.protocol.name\",status:\"backfill\"},aliases:[\"network.protocol.name\",\"messaging.protocol\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.resource.protocol alias\"},{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol as an alias\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.protocol.version\":{brief:\"The actual version of the protocol used for network communication.\",type:\"string\",keys:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\",\"net.protocol.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1.1\",deprecation:{replacement:\"network.protocol.version\",status:\"backfill\"},aliases:[\"network.protocol.version\",\"http.flavor\",\"messaging.protocol_version\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.protocol_version as an alias\"},{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.family\":{brief:\"OSI transport and network layer\",type:\"string\",keys:[\"net.sock.family\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"inet\",deprecation:{replacement:\"network.transport\",reason:\"Deprecated, use network.transport and network.type.\"},changelog:[{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"net.sock.host.addr\":{brief:\"Local address of the network connection mapping to Unix domain socket name.\",type:\"string\",keys:[\"network.local.address\",\"net.host.ip\",\"net.sock.host.addr\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/var/my.sock\",deprecation:{replacement:\"network.local.address\",status:\"backfill\"},aliases:[\"network.local.address\",\"net.host.ip\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.host.port\":{brief:\"Local port number of the network connection.\",type:\"integer\",keys:[\"network.local.port\",\"net.sock.host.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:8080,deprecation:{replacement:\"network.local.port\",status:\"backfill\"},aliases:[\"network.local.port\"],changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.sock.peer.addr\":{brief:\"Peer address of the network connection - IP address\",type:\"string\",keys:[\"network.peer.address\",\"net.peer.ip\",\"net.sock.peer.addr\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"192.168.0.1\",deprecation:{replacement:\"network.peer.address\",status:\"backfill\"},aliases:[\"network.peer.address\",\"net.peer.ip\"],changelog:[{version:\"0.1.0\",prs:[61,108,127]},{version:\"0.0.0\"}]},\"net.sock.peer.name\":{brief:\"Peer address of the network connection - Unix domain socket name\",type:\"string\",keys:[\"net.sock.peer.name\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/var/my.sock\",deprecation:{reason:\"Deprecated from OTEL, no replacement at this time\"},changelog:[{version:\"0.1.0\",prs:[61,119,127]},{version:\"0.0.0\"}]},\"net.sock.peer.port\":{brief:\"Peer port number of the network connection.\",type:\"integer\",keys:[\"network.peer.port\",\"net.sock.peer.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:8080,deprecation:{replacement:\"network.peer.port\",status:\"backfill\"},aliases:[\"network.peer.port\"],changelog:[{version:\"0.21.0\",prs:[588],description:\"Added network.peer.port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"net.transport\":{brief:\"OSI transport layer or inter-process communication method.\",type:\"string\",keys:[\"net.transport\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"tcp\",examples:[\"tcp\"],deprecation:{replacement:\"network.transport\",reason:\"This attribute is being deprecated in favor of network.transport. The values change from ip_tcp and ip_udp to tcp and udp, so the old value cannot be copied over.\"},aliases:[\"network.transport\"],changelog:[{version:\"0.27.0\",prs:[671],description:\"Removed the semantically distinct mcp.transport alias\"},{version:\"0.21.0\",prs:[588],description:\"Set net.transport to _status null, because its values change on the replacement\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"os.build\":{brief:\"The build ID of the operating system.\",type:\"string\",keys:[\"os.build_id\",\"os.build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1234567890\",deprecation:{replacement:\"os.build_id\",status:\"backfill\"},aliases:[\"os.build_id\"],changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.build attribute, deprecated in favor of os.build_id\"}]},\"os.build_id\":{brief:\"The build ID of the operating system.\",type:\"string\",keys:[\"os.build_id\",\"os.build\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"1234567890\",aliases:[\"os.build\"],changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.build as alias\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.description\":{brief:\"Human readable (not intended to be parsed) OS version information, like e.g. reported by ver or lsb_release -a commands.\",type:\"string\",keys:[\"os.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Ubuntu 18.04.1 LTS\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.kernel_version\":{brief:\"An independent kernel version string. Typically the entire output of the `uname` syscall.\",type:\"string\",keys:[\"os.kernel_version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"20.2.0\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.kernel_version attribute\"}]},\"os.name\":{brief:\"Human readable operating system name.\",type:\"string\",keys:[\"os.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Ubuntu\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.raw_description\":{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.\",type:\"string\",keys:[\"os.raw_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Ubuntu 22.04.4 LTS (Jammy Jellyfish)\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.raw_description attribute\"}]},\"os.rooted\":{brief:\"Whether the operating system has been jailbroken or rooted.\",type:\"boolean\",keys:[\"os.rooted\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.rooted attribute\"}]},\"os.theme\":{brief:\"Whether the OS runs in dark mode or light mode.\",type:\"string\",keys:[\"os.theme\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dark\",changelog:[{version:\"0.5.0\",prs:[301],description:\"Added os.theme attribute\"}]},\"os.type\":{brief:\"The operating system type.\",type:\"string\",keys:[\"os.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"linux\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"os.version\":{brief:\"The version of the operating system.\",type:\"string\",keys:[\"os.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"18.04.2\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.kind\":{brief:\"The span kind (https://opentelemetry.io/docs/concepts/signals/traces/#span-kind). Deprecated, use `sentry.kind` instead.\",type:\"string\",keys:[\"sentry.kind\",\"span.kind\",\"otel.kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SERVER\",deprecation:{replacement:\"sentry.kind\",reason:\"Deprecated in favor of sentry.kind\",status:\"backfill\"},aliases:[\"sentry.kind\"],changelog:[{version:\"0.13.0\",prs:[440],description:\"Added otel.kind attribute\"}]},\"otel.scope.name\":{brief:\"The name of the instrumentation scope - (InstrumentationScope.Name in OTLP).\",type:\"string\",keys:[\"otel.scope.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"io.opentelemetry.contrib.mongodb\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.scope.version\":{brief:\"The version of the instrumentation scope - (InstrumentationScope.Version in OTLP).\",type:\"string\",keys:[\"otel.scope.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"2.4.5\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.status_code\":{brief:\"Name of the code, either \\u201COK\\u201D or \\u201CERROR\\u201D. MUST NOT be set if the status code is UNSET.\",type:\"string\",keys:[\"otel.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"OK\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"otel.status_description\":{brief:\"Description of the Status if it has a value, otherwise not set.\",type:\"string\",keys:[\"otel.status_description\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"resource not found\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"params.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"params.<key>\",\"url.path.parameter.<key>\",\"url.path.params.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"params.id='123'\",aliases:[\"url.path.parameter.<key>\",\"url.path.params.<key>\"],changelog:[{version:\"0.21.0\",prs:[586],description:\"Added url.path.params.<key> as an alias\"},{version:\"0.1.0\",prs:[103]}]},\"performance.activationStart\":{brief:\"The time between initiating a navigation to a page and the browser activating the page\",type:\"double\",keys:[\"browser.performance.navigation.activation_start\",\"performance.activationStart\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1.983,deprecation:{replacement:\"browser.performance.navigation.activation_start\",reason:\"The activationStart is now recorded as the browser.performance.navigation.activation_start attribute.\",status:\"backfill\"},aliases:[\"browser.performance.navigation.activation_start\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added performance.activationStart attribute\"}]},\"performance.timeOrigin\":{brief:\"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",type:\"double\",keys:[\"browser.performance.time_origin\",\"performance.timeOrigin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1776185678886e-3,deprecation:{replacement:\"browser.performance.time_origin\",reason:\"The timeOrigin is now recorded as the browser.performance.time_origin attribute.\",status:\"backfill\"},aliases:[\"browser.performance.time_origin\"],changelog:[{version:\"0.5.0\",prs:[321],description:\"Added performance.timeOrigin attribute\"}]},port:{brief:\"The destination port for a TCP connection.\",type:\"integer\",keys:[\"server.port\",\"net.host.port\",\"port\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1337,examples:[1337],deprecation:{replacement:\"server.port\",reason:\"Old namespace-less attribute, to be replaced with server.port for span-first future\",status:\"backfill\"},aliases:[\"server.port\",\"net.host.port\"],changelog:[{version:\"0.19.0\",prs:[532],description:\"Added port attribute\"}]},previous_route:{brief:\"Also used by mobile SDKs to indicate the previous route in the application.\",type:\"string\",keys:[\"previous_route\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"HomeScreen\",changelog:[{version:\"0.1.0\",prs:[74]},{version:\"0.0.0\"}]},\"process.command_args\":{brief:\"All the command arguments (including the command/executable itself) as received by the process.\",type:\"string[]\",keys:[\"process.command_args\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:[\"cmd/otecol\",\"--config=config.yaml\"],changelog:[{version:\"0.6.0\",prs:[327],description:\"Added process.command_args attribute\"}]},\"process.executable.name\":{brief:\"The name of the executable that started the process.\",type:\"string\",keys:[\"process.executable.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"getsentry\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.pid\":{brief:\"The process ID of the running process.\",type:\"integer\",keys:[\"process.pid\",\"subprocess.pid\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:12345,aliases:[\"subprocess.pid\"],changelog:[{version:\"0.19.0\",prs:[487],description:\"Added subprocess.pid as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"process.runtime.description\":{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.\",type:\"string\",keys:[\"process.runtime.description\",\"runtime.raw_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"Eclipse OpenJ9 VM openj9-0.21.0\",aliases:[\"runtime.raw_description\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.runtime.engine.name\":{brief:\"The name of the runtime engine.\",type:\"string\",keys:[\"process.runtime.engine.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"v8\",changelog:[{version:\"0.0.0\"}]},\"process.runtime.engine.version\":{brief:\"The version of the runtime engine.\",type:\"string\",keys:[\"process.runtime.engine.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"12.9.202.13-rusty\",changelog:[{version:\"0.0.0\"}]},\"process.runtime.name\":{brief:\"The name of the runtime. Equivalent to `name` in the Sentry runtime context.\",type:\"string\",keys:[\"process.runtime.name\",\"runtime.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"node\",aliases:[\"runtime.name\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"process.runtime.version\":{brief:\"The version of the runtime of this process, as returned by the runtime without modification. Equivalent to `version` in the Sentry runtime context.\",type:\"string\",keys:[\"process.runtime.version\",\"runtime.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"18.04.2\",aliases:[\"runtime.version\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},profile_id:{brief:\"The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling.\",type:\"string\",keys:[\"sentry.profile_id\",\"profile.id\",\"profile_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",deprecation:{replacement:\"sentry.profile_id\",status:\"normalize\"},aliases:[\"sentry.profile_id\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Added profile_id attribute\"}]},query:{brief:\"The database query being executed.\",type:\"string\",keys:[\"db.query.text\",\"db.statement\",\"query\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"SELECT * FROM users WHERE id = $1\",examples:[\"SELECT * FROM users WHERE id = $1\"],deprecation:{replacement:\"db.query.text\",reason:\"While this attribute never specifically required parameterization, the replacement, db.query.text, does.\",status:\"backfill\"},aliases:[\"db.query.text\",\"db.statement\"],changelog:[{version:\"0.19.0\",prs:[530],description:\"Added query attribute\"}]},\"query.<key>\":{brief:\"An item in a query string. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"query.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"query.id='123'\",deprecation:{replacement:\"url.query\",reason:\"Instead of sending items individually in query.<key>, they should be sent all together with url.query.\"},changelog:[{version:\"0.1.0\",prs:[103]}]},\"react_native.architecture\":{brief:\"The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.\",type:\"string\",keys:[\"react_native.architecture\",\"turbo_module.arch\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"new\",examples:[\"new\",\"legacy\"],aliases:[\"turbo_module.arch\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.architecture attribute\"}]},\"react_native.module.call.count\":{brief:\"The number of native module calls observed during the lifetime of the span.\",type:\"integer\",keys:[\"react_native.module.call.count\",\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:42,examples:[42],aliases:[\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.call.count attribute\"}]},\"react_native.module.call.distinct_count\":{brief:\"The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.\",type:\"integer\",keys:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7,examples:[7],aliases:[\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.call.distinct_count attribute\"}]},\"react_native.module.duration.max\":{brief:\"The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds.\",type:\"double\",keys:[\"react_native.module.duration.max\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:512.5,examples:[512.5],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.duration.max attribute\"}]},\"react_native.module.duration.total\":{brief:\"The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration.\",type:\"double\",keys:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128.45,examples:[128.45],aliases:[\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.duration.total attribute\"}]},\"react_native.module.error.count\":{brief:\"The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or \\u2014 on the Old Architecture bridge only \\u2014 invoked its failure callback.\",type:\"integer\",keys:[\"react_native.module.error.count\",\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],aliases:[\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.error.count attribute\"}]},\"react_native.module.kind\":{brief:\"Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`.\",type:\"string\",keys:[\"react_native.module.kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sync\",examples:[\"sync\",\"async\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.kind attribute\"}]},\"react_native.module.method\":{brief:\"The name of the native module method that was called.\",type:\"string\",keys:[\"react_native.module.method\",\"turbo_module.method\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"getUniqueId\",examples:[\"getUniqueId\"],aliases:[\"turbo_module.method\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.method attribute\"}]},\"react_native.module.name\":{brief:\"The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.\",type:\"string\",keys:[\"react_native.module.name\",\"turbo_module.name\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo\",examples:[\"RNDeviceInfo\"],aliases:[\"turbo_module.name\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.name attribute\"}]},\"react_native.module.top.duration\":{brief:\"The total duration attributed to `react_native.module.top.name`, in milliseconds.\",type:\"double\",keys:[\"react_native.module.top.duration\",\"turbo_module.top_module_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:87.25,examples:[87.25],aliases:[\"turbo_module.top_module_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.top.duration attribute\"}]},\"react_native.module.top.name\":{brief:\"The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `<module>.<method>`.\",type:\"string\",keys:[\"react_native.module.top.name\",\"turbo_module.top_module\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo.getUniqueId\",examples:[\"RNDeviceInfo.getUniqueId\"],aliases:[\"turbo_module.top_module\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added react_native.module.top.name attribute\"}]},\"react.version\":{brief:\"The version of the React framework\",type:\"string\",keys:[\"react.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"18.2.0\",changelog:[{version:\"0.7.0\",prs:[368],description:\"Added react.version attribute\"}]},\"redis.command\":{brief:\"The name of the Redis operation being executed.\",type:\"string\",keys:[\"db.operation.name\",\"cloudflare.d1.query_type\",\"db.operation\",\"redis.command\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT\",examples:[\"SELECT\"],deprecation:{replacement:\"db.operation.name\",status:\"backfill\"},aliases:[\"cloudflare.d1.query_type\",\"db.operation.name\",\"db.operation\"],changelog:[{version:\"0.19.0\",prs:[531],description:\"Added redis.command attribute\"}]},\"redis.key\":{brief:\"The key the Redis command is operating on.\",type:\"string\",keys:[\"db.redis.key\",\"redis.key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user:2047:city\",deprecation:{replacement:\"db.redis.key\",reason:\"This attribute is being deprecated in favor of db.redis.key, which is the preferred replacement.\",status:\"backfill\"},aliases:[\"db.redis.key\"],changelog:[{version:\"0.19.0\",prs:[484],description:\"Added redis.key attribute, deprecated in favor of db.redis.key\"}]},release:{brief:\"The sentry release.\",type:\"string\",keys:[\"sentry.release\",\"release\",\"service.version\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.release\",status:\"normalize\"},aliases:[\"sentry.release\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"remix.action_form_data.<key>\":{brief:\"Remix form data, <key> being the form data key, the value being the form data value.\",type:\"string\",keys:[\"remix.action_form_data.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"http.response.header.text='test'\",changelog:[{version:\"0.1.0\",prs:[103]}]},replayId:{brief:\"The id of the sentry replay.\",type:\"string\",keys:[\"replayId\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",deprecation:{replacement:\"sentry.replay_id\"},aliases:[\"sentry.replay_id\"],changelog:[{version:\"0.24.0\",prs:[401]}]},replay_id:{brief:\"The id of the sentry replay.\",type:\"string\",keys:[\"sentry.replay_id\",\"replay.id\",\"replay_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",deprecation:{replacement:\"sentry.replay_id\",status:\"normalize\"},aliases:[\"sentry.replay_id\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Configured normalization\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"resource.deployment.environment\":{brief:\"The software deployment environment name.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\",status:\"backfill\"},changelog:[{version:\"0.5.0\",prs:[266]}]},\"resource.deployment.environment.name\":{brief:\"The software deployment environment name.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"production\",deprecation:{replacement:\"sentry.environment\",status:\"backfill\"},changelog:[{version:\"0.3.1\",prs:[196]}]},\"resource.render_blocking_status\":{brief:\"The render blocking status of the resource.\",type:\"string\",keys:[\"resource.render_blocking_status\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"non-blocking\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},route:{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.\",type:\"string\",keys:[\"route\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"App\\\\Controller::indexAction\",deprecation:{replacement:\"http.route\"},aliases:[\"http.route\"],changelog:[{version:\"0.1.0\",prs:[61,74]},{version:\"0.0.0\"}]},\"router.navigation.origin\":{brief:\"The origin of the navigation (usually client side router navigations). Should preferably be a parameterized template (like url.template) or a URL path otherwise.\",type:\"string\",keys:[\"router.navigation.origin\",\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",aliases:[\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Added router.navigation.origin attribute, replacing navigation.origin\"}]},\"router.navigation.route.id\":{brief:\"The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id).\",type:\"string\",keys:[\"router.navigation.route.id\",\"navigation.route.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"AboutView\",aliases:[\"navigation.route.id\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Added router.navigation.route.id attribute, replacing navigation.route.id\"}]},\"router.navigation.type\":{brief:\"The type of navigation done by a client-side router.\",type:\"string\",keys:[\"router.navigation.type\",\"navigation.type\",\"sentry.sveltekit.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"router.push\",aliases:[\"navigation.type\",\"sentry.sveltekit.navigation.type\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Added router.navigation.type attribute, replacing navigation.type\"}]},\"rpc.grpc.status_code\":{brief:\"The numeric status code of the gRPC request.\",type:\"integer\",keys:[\"rpc.grpc.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:2,deprecation:{replacement:\"rpc.response.status_code\",reason:\"Cannot be automatically backfilled due to type mismatch (integer vs string); rpc.grpc.status_code is a numeric gRPC status code while rpc.response.status_code is the string status name.\"},aliases:[\"code\",\"rpc.response.status_code\"],changelog:[{version:\"0.19.0\",prs:[494,533],description:\"Deprecated rpc.grpc.status_code in favor of rpc.response.status_code\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"rpc.method\":{brief:\"The fully-qualified logical name of the method from the RPC interface perspective.\",type:\"string\",keys:[\"rpc.method\",\"aws.operation_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"com.example.ExampleService/exampleMethod\",aliases:[\"aws.operation_name\"],changelog:[{version:\"0.19.0\",prs:[536],description:\"Added aws.operation_name as an alias\"},{version:\"0.7.0\",prs:[351],description:\"Added rpc.method attribute\"}]},\"rpc.response.status_code\":{brief:\"Status code of the RPC returned by the RPC server or generated by the client.\",type:\"string\",keys:[\"rpc.response.status_code\",\"code\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"DEADLINE_EXCEEDED\",aliases:[\"code\",\"rpc.grpc.status_code\"],changelog:[{version:\"0.19.0\",prs:[494,533],description:\"Added code and rpc.grpc.status_code as aliases\"},{version:\"0.7.0\",prs:[352],description:\"Added rpc.response.status_code attribute\"}]},\"rpc.service\":{brief:\"The full (logical) name of the service being called, including its package name, if applicable.\",type:\"string\",keys:[\"rpc.service\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"myService.BestService\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"rpc.system\":{brief:\"A string identifying the remoting system.\",type:\"string\",keys:[\"rpc.system.name\",\"rpc.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws-api\",deprecation:{replacement:\"rpc.system.name\",reason:\"This attribute is being deprecated in favor of rpc.system.name, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"rpc.system.name\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added rpc.system attribute, deprecated in favor of rpc.system.name\"}]},\"rpc.system.name\":{brief:\"A string identifying the remoting system.\",type:\"string\",keys:[\"rpc.system.name\",\"rpc.system\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"aws-api\",aliases:[\"rpc.system\"],changelog:[{version:\"0.16.0\",prs:[482],description:\"Added rpc.system.name attribute\"}]},\"runtime.build\":{brief:\"The application build string, when it is separate from the version.\",type:\"string\",keys:[\"runtime.build\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stable\",deprecation:{reason:\"The runtime.* namespace is deprecated in favor of process.runtime.*. No direct OTel equivalent exists for this attribute.\"},changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.build attribute\"}]},\"runtime.name\":{brief:\"The name of the runtime. For example node, CPython, or rustc.\",type:\"string\",keys:[\"process.runtime.name\",\"runtime.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"node\",deprecation:{replacement:\"process.runtime.name\",reason:\"Prefer OTel-aligned process.runtime.name\",status:\"backfill\"},aliases:[\"process.runtime.name\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.name attribute in favor of process.runtime.name\"}]},\"runtime.raw_description\":{brief:\"Unprocessed description string as obtained from the runtime. Used to extract name and version for well-known runtimes.\",type:\"string\",keys:[\"process.runtime.description\",\"runtime.raw_description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Eclipse OpenJ9 VM openj9-0.21.0\",deprecation:{replacement:\"process.runtime.description\",reason:\"Prefer OTel-aligned process.runtime.description\",status:\"backfill\"},aliases:[\"process.runtime.description\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.raw_description attribute in favor of process.runtime.description\"}]},\"runtime.version\":{brief:\"The version of the runtime.\",type:\"string\",keys:[\"process.runtime.version\",\"runtime.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"18.04.2\",deprecation:{replacement:\"process.runtime.version\",reason:\"Prefer OTel-aligned process.runtime.version\",status:\"backfill\"},aliases:[\"process.runtime.version\"],changelog:[{version:\"0.11.0\",prs:[383],description:\"Added and deprecated runtime.version attribute in favor of process.runtime.version\"}]},\"score.<key>\":{brief:\"The weighted performance score for a web vital. This is defined as `score.weight.<key>` * `score.ratio.<key>`.\",type:\"double\",keys:[\"score.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.cls=0.1723\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.<key> attribute\"}]},\"score.ratio.<key>\":{brief:\"The score for a web vital, normalized to a number between 0 and 1.\",type:\"double\",keys:[\"score.ratio.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.ratio.inp=0.7748\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.ratio.<key> attribute\"}]},\"score.total\":{brief:\"The total performance score of a span. This is the sum of individual weighted web vital scores (see `score.<key>`).\",type:\"double\",keys:[\"score.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.total attribute\"}]},\"score.weight.<key>\":{brief:\"The relative weight of a web vital in a span's performance score.\",type:\"double\",keys:[\"score.weight.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"score.weight.fcp=0.25\",changelog:[{version:\"0.7.0\",prs:[355],description:\"Added score.weight.<key> attribute\"}]},\"sentry.action\":{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.\",type:\"string\",keys:[\"sentry.action\",\"span.action\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT\",changelog:[{version:\"0.4.0\",prs:[212]}],searchAlias:{name:\"span.action\"}},\"sentry.browser.name\":{brief:\"The name of the browser.\",type:\"string\",keys:[\"browser.name\",\"sentry.browser.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Chrome\",deprecation:{replacement:\"browser.name\",status:\"backfill\"},aliases:[\"browser.name\"],changelog:[{version:\"0.1.0\",prs:[139]}],searchAlias:{name:\"browser.name\"}},\"sentry.browser.version\":{brief:\"The version of the browser.\",type:\"string\",keys:[\"browser.version\",\"sentry.browser.version\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"120.0.6099.130\",deprecation:{replacement:\"browser.version\",status:\"backfill\"},aliases:[\"browser.version\"],changelog:[{version:\"0.1.0\",prs:[139]}]},\"sentry.cancellation_reason\":{brief:\"The reason why a span ended early.\",type:\"string\",keys:[\"sentry.cancellation_reason\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"document.hidden\",changelog:[{version:\"0.0.0\"}]},\"sentry.category\":{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).\",type:\"string\",keys:[\"sentry.category\",\"span.category\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"db\",changelog:[{version:\"0.4.0\",prs:[218]}],searchAlias:{name:\"span.category\"}},\"sentry.client_sample_rate\":{brief:\"Rate at which a span was sampled in the SDK.\",type:\"double\",keys:[\"sentry.client_sample_rate\",\"client_sample_rate\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:.5,changelog:[{version:\"0.1.0\",prs:[102]}],searchAlias:{name:\"client_sample_rate\"}},\"sentry.description\":{brief:\"The human-readable description of a span.\",type:\"string\",keys:[\"sentry.description\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"index view query\",changelog:[{version:\"0.1.0\",prs:[135]}]},\"sentry.dist\":{brief:\"The sentry dist.\",type:\"string\",keys:[\"sentry.dist\",\"dist\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1.0\",aliases:[\"dist\"],changelog:[{version:\"0.16.0\",prs:[489],description:\"Added dist as an alias\"},{version:\"0.0.0\"}]},\"sentry.domain\":{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.\",type:\"string\",keys:[\"sentry.domain\",\"span.domain\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",changelog:[{version:\"0.4.0\",prs:[212]}],searchAlias:{name:\"span.domain\"}},\"sentry.dsc.environment\":{brief:\"The environment from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.environment\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"prod\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.project_id\":{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.\",type:\"string\",keys:[\"sentry.dsc.project_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"12345\",changelog:[{version:\"0.7.0\",prs:[358],description:\"Add sentry.dsc.project_id as an attribute\"}]},\"sentry.dsc.public_key\":{brief:\"The public key from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.public_key\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"c51734c603c4430eb57cb0a5728a479d\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.release\":{brief:\"The release identifier from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.release\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"frontend@e8211be71b214afab5b85de4b4c54be3714952bb\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.sampled\":{brief:\"Whether the event was sampled according to the dynamic sampling context.\",type:\"boolean\",keys:[\"sentry.dsc.sampled\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:!0,changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.sample_rate\":{brief:\"The sample rate from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.sample_rate\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"1.0\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.trace_id\":{brief:\"The trace ID from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.trace_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"047372980460430cbc78d9779df33a46\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.dsc.transaction\":{brief:\"The transaction name from the dynamic sampling context.\",type:\"string\",keys:[\"sentry.dsc.transaction\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",example:\"/issues/errors-outages/\",changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.environment\":{brief:\"The sentry environment.\",type:\"string\",keys:[\"sentry.environment\",\"environment\",\"resource.deployment.environment\",\"resource.deployment.environment.name\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"production\",aliases:[\"environment\"],changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"environment\"}},\"sentry.event.serialized_breadcrumbs\":{brief:\"JSON-serialized `breadcrumbs` property from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_breadcrumbs\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.19.0\",prs:[556]}]},\"sentry.event.serialized_contexts\":{brief:\"JSON-serialized `contexts` property from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_contexts\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.19.0\",prs:[556]}]},\"sentry.event.serialized_extra\":{brief:\"JSON-serialized `extra` property from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_extra\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.19.0\",prs:[556]}]},\"sentry.event.serialized_meta\":{brief:\"JSON-serialized `_meta` for the `sentry.event.serialized_*` properties from a Sentry event.\",type:\"string\",keys:[\"sentry.event.serialized_meta\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"internal\",changelog:[{version:\"0.20.0\",prs:[566]}]},\"sentry.exclusive_time\":{brief:\"The exclusive time duration of the span in milliseconds.\",type:\"double\",keys:[\"sentry.exclusive_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.3.0\",prs:[160]},{version:\"0.0.0\"}]},\"sentry.frames.frozen\":{brief:\"The number of frozen frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.frozen.count\",\"frames.frozen\",\"mobile.frozen_frames\",\"sentry.frames.frozen\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:3,deprecation:{replacement:\"app.vitals.frames.frozen.count\",reason:\"Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.frozen.count\",\"frames.frozen\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.frozen attribute\"}]},\"sentry.frames.slow\":{brief:\"The number of slow frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.slow.count\",\"frames.slow\",\"mobile.slow_frames\",\"sentry.frames.slow\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1,deprecation:{replacement:\"app.vitals.frames.slow.count\",reason:\"Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.slow.count\",\"frames.slow\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.slow attribute\"}]},\"sentry.frames.total\":{brief:\"The number of total frames rendered during the lifetime of the span.\",type:\"integer\",keys:[\"app.vitals.frames.total.count\",\"frames.total\",\"mobile.total_frames\",\"sentry.frames.total\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:60,deprecation:{replacement:\"app.vitals.frames.total.count\",reason:\"Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.frames.total.count\",\"frames.total\"],changelog:[{version:\"0.19.0\",prs:[500],description:\"Added sentry.frames.total attribute\"}]},\"sentry.graphql.operation\":{brief:\"Indicates the type of graphql operation, emitted by the Javascript SDK.\",type:\"string\",keys:[\"sentry.graphql.operation\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"getUserById\",changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.group\":{brief:\"Stores the hash of `sentry.normalized_description`. This is primarily used for grouping spans in the product end.\",type:\"string\",keys:[\"sentry.group\",\"span.group\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.4.0\",prs:[212]}],searchAlias:{name:\"span.group\"}},\"sentry.http.prefetch\":{brief:\"If an http request was a prefetch request.\",type:\"boolean\",keys:[\"sentry.http.prefetch\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"sentry.idle_span_finish_reason\":{brief:\"The reason why an idle span ended early.\",type:\"string\",keys:[\"sentry.idle_span_finish_reason\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"idleTimeout\",changelog:[{version:\"0.0.0\"}]},\"sentry.is_localhost\":{brief:\"Indicates whether a telemetry item was sent on a host, device or browser on a localhost URL or IP address.\",type:\"boolean\",keys:[\"sentry.is_localhost\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:!0,examples:[!0,!1],changelog:[{version:\"0.24.0\",prs:[646],description:\"Added sentry.is_localhost attribute\"}],additionalContext:['This attribute is used for the Sentry \"Filter telemetry from localhost\" inbound filter feature.',\"SDKs must set this attribute on every span, as well as every other telemetry item supporting attribuztes.\"]},\"sentry.is_remote\":{brief:\"Indicates whether a span's parent is remote.\",type:\"boolean\",keys:[\"sentry.is_remote\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.3.1\",prs:[190]}]},\"sentry.kind\":{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.\",type:\"string\",keys:[\"sentry.kind\",\"span.kind\",\"otel.kind\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"client\",examples:[\"client\",\"server\",\"producer\",\"consumer\",\"internal\"],aliases:[\"otel.kind\"],changelog:[{version:\"0.19.0\",prs:[517],description:\"Added more examples and additional_context to the attribute\"},{version:\"0.3.1\",prs:[190]}],additionalContext:['Valid attribute values are: \"client\", \"server\", \"producer\", \"consumer\" and \"internal\"'],searchAlias:{name:\"span.kind\"}},\"sentry.link.type\":{brief:\"Set on a span link. Describes the relationship between the span and the linked span.\",type:\"string\",keys:[\"sentry.link.type\",\"link.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"previous_trace\",examples:[\"previous_trace\",\"next_trace\",\"cache_origin\"],changelog:[{version:\"0.27.0\",prs:[687],description:\"Added search alias link.type\"},{version:\"0.25.0\",prs:[656],description:\"Added sentry.link.type attribute\"}],additionalContext:[\"This attribute is exclusively set on span links.\",\"Sentry instrumentation setting span links, sets it to describe the relationship between the span and the linked span.\",\"For known values, see Examples. Add new values to Examples.\"],searchAlias:{name:\"link.type\"}},\"sentry.main_thread\":{brief:\"Whether the span or event occurred on the main thread. Computed by Relay and should not be set by SDKs.\",type:\"boolean\",keys:[\"sentry.main_thread\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},\"sentry.message.parameter.<key>\":{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)\",type:\"string\",keys:[\"sentry.message.parameter.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"sentry.message.parameter.0='123'\",changelog:[{version:\"0.1.0\",prs:[116]}]},\"sentry.message.template\":{brief:\"The parameterized template string.\",type:\"string\",keys:[\"sentry.message.template\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Hello, {name}!\",changelog:[{version:\"0.1.0\",prs:[116]}]},\"sentry.metric.source\":{brief:\"The provenance of a metric. For example, this can be set to indicate if a metric was generated by Relay from a span.\",type:\"string\",keys:[\"sentry.metric.source\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"span\",changelog:[{version:\"0.16.0\",prs:[476],description:\"Added sentry.metric.source attribute\"}]},\"sentry.mobile\":{brief:\"Whether the application is using a mobile SDK. Computed by Relay and should not be set by SDKs.\",type:\"boolean\",keys:[\"sentry.mobile\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.5.0\"}]},\"sentry.module.<key>\":{brief:\"A module that was loaded in the process. The key is the name of the module.\",type:\"string\",keys:[\"sentry.module.<key>\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"sentry.module.brianium/paratest='v7.7.0'\",changelog:[{version:\"0.1.0\",prs:[103]}]},\"sentry.nextjs.ssr.function.route\":{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.\",type:\"string\",keys:[\"sentry.nextjs.ssr.function.route\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"/posts/[id]/layout\",changelog:[{version:\"0.1.0\",prs:[54,106]}]},\"sentry.nextjs.ssr.function.type\":{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.\",type:\"string\",keys:[\"sentry.nextjs.ssr.function.type\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"generateMetadata\",changelog:[{version:\"0.1.0\",prs:[54,106]}]},\"sentry.normalized_db_query\":{brief:\"The normalized version of `db.query.text`.\",type:\"string\",keys:[\"sentry.normalized_db_query\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"SELECT .. FROM sentry_project WHERE (project_id = %s)\",changelog:[{version:\"0.3.1\",prs:[194]}]},\"sentry.normalized_db_query.hash\":{brief:\"The hash of `sentry.normalized_db_query`.\",type:\"string\",keys:[\"sentry.normalized_db_query.hash\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",changelog:[{version:\"0.4.0\",prs:[200]}]},\"sentry.normalized_description\":{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).\",type:\"string\",keys:[\"sentry.normalized_description\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"SELECT .. FROM sentry_project WHERE (project_id = %s)\",changelog:[{version:\"0.4.0\",prs:[212]}]},\"sentry.observed_timestamp_nanos\":{brief:\"The timestamp at which an envelope was received by Relay, in nanoseconds.\",type:\"string\",keys:[\"sentry.observed_timestamp_nanos\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"1544712660300000000\",changelog:[{version:\"0.3.0\",prs:[174]},{version:\"0.2.0\",prs:[137]}]},\"sentry.op\":{brief:\"The operation of a span.\",type:\"string\",keys:[\"sentry.op\",\"span.op\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"http.client\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"span.op\"}},\"sentry.origin\":{brief:\"The origin of the instrumentation (e.g. span, log, etc.)\",type:\"string\",keys:[\"sentry.origin\",\"origin\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"auto.http.otel.fastify\",changelog:[{version:\"0.1.0\",prs:[68]},{version:\"0.0.0\"}],searchAlias:{name:\"origin\"}},\"sentry.pageload.span_id\":{brief:\"The id of the pageload span, set by web vital spans and metrics\",type:\"string\",keys:[\"sentry.pageload.span_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"bf2c8d3df84524de\",changelog:[{version:\"0.17.0\",prs:[495],description:\"Added sentry.pageload.span_id attribute\"}]},\"sentry.platform\":{brief:\"The sdk platform that generated the event.\",type:\"string\",keys:[\"sentry.platform\",\"platform\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"php\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"platform\"}},\"sentry.profiler_id\":{brief:\"The id of the currently running profiler (continuous profiling)\",type:\"string\",keys:[\"sentry.profiler_id\",\"profiler.id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"18779b64dd35d1a538e7ce2dd2d3fad3\",changelog:[{version:\"0.4.0\",prs:[242]}],searchAlias:{name:\"profiler.id\"}},\"sentry.profile_id\":{brief:\"The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling.\",type:\"string\",keys:[\"sentry.profile_id\",\"profile.id\",\"profile_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",aliases:[\"profile_id\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Added profile_id as an alias\"},{version:\"0.6.0\",prs:[344],description:\"Added sentry.profile_id attribute\"}],searchAlias:{name:\"profile.id\"}},\"sentry.relay.ingress\":{brief:\"How an item (span, log, &c.) entered Relay.\",type:\"string\",keys:[\"sentry.relay.ingress\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"OTEL\",changelog:[{version:\"0.17.0\",prs:[491],description:\"Added sentry.relay.ingress attribute\"}]},\"sentry.relay.pipeline\":{brief:\"An internal descriptor of which processing pipeline an item went through in Relay.\",type:\"string\",keys:[\"sentry.relay.pipeline\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"span v2\",changelog:[{version:\"0.17.0\",prs:[491],description:\"Added sentry.relay.pipeline attribute\"}]},\"sentry.release\":{brief:\"The sentry release.\",type:\"string\",keys:[\"sentry.release\",\"release\",\"service.version\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"7.0.0\",aliases:[\"service.version\",\"release\"],changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"release\"}},\"sentry.replay_id\":{brief:\"The id of the sentry replay.\",type:\"string\",keys:[\"sentry.replay_id\",\"replay.id\",\"replay_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"123e4567e89b12d3a456426614174000\",aliases:[\"replay_id\",\"replayId\"],changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"replay.id\",deprecatedAliases:[\"replay_id\"]}},\"sentry.replay_is_buffering\":{brief:\"A sentinel attribute on log events indicating whether the current Session Replay is being buffered (onErrorSampleRate).\",type:\"boolean\",keys:[\"sentry.replay_is_buffering\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.3.0\",prs:[185]}]},\"sentry.report_event\":{brief:\"(Deprecated) The event that caused the SDK to report CLS or LCP (pagehide or navigation)\",type:\"string\",keys:[\"sentry.report_event\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pagehide\",deprecation:{reason:\"The report event moved to browser.web_vital.lcp.report_event and browser.web_vital.cls.report_event, which are themselves deprecated without a replacement. No backfill required.\"},changelog:[{version:\"0.24.0\",prs:[642],description:\"Updated the deprecation reason now that the browser.web_vital.*.report_event attributes are deprecated\"},{version:\"0.5.0\",prs:[320],description:\"Added sentry.report_event attribute\"}]},\"sentry.sdk.integrations\":{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.\",type:\"string[]\",keys:[\"sentry.sdk.integrations\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:[\"InboundFilters\",\"FunctionToString\",\"BrowserApiErrors\",\"Breadcrumbs\"],changelog:[{version:\"0.0.0\",prs:[42]}]},\"sentry.sdk.name\":{brief:\"The sentry sdk name.\",type:\"string\",keys:[\"sentry.sdk.name\",\"sdk.name\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"@sentry/react\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"sdk.name\"}},\"sentry.sdk.version\":{brief:\"The sentry sdk version.\",type:\"string\",keys:[\"sentry.sdk.version\",\"sdk.version\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"7.0.0\",changelog:[{version:\"0.0.0\"}],searchAlias:{name:\"sdk.version\"}},\"sentry.segment.id\":{brief:\"The segment ID of a span\",type:\"string\",keys:[\"sentry.segment.id\",\"sentry.segment_id\",\"transaction.span_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"051581bf3cb55c13\",aliases:[\"sentry.segment_id\"],changelog:[{version:\"0.1.0\",prs:[107,124]}]},\"sentry.segment_id\":{brief:\"The segment ID of a span\",type:\"string\",keys:[\"sentry.segment.id\",\"sentry.segment_id\",\"transaction.span_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"051581bf3cb55c13\",deprecation:{replacement:\"sentry.segment.id\",status:\"backfill\"},aliases:[\"sentry.segment.id\"],changelog:[{version:\"0.1.0\",prs:[124]}],searchAlias:{name:\"transaction.span_id\"}},\"sentry.segment.name\":{brief:\"The segment name of a span\",type:\"string\",keys:[\"sentry.segment.name\",\"transaction\",\"sentry.transaction\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET /user\",aliases:[\"sentry.transaction\",\"transaction\"],changelog:[{version:\"0.6.0\",prs:[345],description:\"Added sentry.transaction and transaction aliases\"},{version:\"0.1.0\",prs:[104]}],searchAlias:{name:\"transaction\"}},\"sentry.segment.name.source\":{brief:\"The source of the segment span name. Should only be set on segment spans.\",type:\"string\",keys:[\"sentry.segment.name.source\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"internal\",example:\"route\",examples:[\"route\",\"component\",\"view\",\"task\",\"custom\",\"url\"],changelog:[{version:\"0.19.0\",prs:[466],description:\"Added sentry.segment.name.source\"}],additionalContext:[\"This attribute is the replacement for `transaction_info.source` on transactions.\",\"Should we bring back clustering for segment names (like we do for transaction names), this attribute will be used to determine if a segment name should be clustered.\"]},\"sentry.server_sample_rate\":{brief:\"Rate at which a span was sampled in Relay.\",type:\"double\",keys:[\"sentry.server_sample_rate\",\"server_sample_rate\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:.5,changelog:[{version:\"0.1.0\",prs:[102]}],searchAlias:{name:\"server_sample_rate\"}},\"sentry.source\":{brief:\"The source of a span, also referred to as transaction source.\",type:\"string\",keys:[\"sentry.source\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"route\",deprecation:{reason:\"This attribute is superseded by sentry.segment.name.source, which only needs to be set on segment spans.\"},changelog:[{version:\"0.19.0\",prs:[510],description:\"Removed the sentry.span.source replacement\"},{version:\"0.5.0\"}]},\"sentry.span.source\":{brief:\"The source of a span, also referred to as transaction source.\",type:\"string\",keys:[\"sentry.span.source\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"route\",deprecation:{reason:\"This attribute is superseded by sentry.segment.name.source, which only needs to be set on segment spans.\"},changelog:[{version:\"0.19.0\",prs:[510],description:\"Deprecated; superseded by sentry.segment.name.source on segment spans\"},{version:\"0.4.0\",prs:[214]},{version:\"0.0.0\"}]},\"sentry.status\":{brief:`The span's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.`,type:\"string\",keys:[\"sentry.status\",\"span.status\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"ok\",changelog:[{version:\"0.14.0\",prs:[453]}],searchAlias:{name:\"span.status\"}},\"sentry.status_code\":{brief:\"The HTTP status code used in Sentry Insights. Typically set by Sentry during ingestion, rather than by clients.\",type:\"integer\",keys:[\"sentry.status_code\",\"span.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[223,228]}],searchAlias:{name:\"span.status_code\"}},\"sentry.status.message\":{brief:\"The from OTLP extracted status message.\",type:\"string\",keys:[\"sentry.status.message\",\"span.status.message\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"foobar\",changelog:[{version:\"0.3.1\",prs:[190]}],searchAlias:{name:\"span.status.message\"}},\"sentry.sveltekit.navigation.from\":{brief:\"the navigation origin (sveltekit router)\",type:\"string\",keys:[\"router.navigation.origin\",\"navigation.origin\",\"sentry.sveltekit.navigation.from\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/home\",deprecation:{replacement:\"router.navigation.origin\",reason:\"Use the more generic attribute instead\",status:\"backfill\"},aliases:[\"navigation.origin\",\"router.navigation.origin\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Re-pointed deprecation from navigation.origin to router.navigation.origin\"},{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.from attribute\"}]},\"sentry.sveltekit.navigation.to\":{brief:\"the navigation destination\",type:\"string\",keys:[\"sentry.sveltekit.navigation.to\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/users/:id\",deprecation:{reason:\"the navigation destination is already covered by url.* attributes\"},changelog:[{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.to attribute\"}]},\"sentry.sveltekit.navigation.type\":{brief:\"The type of navigation event emitted from the sveltekit client router\",type:\"string\",keys:[\"router.navigation.type\",\"navigation.type\",\"sentry.sveltekit.navigation.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"link\",deprecation:{replacement:\"router.navigation.type\",reason:\"Use the more generic attribute instead\",status:\"backfill\"},aliases:[\"navigation.type\",\"router.navigation.type\"],changelog:[{version:\"0.22.0\",prs:[600],description:\"Re-pointed deprecation from navigation.type to router.navigation.type\"},{version:\"0.16.0\",prs:[467],description:\"Added sentry.sveltekit.navigation.type attribute\"}]},\"sentry.thread.id\":{brief:'Current \"managed\" thread ID.',type:\"integer\",keys:[\"thread.id\",\"sentry.thread.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:56,deprecation:{replacement:\"thread.id\",reason:\"This attribute is being deprecated in favor of the OTel-standard thread.id\",status:\"backfill\"},changelog:[{version:\"0.13.0\",prs:[451]}],searchAlias:{name:\"thread.id\"}},\"sentry.timestamp.sequence\":{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.\",type:\"integer\",keys:[\"sentry.timestamp.sequence\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:0,changelog:[{version:\"0.5.0\",prs:[262]}]},\"sentry.trace_lifecycle\":{brief:\"Indicates the chosen trace lifecycle mode of the SDK (stream or static)\",type:\"string\",keys:[\"sentry.trace_lifecycle\",\"trace_lifecycle\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stream\",changelog:[{version:\"0.13.0\",prs:[442],description:\"Added sentry.trace_lifecycle attribute\"}],searchAlias:{name:\"trace_lifecycle\"}},\"sentry.trace.parent_span_id\":{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.\",type:\"string\",keys:[\"sentry.trace.parent_span_id\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"b0e6f15b45c36b12\",deprecation:{},changelog:[{version:\"0.5.0\",prs:[287],description:\"Deprecate `sentry.trace.parent_span_id`\"},{version:\"0.1.0\",prs:[116]}]},\"sentry.trace.status\":{brief:`The segment's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.`,type:\"string\",keys:[\"sentry.trace.status\",\"trace.status\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"ok\",changelog:[{version:\"0.14.0\",prs:[453]}],searchAlias:{name:\"trace.status\"}},\"sentry.transaction\":{brief:\"The sentry transaction (segment name).\",type:\"string\",keys:[\"sentry.segment.name\",\"transaction\",\"sentry.transaction\"],applyScrubbing:{key:\"never\"},isInOtel:!1,visibility:\"public\",example:\"GET /\",deprecation:{replacement:\"sentry.segment.name\",reason:\"This attribute is being deprecated in favor of sentry.segment.name\",status:\"backfill\"},aliases:[\"sentry.segment.name\",\"transaction\"],changelog:[{version:\"0.6.0\",prs:[345],description:\"Deprecated sentry.transaction in favor of sentry.segment.name\"},{version:\"0.0.0\"}]},\"sentry.user.email\":{brief:\"User email address.\",type:\"string\",keys:[\"user.email\",\"sentry.user.email\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.email\",status:\"backfill\"},aliases:[\"user.email\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.email\"}},\"sentry.user.geo.city\":{brief:\"Human readable city name.\",type:\"string\",keys:[\"user.geo.city\",\"sentry.user.geo.city\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.city\",status:\"backfill\"},aliases:[\"user.geo.city\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.city\"}},\"sentry.user.geo.country_code\":{brief:\"Two-letter country code (ISO 3166-1 alpha-2).\",type:\"string\",keys:[\"user.geo.country_code\",\"sentry.user.geo.country_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.country_code\",status:\"backfill\"},aliases:[\"user.geo.country_code\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.country_code\"}},\"sentry.user.geo.region\":{brief:\"Human readable region name or code.\",type:\"string\",keys:[\"user.geo.region\",\"sentry.user.geo.region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.region\",status:\"backfill\"},aliases:[\"user.geo.region\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.region\"}},\"sentry.user.geo.subdivision\":{brief:\"Human readable subdivision name.\",type:\"string\",keys:[\"user.geo.subdivision\",\"sentry.user.geo.subdivision\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.geo.subdivision\",status:\"backfill\"},aliases:[\"user.geo.subdivision\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.geo.subdivision\"}},\"sentry.user.id\":{brief:\"Unique identifier of the user.\",type:\"string\",keys:[\"user.id\",\"sentry.user.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.id\",status:\"backfill\"},aliases:[\"user.id\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.id\"}},\"sentry.user.ip\":{brief:\"The IP address of the user.\",type:\"string\",keys:[\"user.ip_address\",\"sentry.user.ip\",\"user.ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.ip_address\",status:\"backfill\"},aliases:[\"user.ip_address\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.ip\"}},\"sentry.user.username\":{brief:\"Short name or login/username of the user.\",type:\"string\",keys:[\"user.name\",\"sentry.user.username\",\"user.username\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"user.name\",status:\"backfill\"},aliases:[\"user.name\"],changelog:[{version:\"0.10.0\",prs:[406]}],searchAlias:{name:\"user.username\"}},\"server.address\":{brief:\"Preferably the server domain name if available without reverse DNS lookup, or an IP address or Unix domain socket name. For compatibility, it may contain what the hostname command returns on UNIX systems, the fully qualified hostname, or another name specified by the user.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",aliases:[\"address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"server_name\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[645,647],description:\"Broaden brief to allow hostnames\"},{version:\"0.21.0\",prs:[588,602],description:\"Added net.peer.name as an alias\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.1.0\",prs:[108,127]},{version:\"0.0.0\"}]},server_name:{brief:\"The name of the device. On servers and desktops, this is typically the hostname.\",type:\"string\",keys:[\"server.address\",\"address\",\"http.server_name\",\"net.host.name\",\"server_name\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"example.com\",deprecation:{replacement:\"server.address\",reason:\"This attribute is being deprecated in favor of server.address.\",status:\"backfill\"},aliases:[\"address\",\"server.address\",\"http.server_name\",\"net.host.name\",\"http.host\",\"net.peer.name\"],changelog:[{version:\"0.24.0\",prs:[647],description:\"Alias the server.address alias group\"},{version:\"0.21.0\",prs:[588,602],description:\"Alias device.name instead of the server.address alias group\"},{version:\"0.19.0\",prs:[534],description:\"Added address as an alias\"},{version:\"0.16.0\",prs:[477],description:\"Added server_name attribute, deprecated in favor of server.address\"}]},\"server.port\":{brief:\"Server port number.\",type:\"integer\",keys:[\"server.port\",\"net.host.port\",\"port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,aliases:[\"net.host.port\",\"port\"],changelog:[{version:\"0.19.0\",prs:[532],description:\"Added port as an alias\"},{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"service.name\":{brief:\"Logical name of the service.\",type:\"string\",keys:[\"service.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"omegastar\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"service.version\":{brief:\"The version string of the service API or implementation. The format is not defined by these conventions.\",type:\"string\",keys:[\"service.version\",\"sentry.release\",\"release\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"5.0.0\",aliases:[\"sentry.release\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"session.id\":{brief:\"A unique id identifying the active session at the time of setting this attribute\",type:\"string\",keys:[\"session.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"00112233-4455-6677-8899-aabbccddeeff\",changelog:[{version:\"0.11.0\",prs:[412],description:\"Added session.id attribute\"}]},stall_percentage:{brief:\"The fraction of time the app was stalled. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.percentage\",\"stall_percentage\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.stall.percentage\",reason:\"Replaced by app.vitals.stall.percentage to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.stall.percentage\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.stall.percentage\"},{version:\"0.7.0\",prs:[362],description:\"Added stall_percentage attribute\"}]},stall_total_time:{brief:\"The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay.\",type:\"double\",keys:[\"app.vitals.stall.duration\",\"stall_total_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",deprecation:{replacement:\"app.vitals.stall.duration\",reason:\"Replaced by app.vitals.stall.duration to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.stall.duration\"],changelog:[{version:\"0.19.0\",prs:[493],description:\"Deprecated in favor of app.vitals.stall.duration\"},{version:\"0.7.0\",prs:[362],description:\"Added stall_total_time attribute\"}]},\"starlette.middleware_name\":{brief:\"The name of the Starlette middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[485],description:\"Added starlette.middleware_name attribute, deprecated in favor of middleware.name\"}]},\"starlite.middleware_name\":{brief:\"The name of the Starlite middleware.\",type:\"string\",keys:[\"middleware.name\",\"django.middleware_name\",\"litestar.middleware_name\",\"starlette.middleware_name\",\"starlite.middleware_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"AuthenticationMiddleware\",examples:[\"AuthenticationMiddleware\"],deprecation:{replacement:\"middleware.name\",reason:\"This attribute is being deprecated in favor of middleware.name, which is the framework-agnostic replacement.\",status:\"backfill\"},aliases:[\"middleware.name\"],changelog:[{version:\"0.19.0\",prs:[519],description:\"Added starlite.middleware_name attribute\"}]},\"state.type\":{brief:\"The type of state management library\",type:\"string\",keys:[\"state.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"redux\",changelog:[{version:\"0.7.0\",prs:[365],description:\"Added state.type attribute\"}]},\"subprocess.pid\":{brief:\"The process ID of a subprocess.\",type:\"integer\",keys:[\"process.pid\",\"subprocess.pid\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:12345,deprecation:{replacement:\"process.pid\",reason:\"This attribute is being deprecated in favor of process.pid, which is the OTel-aligned replacement.\",status:\"backfill\"},aliases:[\"process.pid\"],changelog:[{version:\"0.19.0\",prs:[487],description:\"Added subprocess.pid attribute, deprecated in favor of process.pid\"}]},\"sveltekit.load.environment\":{brief:\"The runtime environment in which the SvelteKit load function was executed. Known values are `'server'` and `'client'`.\",type:\"string\",keys:[\"sveltekit.load.environment\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"server\",examples:[\"server\",\"client\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.environment attribute\"}],additionalContext:[\"Added by the SvelteKit framework itself. The Sentry SDK only forwards the attribute to Sentry.\"]},\"sveltekit.load.node_id\":{brief:\"The path to the SvelteKit load function.\",type:\"string\",keys:[\"sveltekit.load.node_id\",\"code.file.path\",\"code.filepath\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"src/routes/users/:id/+page.server.ts\",examples:[\"src/routes/users/:id/+page.server.ts\"],aliases:[\"code.file.path\",\"code.filepath\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_id attribute\"}],additionalContext:[\"Added by the SvelteKit framework itself. The Sentry SDK only forwards the attribute to Sentry.\"]},\"sveltekit.load.node_type\":{brief:\"The kind of SvelteKit load function that was executed, distinguishing page from layout and universal from server load functions.\",type:\"string\",keys:[\"sveltekit.load.node_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"+page.server\",examples:[\"+page.server\",\"+layout\",\"+layout.server\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.load.node_type attribute\"}],additionalContext:[\"Added by the SvelteKit framework itself. The Sentry SDK only forwards the attribute to Sentry.\"]},\"sveltekit.tracing.original_name\":{brief:\"The original span name as emitted by SvelteKit.\",type:\"string\",keys:[\"sveltekit.tracing.original_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sveltekit.handle.root\",examples:[\"sveltekit.handle.root\"],changelog:[{version:\"0.22.0\",prs:[611],description:\"Added sveltekit.tracing.original_name attribute\"}],additionalContext:[\"The Sentry SDK renames SvelteKit-emitted spans to match Sentry's span name semantics, and preserves the name SvelteKit originally set in this attribute.\"]},\"thread.id\":{brief:\"Current \\u201Cmanaged\\u201D thread ID.\",type:\"integer\",keys:[\"thread.id\",\"sentry.thread.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:56,changelog:[{version:\"0.0.0\"}]},\"thread.name\":{brief:\"Current thread name.\",type:\"string\",keys:[\"thread.name\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"main\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"timber.tag\":{brief:\"The log tag provided by the timber logging framework.\",type:\"string\",keys:[\"timber.tag\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"MyTag\",changelog:[{version:\"0.3.0\",prs:[183]}]},time_to_full_display:{brief:\"The duration of time to full display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttfd.value\",\"time_to_full_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.ttfd.value\",reason:\"Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.ttfd.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added and deprecated in favor of app.vitals.ttfd.value\"}]},time_to_initial_display:{brief:\"The duration of time to initial display in milliseconds\",type:\"double\",keys:[\"app.vitals.ttid.value\",\"time_to_initial_display\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1234.56,deprecation:{replacement:\"app.vitals.ttid.value\",reason:\"Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes\",status:\"backfill\"},aliases:[\"app.vitals.ttid.value\"],changelog:[{version:\"0.5.0\",prs:[313],description:\"Added and deprecated in favor of app.vitals.ttid.value\"}]},transaction:{brief:\"The sentry transaction (segment name).\",type:\"string\",keys:[\"sentry.segment.name\",\"transaction\",\"sentry.transaction\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET /\",deprecation:{replacement:\"sentry.segment.name\",status:\"normalize\"},aliases:[\"sentry.segment.name\",\"sentry.transaction\"],changelog:[{version:\"0.19.0\",prs:[497],description:\"Change deprecation from backfill to normalize\"},{version:\"0.6.0\",prs:[345],description:\"Updated transaction deprecation replacement to sentry.segment.name\"},{version:\"0.1.0\",prs:[61,127]},{version:\"0.0.0\"}]},\"trpc.procedure_path\":{brief:\"The path of the tRPC procedure being called\",type:\"string\",keys:[\"trpc.procedure_path\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"user.getById\",changelog:[{version:\"0.7.0\",prs:[370],description:\"Added trpc.procedure_path attribute\"}]},\"trpc.procedure_type\":{brief:\"The type of the tRPC procedure\",type:\"string\",keys:[\"trpc.procedure_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"query\",changelog:[{version:\"0.7.0\",prs:[370],description:\"Added trpc.procedure_type attribute\"}]},ttfb:{brief:\"The value of the recorded Time To First Byte (TTFB) web vital in milliseconds\",type:\"double\",keys:[\"browser.web_vital.ttfb.value\",\"ttfb\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:194,deprecation:{replacement:\"browser.web_vital.ttfb.value\",reason:\"This attribute is being deprecated in favor of browser.web_vital.ttfb.value\",status:\"backfill\"},aliases:[\"browser.web_vital.ttfb.value\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"ttfb.requestTime\":{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\",type:\"double\",keys:[\"browser.web_vital.ttfb.request_time\",\"ttfb.requestTime\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1554.5814,deprecation:{replacement:\"browser.web_vital.ttfb.request_time\",reason:\"This attribute is being deprecated in favor of browser.web_vital.ttfb.request_time\",status:\"backfill\"},aliases:[\"browser.web_vital.ttfb.request_time\"],changelog:[{version:\"0.5.0\",prs:[235]}]},\"turbo_modules.total_call_count\":{brief:\"The number of native module calls in the flushed call aggregate. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.count\",\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:42,examples:[42],deprecation:{replacement:\"react_native.module.call.count\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.call.count\",\"turbo_module.total_call_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.total_call_count and deprecated it in favor of react_native.module.call.count\"}]},\"turbo_modules.total_duration_ms\":{brief:\"The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.\",type:\"double\",keys:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128.45,examples:[128.45],deprecation:{replacement:\"react_native.module.duration.total\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.total_duration_ms and deprecated it in favor of react_native.module.duration.total\"}]},\"turbo_modules.total_error_count\":{brief:\"The number of failed native module calls in the flushed call aggregate. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.error.count\",\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],deprecation:{replacement:\"react_native.module.error.count\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.error.count\",\"turbo_module.total_error_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.total_error_count and deprecated it in favor of react_native.module.error.count\"}]},\"turbo_modules.unique_methods\":{brief:\"The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7,examples:[7],deprecation:{replacement:\"react_native.module.call.distinct_count\",reason:\"Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix\",status:\"backfill\"},aliases:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_modules.unique_methods and deprecated it in favor of react_native.module.call.distinct_count\"}]},\"turbo_module.arch\":{brief:\"The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.\",type:\"string\",keys:[\"react_native.architecture\",\"turbo_module.arch\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"new\",examples:[\"new\",\"legacy\"],deprecation:{replacement:\"react_native.architecture\",reason:\"Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules\",status:\"backfill\"},aliases:[\"react_native.architecture\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.arch and deprecated it in favor of react_native.architecture\"}]},\"turbo_module.method\":{brief:\"The name of the native module method that was called. Only applies to React Native.\",type:\"string\",keys:[\"react_native.module.method\",\"turbo_module.method\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"getUniqueId\",examples:[\"getUniqueId\"],deprecation:{replacement:\"react_native.module.method\",reason:\"Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules\",status:\"backfill\"},aliases:[\"react_native.module.method\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.method and deprecated it in favor of react_native.module.method\"}]},\"turbo_module.name\":{brief:\"The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.\",type:\"string\",keys:[\"react_native.module.name\",\"turbo_module.name\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo\",examples:[\"RNDeviceInfo\"],deprecation:{replacement:\"react_native.module.name\",reason:\"Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules\",status:\"backfill\"},aliases:[\"react_native.module.name\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.name and deprecated it in favor of react_native.module.name\"}]},\"turbo_module.top_module\":{brief:\"The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.\",type:\"string\",keys:[\"react_native.module.top.name\",\"turbo_module.top_module\"],applyScrubbing:{key:\"manual\",reason:\"Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable\"},isInOtel:!1,visibility:\"public\",example:\"RNDeviceInfo.getUniqueId\",examples:[\"RNDeviceInfo.getUniqueId\"],deprecation:{replacement:\"react_native.module.top.name\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.top.name\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.top_module and deprecated it in favor of react_native.module.top.name\"}]},\"turbo_module.top_module_duration_ms\":{brief:\"The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.\",type:\"double\",keys:[\"react_native.module.top.duration\",\"turbo_module.top_module_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:87.25,examples:[87.25],deprecation:{replacement:\"react_native.module.top.duration\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.top.duration\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.top_module_duration_ms and deprecated it in favor of react_native.module.top.duration\"}]},\"turbo_module.total_call_count\":{brief:\"The number of native module calls observed during the lifetime of the span. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.count\",\"turbo_module.total_call_count\",\"turbo_modules.total_call_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:42,examples:[42],deprecation:{replacement:\"react_native.module.call.count\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.call.count\",\"turbo_modules.total_call_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.total_call_count and deprecated it in favor of react_native.module.call.count\"}]},\"turbo_module.total_duration_ms\":{brief:\"The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.\",type:\"double\",keys:[\"react_native.module.duration.total\",\"turbo_module.total_duration_ms\",\"turbo_modules.total_duration_ms\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:128.45,examples:[128.45],deprecation:{replacement:\"react_native.module.duration.total\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.duration.total\",\"turbo_modules.total_duration_ms\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.total_duration_ms and deprecated it in favor of react_native.module.duration.total\"}]},\"turbo_module.total_error_count\":{brief:\"The number of native module calls that failed during the lifetime of the span. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.error.count\",\"turbo_module.total_error_count\",\"turbo_modules.total_error_count\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:2,examples:[2],deprecation:{replacement:\"react_native.module.error.count\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.error.count\",\"turbo_modules.total_error_count\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.total_error_count and deprecated it in favor of react_native.module.error.count\"}]},\"turbo_module.unique_methods\":{brief:\"The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.\",type:\"integer\",keys:[\"react_native.module.call.distinct_count\",\"turbo_module.unique_methods\",\"turbo_modules.unique_methods\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:7,examples:[7],deprecation:{replacement:\"react_native.module.call.distinct_count\",reason:\"Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping\",status:\"backfill\"},aliases:[\"react_native.module.call.distinct_count\",\"turbo_modules.unique_methods\"],changelog:[{version:\"0.24.0\",prs:[564],description:\"Added turbo_module.unique_methods and deprecated it in favor of react_native.module.call.distinct_count\"}]},type:{brief:\"More granular type of the operation happening.\",type:\"string\",keys:[\"type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"fetch\",changelog:[{version:\"0.0.0\"}]},\"ui.component_name\":{brief:\"The name of the associated component.\",type:\"string\",keys:[\"ui.component_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"HomeButton\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"ui.contributes_to_ttfd\":{brief:\"Whether the span execution contributed to the TTFD (time to fully drawn) metric.\",type:\"boolean\",keys:[\"ui.contributes_to_ttfd\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"ui.contributes_to_ttid\":{brief:\"Whether the span execution contributed to the TTID (time to initial display) metric.\",type:\"boolean\",keys:[\"ui.contributes_to_ttid\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,changelog:[{version:\"0.0.0\"}]},\"ui.element.height\":{brief:\"The height of the UI element (for Html in pixels)\",type:\"integer\",keys:[\"ui.element.height\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:256,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.height attribute\"}]},\"ui.element.id\":{brief:\"The id of the UI element\",type:\"string\",keys:[\"ui.element.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"btn-login\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.id attribute\"}]},\"ui.element.identifier\":{brief:\"The identifier used to measure the UI element timing\",type:\"string\",keys:[\"ui.element.identifier\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"heroImage\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.identifier attribute\"}]},\"ui.element.load_time\":{brief:\"The loading time of a UI element (from time origin to finished loading)\",type:\"double\",keys:[\"ui.element.load_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:998.2234,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.load_time attribute\"}]},\"ui.element.paint_type\":{brief:\"The type of element paint. Can either be 'image-paint' or 'text-paint'\",type:\"string\",keys:[\"ui.element.paint_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"image-paint\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.paint_type attribute\"}]},\"ui.element.render_time\":{brief:\"The rendering time of the UI element (from time origin to finished rendering)\",type:\"double\",keys:[\"ui.element.render_time\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1023.1124,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.render_time attribute\"}]},\"ui.element.type\":{brief:\"type of the UI element\",type:\"string\",keys:[\"ui.element.type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"img\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.type attribute\"}]},\"ui.element.url\":{brief:\"The URL of the UI element (e.g. an img src)\",type:\"string\",keys:[\"ui.element.url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://assets.myapp.com/hero.png\",changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.url attribute\"}]},\"ui.element.width\":{brief:\"The width of the UI element (for HTML in pixels)\",type:\"integer\",keys:[\"ui.element.width\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:512,changelog:[{version:\"0.5.0\",prs:[284],description:\"Added ui.element.width attribute\"}]},url:{brief:\"The URL of the resource that was fetched.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",deprecation:{replacement:\"url.full\",status:\"backfill\"},aliases:[\"url.full\",\"http.url\",\"aws.request.url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.1.0\",prs:[61]},{version:\"0.0.0\"}]},\"url.domain\":{brief:\"Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\",type:\"string\",keys:[\"url.domain\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"example.com\",changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"url.fragment\":{brief:\"The fragments present in the URI. Note that this does not contain the leading # character, while the `http.fragment` attribute does.\",type:\"string\",keys:[\"url.fragment\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"details\",changelog:[{version:\"0.0.0\"}]},\"url.full\":{brief:\"The URL of the resource that was fetched.\",type:\"string\",keys:[\"url.full\",\"aws.request.url\",\"http.url\",\"messaging.url\",\"url\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"https://example.com/test?foo=bar#buzz\",aliases:[\"http.url\",\"url\",\"aws.request.url\",\"messaging.url\"],changelog:[{version:\"0.21.0\",prs:[581],description:\"Added messaging.url as an alias\"},{version:\"0.19.0\",prs:[488],description:\"Added aws.request.url as an alias\"},{version:\"0.1.0\",prs:[108]},{version:\"0.0.0\"}]},\"url.path\":{brief:\"The URI path component.\",type:\"string\",keys:[\"url.path\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"/foo\",changelog:[{version:\"0.0.0\"}]},\"url.path.parameter.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"url.path.parameter.<key>\",\"params.<key>\",\"url.path.params.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"url.path.parameter.id='123'\",aliases:[\"params.<key>\",\"url.path.params.<key>\"],changelog:[{version:\"0.21.0\",prs:[586],description:\"Added url.path.params.<key> as an alias\"},{version:\"0.1.0\",prs:[103]}]},\"url.path.params.<key>\":{brief:\"Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.\",type:\"string\",keys:[\"url.path.parameter.<key>\",\"params.<key>\",\"url.path.params.<key>\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"url.path.params.id='123'\",examples:[\"url.path.params.id='123'\"],deprecation:{replacement:\"url.path.parameter.<key>\",reason:\"This attribute is being deprecated in favor of url.path.parameter.<key>.\",status:\"backfill\"},aliases:[\"url.path.parameter.<key>\",\"params.<key>\"],changelog:[{version:\"0.21.0\",prs:[586],description:\"Added url.path.params.<key> attribute\"}]},\"url.port\":{brief:\"Server port number.\",type:\"integer\",keys:[\"url.port\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:1337,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.0.0\"}]},\"url.query\":{brief:\"The query string present in the URL. Note that this does not contain the leading ? character, while the `http.query` attribute does.\",type:\"string\",keys:[\"url.query\"],applyScrubbing:{key:\"auto\",reason:\"Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\"},isInOtel:!0,visibility:\"public\",example:\"foo=bar&bar=baz\",changelog:[{version:\"0.0.0\"}]},\"url.same_origin\":{brief:\"Indicates that a URL has the same origin as the current page's origin in the browser.\",type:\"boolean\",keys:[\"http.request.same_origin\",\"url.same_origin\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:!0,deprecation:{replacement:\"http.request.same_origin\",reason:\"This attribute is being deprecated in favor of http.request.same_origin.\",status:\"backfill\"},aliases:[\"http.request.same_origin\"],changelog:[{version:\"0.16.0\",prs:[456],description:\"Added url.same_origin attribute, deprecated in favor of http.request.same_origin\"}]},\"url.scheme\":{brief:\"The URI scheme component identifying the used protocol.\",type:\"string\",keys:[\"url.scheme\",\"http.scheme\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"https\",aliases:[\"http.scheme\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"url.template\":{brief:\"The low-cardinality template of an absolute URL path reference.\",type:\"string\",keys:[\"url.template\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",example:\"/users/{id}\",examples:[\"/users/{id}\",\"/users/:id\",\"/about\"],changelog:[{version:\"0.19.0\",prs:[505,521],description:\"Added multiple examples, removed alias to `http.route`, added additional context\"},{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}],additionalContext:[\"This attribute should primarily be set by client-side routing instrumentation, or `http.client` spans (if applicable).\",\"Use `http.route` for server-side instrumentation that captures the framework route of an incoming request.\"]},\"user_agent.original\":{brief:\"Value of the HTTP User-Agent header sent by the client.\",type:\"string\",keys:[\"user_agent.original\",\"http.user_agent\"],applyScrubbing:{key:\"manual\"},isInOtel:!0,visibility:\"public\",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\",aliases:[\"http.user_agent\"],changelog:[{version:\"0.1.0\",prs:[127]},{version:\"0.0.0\"}]},\"user.email\":{brief:\"User email address.\",type:\"string\",keys:[\"user.email\",\"sentry.user.email\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"test@example.com\",aliases:[\"sentry.user.email\"],changelog:[{version:\"0.0.0\"}]},\"user.full_name\":{brief:\"User's full name.\",type:\"string\",keys:[\"user.full_name\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"John Smith\",changelog:[{version:\"0.0.0\"}]},\"user.geo.city\":{brief:\"Human readable city name.\",type:\"string\",keys:[\"user.geo.city\",\"sentry.user.geo.city\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Toronto\",aliases:[\"sentry.user.geo.city\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.country_code\":{brief:\"Two-letter country code (ISO 3166-1 alpha-2).\",type:\"string\",keys:[\"user.geo.country_code\",\"sentry.user.geo.country_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"CA\",aliases:[\"sentry.user.geo.country_code\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.region\":{brief:\"Human readable region name or code.\",type:\"string\",keys:[\"user.geo.region\",\"sentry.user.geo.region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Canada\",aliases:[\"sentry.user.geo.region\"],changelog:[{version:\"0.0.0\"}]},\"user.geo.subdivision\":{brief:\"Human readable subdivision name.\",type:\"string\",keys:[\"user.geo.subdivision\",\"sentry.user.geo.subdivision\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"Ontario\",aliases:[\"sentry.user.geo.subdivision\"],changelog:[{version:\"0.0.0\"}]},\"user.hash\":{brief:\"Unique user hash to correlate information for a user in anonymized form.\",type:\"string\",keys:[\"user.hash\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"8ae4c2993e0f4f3b8b2d1b1f3b5e8f4d\",changelog:[{version:\"0.0.0\"}]},\"user.id\":{brief:\"Unique identifier of the user.\",type:\"string\",keys:[\"user.id\",\"sentry.user.id\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"S-1-5-21-202424912787-2692429404-2351956786-1000\",aliases:[\"sentry.user.id\"],changelog:[{version:\"0.0.0\"}]},\"user.ip_address\":{brief:\"The IP address of the user.\",type:\"string\",keys:[\"user.ip_address\",\"sentry.user.ip\",\"user.ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"192.168.1.1\",aliases:[\"sentry.user.ip\"],changelog:[{version:\"0.1.0\",prs:[75]}]},\"user.name\":{brief:\"Short name or login/username of the user.\",type:\"string\",keys:[\"user.name\",\"sentry.user.username\",\"user.username\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:\"j.smith\",aliases:[\"sentry.user.username\"],changelog:[{version:\"0.0.0\"}]},\"user.roles\":{brief:\"Array of user roles at the time of the event.\",type:\"string[]\",keys:[\"user.roles\"],applyScrubbing:{key:\"auto\"},isInOtel:!0,visibility:\"public\",example:[\"admin\",\"editor\"],changelog:[{version:\"0.0.0\"}]},\"vercel.ai.telemetry.metadata.<key>\":{brief:\"Metadata passed to a Vercel AI SDK call through `experimental_telemetry.metadata`, with <key> being the metadata key name.\",type:\"string\",keys:[\"vercel.ai.telemetry.metadata.<key>\"],applyScrubbing:{key:\"auto\",reason:\"Metadata is user-defined and can contain user data\"},isInOtel:!1,visibility:\"public\",hasDynamicSuffix:!0,example:\"vercel.ai.telemetry.metadata.tenantId='acme'\",examples:[\"vercel.ai.telemetry.metadata.tenantId='acme'\"],changelog:[{version:\"0.26.0\",prs:[662],description:\"Added vercel.ai.telemetry.metadata.<key> attribute\"}],additionalContext:[\"Set on `gen_ai` spans for `invoke_agent`, `generate_content` and `embeddings` operations. Not set on `execute_tool` spans.\",\"The Vercel AI SDK's own OpenTelemetry spans emit the same data as `ai.telemetry.metadata.<key>`.\",\"The Vercel AI SDK also allows numbers, booleans and arrays as metadata values. SDKs MUST convert these values to strings.\",\"This attribute is open-ended on purpose. The Vercel AI SDK does not define the metadata keys. If Vercel defines a stricter spec for this metadata, consider moving it into `gen_ai.*` attributes.\"]},\"vercel.branch\":{brief:\"Git branch name for Vercel project\",type:\"string\",keys:[\"vercel.branch\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"main\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.build_id\":{brief:\"Identifier for the Vercel build (only present on build logs)\",type:\"string\",keys:[\"vercel.build_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"bld_cotnkcr76\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.deployment_id\":{brief:\"Identifier for the Vercel deployment\",type:\"string\",keys:[\"vercel.deployment_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"dpl_233NRGRjVZX1caZrXWtz5g1TAksD\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.destination\":{brief:\"Origin of the external content in Vercel (only on external logs)\",type:\"string\",keys:[\"vercel.destination\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https://vitals.vercel-insights.com/v1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.edge_type\":{brief:\"Type of edge runtime in Vercel\",type:\"string\",keys:[\"vercel.edge_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"edge-function\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.entrypoint\":{brief:\"Entrypoint for the request in Vercel\",type:\"string\",keys:[\"vercel.entrypoint\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"api/index.js\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.execution_region\":{brief:\"Region where the request is executed\",type:\"string\",keys:[\"vercel.execution_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.id\":{brief:\"Unique identifier for the log entry in Vercel\",type:\"string\",keys:[\"vercel.id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"1573817187330377061717300000\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.ja3_digest\":{brief:\"JA3 fingerprint digest of Vercel request\",type:\"string\",keys:[\"vercel.ja3_digest\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.ja4_digest\":{brief:\"JA4 fingerprint digest\",type:\"string\",keys:[\"vercel.ja4_digest\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"t13d1516h2_8daaf6152771_02713d6af862\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.log_type\":{brief:\"Vercel log output type\",type:\"string\",keys:[\"vercel.log_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"stdout\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.path\":{brief:\"Function or dynamic path of the request in Vercel.\",type:\"string\",keys:[\"vercel.path\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"/dynamic/[route].json\",changelog:[{version:\"0.6.0\",prs:[349],description:\"Added vercel.path attribute\"}]},\"vercel.project_id\":{brief:\"Identifier for the Vercel project\",type:\"string\",keys:[\"vercel.project_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"gdufoJxB6b9b1fEqr1jUtFkyavUU\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.project_name\":{brief:\"Name of the Vercel project\",type:\"string\",keys:[\"vercel.project_name\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"my-app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.cache_id\":{brief:\"Original request ID when request is served from cache\",type:\"string\",keys:[\"vercel.proxy.cache_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"pdx1::v8g4b-1744143786684-93dafbc0f70d\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.client_ip\":{brief:\"Client IP address\",type:\"string\",keys:[\"vercel.proxy.client_ip\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"120.75.16.101\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.host\":{brief:\"Hostname of the request\",type:\"string\",keys:[\"vercel.proxy.host\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"test.vercel.app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.lambda_region\":{brief:\"Region where lambda function executed\",type:\"string\",keys:[\"vercel.proxy.lambda_region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.method\":{brief:\"HTTP method of the request\",type:\"string\",keys:[\"vercel.proxy.method\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"GET\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path\":{brief:\"Request path with query parameters\",type:\"string\",keys:[\"vercel.proxy.path\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"/dynamic/some-value.json?route=some-value\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path_type\":{brief:\"How the request was served based on its path and project configuration\",type:\"string\",keys:[\"vercel.proxy.path_type\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"func\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.path_type_variant\":{brief:\"Variant of the path type\",type:\"string\",keys:[\"vercel.proxy.path_type_variant\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"api\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.referer\":{brief:\"Referer of the request\",type:\"string\",keys:[\"vercel.proxy.referer\"],applyScrubbing:{key:\"auto\"},isInOtel:!1,visibility:\"public\",example:\"*.vercel.app\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.region\":{brief:\"Region where the request is processed\",type:\"string\",keys:[\"vercel.proxy.region\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.response_byte_size\":{brief:\"Size of the response in bytes\",type:\"integer\",keys:[\"vercel.proxy.response_byte_size\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1024,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.scheme\":{brief:\"Protocol of the request\",type:\"string\",keys:[\"vercel.proxy.scheme\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"https\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.status_code\":{brief:\"HTTP status code of the proxy request\",type:\"integer\",keys:[\"vercel.proxy.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.timestamp\":{brief:\"Unix timestamp when the proxy request was made\",type:\"integer\",keys:[\"vercel.proxy.timestamp\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:1573817250172,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.user_agent\":{brief:\"User agent strings of the request\",type:\"string[]\",keys:[\"vercel.proxy.user_agent\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:[\"Mozilla/5.0...\"],changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.vercel_cache\":{brief:\"Cache status sent to the browser\",type:\"string\",keys:[\"vercel.proxy.vercel_cache\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"REVALIDATED\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.vercel_id\":{brief:\"Vercel-specific identifier\",type:\"string\",keys:[\"vercel.proxy.vercel_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"sfo1::abc123\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.waf_action\":{brief:\"Action taken by firewall rules\",type:\"string\",keys:[\"vercel.proxy.waf_action\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"deny\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.proxy.waf_rule_id\":{brief:\"ID of the firewall rule that matched\",type:\"string\",keys:[\"vercel.proxy.waf_rule_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"rule_gAHz8jtSB1Gy\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.request_id\":{brief:\"Identifier of the Vercel request\",type:\"string\",keys:[\"vercel.request_id\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"643af4e3-975a-4cc7-9e7a-1eda11539d90\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.source\":{brief:\"Origin of the Vercel log (build, edge, lambda, static, external, or firewall)\",type:\"string\",keys:[\"vercel.source\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:\"build\",changelog:[{version:\"0.2.0\",prs:[163]}]},\"vercel.status_code\":{brief:\"HTTP status code of the request (-1 means no response returned and the lambda crashed)\",type:\"integer\",keys:[\"vercel.status_code\"],applyScrubbing:{key:\"manual\"},isInOtel:!1,visibility:\"public\",example:200,changelog:[{version:\"0.4.0\",prs:[228]},{version:\"0.2.0\",prs:[163]}]}};export{e as ADDRESS,t as AI_CITATIONS,i as AI_COMPLETION_TOKENS_USED,a as AI_DOCUMENTS,s as AI_FINISH_REASON,r as AI_FREQUENCY_PENALTY,n as AI_FUNCTION_CALL,o as AI_GENERATION_ID,l as AI_INPUT_MESSAGES,p as AI_IS_SEARCH_REQUIRED,c as AI_METADATA,u as AI_MODEL_ID,m as AI_MODEL_PROVIDER,g as AI_PIPELINE_NAME,b as AI_PREAMBLE,y as AI_PRESENCE_PENALTY,_ as AI_PROMPT,h as AI_PROMPT_MESSAGES,f as AI_PROMPT_TOKENS_USED,v as AI_PROMPT_TOOLS,k as AI_RAW_PROMPTING,T as AI_RESPONSES,S as AI_RESPONSE_FORMAT,E as AI_RESPONSE_ID,O as AI_RESPONSE_MODEL,I as AI_RESPONSE_OBJECT,A as AI_RESPONSE_TEXT,w as AI_RESPONSE_TIMESTAMP,x as AI_RESPONSE_TOOLCALLS,R as AI_SCHEMA,N as AI_SEARCH_QUERIES,C as AI_SEARCH_RESULTS,P as AI_SEED,D as AI_STREAMING,L as AI_TAGS,q as AI_TEMPERATURE,M as AI_TEXTS,U as AI_TOOLCALL_ARGS,G as AI_TOOLCALL_RESULT,z as AI_TOOLS,Y as AI_TOOL_CALLS,V as AI_TOP_K,F as AI_TOP_P,K as AI_TOTAL_COST,B as AI_TOTAL_TOKENS_USED,W as AI_USAGE_TOKENS,H as AI_VALUES,j as AI_WARNINGS,Q as ANGULAR_VERSION,J as ANTHROPIC_TOOL_RESULT_CONTENT,X as APP_APP_BUILD,Z as APP_APP_IDENTIFIER,$ as APP_APP_NAME,ee as APP_APP_START_TIME,te as APP_APP_VERSION,ie as APP_BUILD,ae as APP_IDENTIFIER,se as APP_IN_FOREGROUND,re as APP_NAME,ne as APP_START_COLD,oe as APP_START_TIME,le as APP_START_TYPE,pe as APP_START_WARM,ce as APP_VERSION,ue as APP_VITALS_FRAMES_DELAY_VALUE,de as APP_VITALS_FRAMES_FROZEN_COUNT,me as APP_VITALS_FRAMES_FROZEN_RATE,ge as APP_VITALS_FRAMES_SLOW_COUNT,be as APP_VITALS_FRAMES_SLOW_RATE,ye as APP_VITALS_FRAMES_TOTAL_COUNT,_e as APP_VITALS_STALL_DURATION,he as APP_VITALS_STALL_PERCENTAGE,fe as APP_VITALS_START_COLD_VALUE,ve as APP_VITALS_START_PREWARMED,ke as APP_VITALS_START_REASON,Te as APP_VITALS_START_SCREEN,Se as APP_VITALS_START_TYPE,Ee as APP_VITALS_START_WARM_VALUE,Oe as APP_VITALS_TTFD_VALUE,Ie as APP_VITALS_TTID_VALUE,Ae as ART_GC_BLOCKING_COUNT,we as ART_GC_BLOCKING_TIME,xe as ART_GC_PRE_OOME_COUNT,Re as ART_GC_TOTAL_COUNT,Ne as ART_GC_TOTAL_TIME,Ce as ART_GC_WAITING_TIME,Pe as ART_MEMORY_FREE,De as ART_MEMORY_FREE_UNTIL_GC,Le as ART_MEMORY_FREE_UNTIL_OOME,qe as ART_MEMORY_MAX,Me as ART_MEMORY_TOTAL,cy as ATTRIBUTE_METADATA,py as ATTRIBUTE_TYPE,Ue as AWS_CLOUDWATCH_LOGS_LOG_GROUP,Ge as AWS_CLOUDWATCH_LOGS_LOG_STREAM,ze as AWS_CLOUDWATCH_LOGS_URL,Ye as AWS_DYNAMODB_ATTRIBUTES_TO_GET,Ve as AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS,Fe as AWS_DYNAMODB_CONSISTENT_READ,Ke as AWS_DYNAMODB_CONSUMED_CAPACITY,Be as AWS_DYNAMODB_COUNT,We as AWS_DYNAMODB_EXCLUSIVE_START_TABLE,He as AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES,je as AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES,Qe as AWS_DYNAMODB_INDEX_NAME,Je as AWS_DYNAMODB_ITEM_COLLECTION_METRICS,Xe as AWS_DYNAMODB_LIMIT,Ze as AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES,$e as AWS_DYNAMODB_PROJECTION,et as AWS_DYNAMODB_PROVISIONED_READ_CAPACITY,tt as AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY,it as AWS_DYNAMODB_SCANNED_COUNT,at as AWS_DYNAMODB_SCAN_FORWARD,st as AWS_DYNAMODB_SEGMENT,rt as AWS_DYNAMODB_SELECT,nt as AWS_DYNAMODB_TABLE_COUNT,ot as AWS_DYNAMODB_TABLE_NAMES,lt as AWS_DYNAMODB_TOTAL_SEGMENTS,pt as AWS_EXTENDED_REQUEST_ID,ct as AWS_KINESIS_STREAM_NAME,dt as AWS_LAMBDA_AWS_REQUEST_ID,mt as AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS,gt as AWS_LAMBDA_FUNCTION_NAME,bt as AWS_LAMBDA_FUNCTION_VERSION,yt as AWS_LAMBDA_INVOKED_ARN,_t as AWS_LAMBDA_INVOKED_FUNCTION_ARN,ht as AWS_LAMBDA_REMAINING_TIME_IN_MILLIS,ft as AWS_LOG_GROUP_NAMES,vt as AWS_LOG_STREAM_NAMES,kt as AWS_OPERATION_NAME,Tt as AWS_REGION,St as AWS_REQUEST_EXTENDED_ID,Et as AWS_REQUEST_ID,It as AWS_REQUEST_URL,At as AWS_S3_BUCKET,wt as AWS_S3_COPY_SOURCE,xt as AWS_S3_DELETE,Rt as AWS_S3_KEY,Nt as AWS_S3_PART_NUMBER,Ct as AWS_S3_UPLOAD_ID,Pt as AWS_SECRETSMANAGER_SECRET_ARN,Dt as AWS_SNS_TOPIC_ARN,Lt as AWS_SQS_QUEUE_URL,qt as AWS_STEP_FUNCTIONS_ACTIVITY_ARN,Mt as AWS_STEP_FUNCTIONS_EXECUTION_ARN,Ut as AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN,Gt as BLOCKED_MAIN_THREAD,zt as BROWSER_BFCACHE_FRAME,Yt as BROWSER_BFCACHE_NOT_RESTORED_REASON_COUNT,Vt as BROWSER_BFCACHE_OUTCOME,Ft as BROWSER_BFCACHE_REASON,Kt as BROWSER_NAME,Bt as BROWSER_NAVIGATION_ID,Wt as BROWSER_NAVIGATION_TYPE,Ht as BROWSER_PAINT_TYPE,jt as BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START,Qt as BROWSER_PERFORMANCE_TIME_ORIGIN,Jt as BROWSER_REPORT_TYPE,Xt as BROWSER_SCRIPT_INVOKER,Zt as BROWSER_SCRIPT_INVOKER_TYPE,$t as BROWSER_SCRIPT_SOURCE_CHAR_POSITION,ei as BROWSER_VERSION,ti as BROWSER_WEB_VITAL_CLS_REPORT_EVENT,ii as BROWSER_WEB_VITAL_CLS_SOURCE_KEY,ai as BROWSER_WEB_VITAL_CLS_SOURCE_KEY_BASE,si as BROWSER_WEB_VITAL_CLS_VALUE,ri as BROWSER_WEB_VITAL_FCP_VALUE,ni as BROWSER_WEB_VITAL_FP_VALUE,oi as BROWSER_WEB_VITAL_INP_INTERACTION_TYPE,li as BROWSER_WEB_VITAL_INP_TARGET,pi as BROWSER_WEB_VITAL_INP_VALUE,ci as BROWSER_WEB_VITAL_LCP_ELEMENT,ui as BROWSER_WEB_VITAL_LCP_ID,di as BROWSER_WEB_VITAL_LCP_LOAD_TIME,mi as BROWSER_WEB_VITAL_LCP_RENDER_TIME,gi as BROWSER_WEB_VITAL_LCP_REPORT_EVENT,bi as BROWSER_WEB_VITAL_LCP_SIZE,yi as BROWSER_WEB_VITAL_LCP_URL,_i as BROWSER_WEB_VITAL_LCP_VALUE,hi as BROWSER_WEB_VITAL_TTFB_REQUEST_TIME,fi as BROWSER_WEB_VITAL_TTFB_VALUE,vi as CACHE_HIT,ki as CACHE_ITEM_AGE,Ti as CACHE_ITEM_SIZE,Si as CACHE_KEY,Ei as CACHE_OPERATION,Oi as CACHE_TAGS,Ii as CACHE_TTL,Ai as CACHE_WRITE,wi as CHANNEL,xi as CLIENT_ADDRESS,Ri as CLIENT_PORT,Ni as CLOUDFLARE_D1_DURATION,Ci as CLOUDFLARE_D1_QUERY_TYPE,Pi as CLOUDFLARE_D1_ROWS_READ,Di as CLOUDFLARE_D1_ROWS_WRITTEN,Li as CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS,qi as CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ,Mi as CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN,Ui as CLOUDFLARE_R2_BUCKET,Gi as CLOUDFLARE_R2_OPERATION,zi as CLOUDFLARE_R2_REQUEST_DELIMITER,Yi as CLOUDFLARE_R2_REQUEST_KEY,Vi as CLOUDFLARE_R2_REQUEST_PART_NUMBER,Fi as CLOUDFLARE_R2_REQUEST_PREFIX,Ki as CLOUDFLARE_WORKFLOW_ATTEMPT,Bi as CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF,Wi as CLOUDFLARE_WORKFLOW_RETRIES_DELAY,Hi as CLOUDFLARE_WORKFLOW_RETRIES_LIMIT,ji as CLOUDFLARE_WORKFLOW_TIMEOUT,Qi as CLOUD_ACCOUNT_ID,Ji as CLOUD_AVAILABILITY_ZONE,Xi as CLOUD_PLATFORM,Zi as CLOUD_PROVIDER,$i as CLOUD_REGION,ea as CLOUD_RESOURCE_ID,ta as CLS,ia as CLS_SOURCE_KEY,aa as CLS_SOURCE_KEY_BASE,sa as CODE,ra as CODE_FILEPATH,na as CODE_FILE_PATH,oa as CODE_FUNCTION,la as CODE_FUNCTION_NAME,pa as CODE_LINENO,ca as CODE_LINE_NUMBER,ua as CODE_NAMESPACE,da as CONNECTIONTYPE,ma as CONNECTION_RTT,ga as CULTURE_CALENDAR,ba as CULTURE_DISPLAY_NAME,ya as CULTURE_IS_24_HOUR_FORMAT,_a as CULTURE_LOCALE,ha as CULTURE_TIMEZONE,fa as DB_COLLECTION_NAME,va as DB_CONNECTION_STRING,ka as DB_DRIVER_NAME,Ta as DB_MONGODB_COLLECTION,Sa as DB_NAME,Ea as DB_NAMESPACE,Oa as DB_OPERATION,Ia as DB_OPERATION_BATCH_SIZE,Aa as DB_OPERATION_NAME,wa as DB_PARAMS,xa as DB_QUERY_PARAMETER_KEY,Ra as DB_QUERY_PARAMETER_KEY_BASE,Na as DB_QUERY_SUMMARY,Ca as DB_QUERY_TEXT,Pa as DB_REDIS_CONNECTION,Da as DB_REDIS_KEY,La as DB_REDIS_PARAMETERS,qa as DB_RESPONSE_STATUS_CODE,Ma as DB_SQL_BINDINGS,Ua as DB_STATEMENT,Ga as DB_STORED_PROCEDURE_NAME,za as DB_SYSTEM,Ya as DB_SYSTEM_NAME,Va as DB_USER,Fa as DEVICEMEMORY,Ka as DEVICE_ARCHS,Ba as DEVICE_BATTERY_LEVEL,Wa as DEVICE_BATTERY_TEMPERATURE,Ha as DEVICE_BOOT_TIME,ja as DEVICE_BRAND,Qa as DEVICE_CHARGING,Ja as DEVICE_CHIPSET,Xa as DEVICE_CLASS,Za as DEVICE_CONNECTION_TYPE,$a as DEVICE_CPU_DESCRIPTION,es as DEVICE_EXTERNAL_FREE_STORAGE,ts as DEVICE_EXTERNAL_STORAGE_SIZE,is as DEVICE_FAMILY,as as DEVICE_FREE_MEMORY,ss as DEVICE_FREE_STORAGE,rs as DEVICE_ID,ns as DEVICE_LOCALE,os as DEVICE_LOW_MEMORY,ls as DEVICE_LOW_POWER_MODE,ps as DEVICE_MANUFACTURER,cs as DEVICE_MEMORY_ESTIMATED_CAPACITY,us as DEVICE_MEMORY_SIZE,ds as DEVICE_MODEL,ms as DEVICE_MODEL_ID,gs as DEVICE_NAME,bs as DEVICE_ONLINE,ys as DEVICE_ORIENTATION,_s as DEVICE_PROCESSOR_COUNT,hs as DEVICE_PROCESSOR_FREQUENCY,fs as DEVICE_SCREEN_DENSITY,vs as DEVICE_SCREEN_DPI,ks as DEVICE_SCREEN_HEIGHT_PIXELS,Ts as DEVICE_SCREEN_WIDTH_PIXELS,Ss as DEVICE_SIMULATOR,Es as DEVICE_STORAGE_SIZE,Os as DEVICE_THERMAL_STATE,Is as DEVICE_TIMEZONE,As as DEVICE_USABLE_MEMORY,ws as DIST,xs as DJANGO_FUNCTION_NAME,Rs as DJANGO_MIDDLEWARE_NAME,Ns as EFFECTIVECONNECTIONTYPE,Cs as ENVIRONMENT,Ps as ERROR_TYPE,Ds as EVENT_ID,Ls as EVENT_NAME,qs as EXCEPTION_ESCAPED,Ms as EXCEPTION_MESSAGE,Us as EXCEPTION_STACKTRACE,Gs as EXCEPTION_TYPE,zs as FAAS_COLDSTART,Ys as FAAS_CRON,Vs as FAAS_DURATION_IN_MS,Fs as FAAS_ENTRY_POINT,Ks as FAAS_EXECUTION,Bs as FAAS_ID,Ws as FAAS_IDENTITY,Hs as FAAS_INVOCATION_ID,js as FAAS_INVOKED_NAME,Qs as FAAS_INVOKED_PROVIDER,Js as FAAS_INVOKED_REGION,Xs as FAAS_NAME,Zs as FAAS_TIME,$s as FAAS_TRIGGER,er as FAAS_VERSION,tr as FCP,ir as FILE_PATH,ar as FILE_SIZE,sr as FLAG_EVALUATION_KEY,rr as FLAG_EVALUATION_KEY_BASE,nr as FP,or as FRAMES_DELAY,lr as FRAMES_FROZEN,pr as FRAMES_FROZEN_RATE,cr as FRAMES_SLOW,ur as FRAMES_SLOW_RATE,dr as FRAMES_TOTAL,mr as FS_ERROR,gr as GCP_FUNCTION_CONTEXT_EVENT_ID,br as GCP_FUNCTION_CONTEXT_EVENT_TYPE,yr as GCP_FUNCTION_CONTEXT_ID,_r as GCP_FUNCTION_CONTEXT_RESOURCE,hr as GCP_FUNCTION_CONTEXT_SOURCE,fr as GCP_FUNCTION_CONTEXT_SPECVERSION,vr as GCP_FUNCTION_CONTEXT_TIME,kr as GCP_FUNCTION_CONTEXT_TIMESTAMP,Tr as GCP_FUNCTION_CONTEXT_TYPE,Sr as GCP_PROJECT_ID,Er as GCP_REGION,Or as GEN_AI_AGENT_NAME,Ir as GEN_AI_CONTEXT_UTILIZATION,Ar as GEN_AI_CONTEXT_WINDOW_SIZE,wr as GEN_AI_CONVERSATION_ID,xr as GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS,Rr as GEN_AI_COST_CACHE_READ_INPUT_TOKENS,Nr as GEN_AI_COST_INPUT_TOKENS,Cr as GEN_AI_COST_OUTPUT_TOKENS,Pr as GEN_AI_COST_REASONING_OUTPUT_TOKENS,Dr as GEN_AI_COST_TOTAL_TOKENS,Lr as GEN_AI_EMBEDDINGS_INPUT,qr as GEN_AI_FUNCTION_ID,Mr as GEN_AI_INPUT_MESSAGES,Ur as GEN_AI_MEMORY_QUERY_TEXT,Gr as GEN_AI_MEMORY_RECORDS,zr as GEN_AI_MEMORY_RECORD_COUNT,Yr as GEN_AI_MEMORY_RECORD_ID,Vr as GEN_AI_MEMORY_STORE_ID,Fr as GEN_AI_OPERATION_NAME,Kr as GEN_AI_OPERATION_TYPE,Br as GEN_AI_OUTPUT_MESSAGES,Wr as GEN_AI_PIPELINE_NAME,Hr as GEN_AI_PROMPT,jr as GEN_AI_PROMPT_NAME,Qr as GEN_AI_PROMPT_VARIABLE_KEY,Jr as GEN_AI_PROMPT_VARIABLE_KEY_BASE,Xr as GEN_AI_PROVIDER_NAME,Zr as GEN_AI_REQUEST_AVAILABLE_TOOLS,$r as GEN_AI_REQUEST_FREQUENCY_PENALTY,en as GEN_AI_REQUEST_MAX_TOKENS,tn as GEN_AI_REQUEST_MESSAGES,an as GEN_AI_REQUEST_MODEL,sn as GEN_AI_REQUEST_PRESENCE_PENALTY,rn as GEN_AI_REQUEST_REASONING_LEVEL,nn as GEN_AI_REQUEST_SCHEMA,on as GEN_AI_REQUEST_SEED,ln as GEN_AI_REQUEST_STOP_SEQUENCES,pn as GEN_AI_REQUEST_TEMPERATURE,cn as GEN_AI_REQUEST_TOP_K,un as GEN_AI_REQUEST_TOP_P,dn as GEN_AI_RESPONSE_FINISH_REASON,mn as GEN_AI_RESPONSE_FINISH_REASONS,gn as GEN_AI_RESPONSE_ID,bn as GEN_AI_RESPONSE_MODEL,yn as GEN_AI_RESPONSE_OBJECT,_n as GEN_AI_RESPONSE_STREAMING,hn as GEN_AI_RESPONSE_TEXT,fn as GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK,vn as GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN,kn as GEN_AI_RESPONSE_TOKENS_PER_SECOND,Tn as GEN_AI_RESPONSE_TOOL_CALLS,Sn as GEN_AI_SYSTEM,En as GEN_AI_SYSTEM_INSTRUCTIONS,On as GEN_AI_SYSTEM_MESSAGE,In as GEN_AI_TOOL_CALL_ARGUMENTS,An as GEN_AI_TOOL_CALL_RESULT,wn as GEN_AI_TOOL_DEFINITIONS,xn as GEN_AI_TOOL_DESCRIPTION,Rn as GEN_AI_TOOL_INPUT,Nn as GEN_AI_TOOL_MESSAGE,Cn as GEN_AI_TOOL_NAME,Pn as GEN_AI_TOOL_OUTPUT,Dn as GEN_AI_TOOL_TYPE,Ln as GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,Mn as GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,Gn as GEN_AI_USAGE_COMPLETION_TOKENS,zn as GEN_AI_USAGE_INPUT_TOKENS,Yn as GEN_AI_USAGE_INPUT_TOKENS_CACHED,Vn as GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE,Fn as GEN_AI_USAGE_OUTPUT_TOKENS,Kn as GEN_AI_USAGE_OUTPUT_TOKENS_REASONING,Bn as GEN_AI_USAGE_PROMPT_TOKENS,Wn as GEN_AI_USAGE_REASONING_OUTPUT_TOKENS,Hn as GEN_AI_USAGE_TOTAL_TOKENS,jn as GRAPHQL_DOCUMENT,Qn as GRAPHQL_OPERATION_NAME,Jn as GRAPHQL_OPERATION_TYPE,Xn as GRAPHQL_PROCESSING_TYPE,Zn as GRAPHQL_SOURCE,$n as GRPC_ERROR_BAD_REQUEST_FIELD_VIOLATIONS,eo as GRPC_ERROR_DEBUG_INFO_DETAIL,to as GRPC_ERROR_DEBUG_INFO_STACK_ENTRIES,io as GRPC_ERROR_ERROR_INFO_DOMAIN,ao as GRPC_ERROR_ERROR_INFO_METADATA_KEY,so as GRPC_ERROR_ERROR_INFO_METADATA_KEY_BASE,ro as GRPC_ERROR_ERROR_INFO_REASON,no as GRPC_ERROR_PRECONDITION_FAILURE_VIOLATIONS,oo as GRPC_ERROR_QUOTA_FAILURE_VIOLATIONS,lo as GRPC_ERROR_RESOURCE_INFO_DESCRIPTION,po as GRPC_ERROR_RESOURCE_INFO_OWNER,co as GRPC_ERROR_RESOURCE_INFO_RESOURCE_NAME,uo as GRPC_ERROR_RESOURCE_INFO_RESOURCE_TYPE,mo as GRPC_ERROR_RETRY_INFO_RETRY_DELAY_MS,go as HARDWARECONCURRENCY,bo as HTTP_CLIENT_IP,yo as HTTP_DECODED_RESPONSE_CONTENT_LENGTH,_o as HTTP_FLAVOR,ho as HTTP_FRAGMENT,fo as HTTP_HOST,vo as HTTP_METHOD,ko as HTTP_QUERY,To as HTTP_REQUEST_BODY_DATA,So as HTTP_REQUEST_BODY_DECODED_SIZE,Eo as HTTP_REQUEST_BODY_SIZE,Oo as HTTP_REQUEST_CONNECTION_END,Io as HTTP_REQUEST_CONNECT_START,Ao as HTTP_REQUEST_CONTENT_LENGTH,wo as HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED,xo as HTTP_REQUEST_DOMAIN_LOOKUP_END,Ro as HTTP_REQUEST_DOMAIN_LOOKUP_START,No as HTTP_REQUEST_FETCH_START,Co as HTTP_REQUEST_HEADER_KEY,Po as HTTP_REQUEST_HEADER_KEY_BASE,Do as HTTP_REQUEST_METHOD,qo as HTTP_REQUEST_REDIRECT_END,Mo as HTTP_REQUEST_REDIRECT_START,Uo as HTTP_REQUEST_REQUEST_START,Go as HTTP_REQUEST_RESEND_COUNT,zo as HTTP_REQUEST_RESPONSE_END,Yo as HTTP_REQUEST_RESPONSE_START,Vo as HTTP_REQUEST_SAME_ORIGIN,Fo as HTTP_REQUEST_SECURE_CONNECTION_START,Ko as HTTP_REQUEST_TIME_TO_FIRST_BYTE,Bo as HTTP_REQUEST_WORKER_START,Wo as HTTP_RESPONSE_BODY_DECODED_SIZE,Ho as HTTP_RESPONSE_BODY_SIZE,jo as HTTP_RESPONSE_CONTENT_LENGTH,Qo as HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED,Jo as HTTP_RESPONSE_HEADER_CONTENT_LENGTH,Xo as HTTP_RESPONSE_HEADER_KEY,Zo as HTTP_RESPONSE_HEADER_KEY_BASE,$o as HTTP_RESPONSE_SIZE,el as HTTP_RESPONSE_STATUS_CODE,tl as HTTP_RESPONSE_STATUS_TEXT,il as HTTP_RESPONSE_TRANSFER_SIZE,al as HTTP_ROUTE,sl as HTTP_SCHEME,rl as HTTP_SERVER_NAME,nl as HTTP_SERVER_REQUEST_TIME_IN_QUEUE,ol as HTTP_STATUS_CODE,ll as HTTP_STATUS_TEXT,pl as HTTP_TARGET,cl as HTTP_URL,ul as HTTP_USER_AGENT,dl as ID,ml as INP,gl as INTEGRITY_BLOCKED_URL,bl as INTEGRITY_DESTINATION,yl as INTEGRITY_DOCUMENT_URL,_l as INTEGRITY_REPORT_ONLY,hl as JSONRPC_PROTOCOL_VERSION,fl as JSONRPC_REQUEST_ID,vl as JVM_GC_ACTION,kl as JVM_GC_NAME,Tl as JVM_MEMORY_POOL_NAME,Sl as JVM_MEMORY_TYPE,El as JVM_THREAD_DAEMON,Ol as JVM_THREAD_STATE,Il as KOA_NAME,Al as KOA_TYPE,wl as LANGCHAIN_CHAIN_NAME,xl as LCP,Rl as LCP_ELEMENT,Nl as LCP_ID,Cl as LCP_LOADTIME,Pl as LCP_RENDERTIME,Dl as LCP_SIZE,Ll as LCP_URL,ql as LITESTAR_MIDDLEWARE_NAME,Ml as LOGGER_NAME,Ul as MCP_AUTH_CLIENT_NAME,Gl as MCP_CANCELLED_REASON,zl as MCP_CANCELLED_REQUEST_ID,Yl as MCP_CLIENT_NAME,Vl as MCP_CLIENT_TITLE,Fl as MCP_CLIENT_VERSION,Kl as MCP_LIFECYCLE_PHASE,Bl as MCP_LOGGING_DATA_TYPE,Wl as MCP_LOGGING_LEVEL,Hl as MCP_LOGGING_LOGGER,jl as MCP_LOGGING_MESSAGE,Ql as MCP_METHOD_NAME,Jl as MCP_PROGRESS_CURRENT,Xl as MCP_PROGRESS_MESSAGE,Zl as MCP_PROGRESS_PERCENTAGE,$l as MCP_PROGRESS_TOKEN,ep as MCP_PROGRESS_TOTAL,tp as MCP_PROMPT_NAME,ip as MCP_PROMPT_RESULT_DESCRIPTION,ap as MCP_PROMPT_RESULT_KEY_CONTENT,sp as MCP_PROMPT_RESULT_KEY_ROLE,rp as MCP_PROMPT_RESULT_MESSAGE_CONTENT,np as MCP_PROMPT_RESULT_MESSAGE_COUNT,op as MCP_PROMPT_RESULT_MESSAGE_ROLE,lp as MCP_PROTOCOL_READY,pp as MCP_PROTOCOL_VERSION,cp as MCP_REQUEST_ARGUMENT_KEY,up as MCP_REQUEST_ARGUMENT_KEY_BASE,dp as MCP_REQUEST_ARGUMENT_NAME,mp as MCP_REQUEST_ARGUMENT_URI,gp as MCP_REQUEST_ID,bp as MCP_RESOURCE_PROTOCOL,yp as MCP_RESOURCE_URI,_p as MCP_SERVER_NAME,hp as MCP_SERVER_TITLE,fp as MCP_SERVER_VERSION,vp as MCP_SESSION_ID,kp as MCP_TOOL_NAME,Tp as MCP_TOOL_RESULT_CONTENT,Sp as MCP_TOOL_RESULT_CONTENT_COUNT,Ep as MCP_TOOL_RESULT_CONTENT_TYPE,Op as MCP_TOOL_RESULT_DATA_SIZE,Ip as MCP_TOOL_RESULT_IS_ERROR,Ap as MCP_TOOL_RESULT_KEY_CONTENT,wp as MCP_TOOL_RESULT_KEY_CONTENT_TYPE,xp as MCP_TOOL_RESULT_KEY_DATA_SIZE,Rp as MCP_TOOL_RESULT_KEY_MIME_TYPE,Np as MCP_TOOL_RESULT_KEY_NAME,Cp as MCP_TOOL_RESULT_KEY_RESOURCE_MIME_TYPE,Pp as MCP_TOOL_RESULT_KEY_RESOURCE_URI,Dp as MCP_TOOL_RESULT_KEY_URI,Lp as MCP_TOOL_RESULT_MIME_TYPE,qp as MCP_TOOL_RESULT_NAME,Mp as MCP_TOOL_RESULT_RESOURCE_MIME_TYPE,Up as MCP_TOOL_RESULT_RESOURCE_URI,Gp as MCP_TOOL_RESULT_URI,zp as MCP_TRANSPORT,Yp as MDC_KEY,Vp as MDC_KEY_BASE,Fp as MESSAGING_BATCH_MESSAGE_COUNT,Kp as MESSAGING_CONVERSATION_ID,Bp as MESSAGING_DESTINATION,Wp as MESSAGING_DESTINATION_CONNECTION,Hp as MESSAGING_DESTINATION_KIND,jp as MESSAGING_DESTINATION_NAME,Qp as MESSAGING_DESTINATION_PARTITION_ID,Jp as MESSAGING_KAFKA_MESSAGE_KEY,Xp as MESSAGING_KAFKA_MESSAGE_TOMBSTONE,Zp as MESSAGING_KAFKA_OFFSET,$p as MESSAGING_MESSAGE_BODY_SIZE,ec as MESSAGING_MESSAGE_CONVERSATION_ID,tc as MESSAGING_MESSAGE_ENVELOPE_SIZE,ic as MESSAGING_MESSAGE_ID,sc as MESSAGING_MESSAGE_RECEIVE_LATENCY,rc as MESSAGING_MESSAGE_RETRY_COUNT,nc as MESSAGING_OPERATION,oc as MESSAGING_OPERATION_NAME,lc as MESSAGING_OPERATION_TYPE,pc as MESSAGING_PROTOCOL,cc as MESSAGING_PROTOCOL_VERSION,uc as MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY,dc as MESSAGING_RABBITMQ_ROUTING_KEY,mc as MESSAGING_SYSTEM,gc as MESSAGING_URL,bc as METHOD,yc as MIDDLEWARE_NAME,_c as NAVIGATION_ORIGIN,hc as NAVIGATION_ROUTE_ID,fc as NAVIGATION_TYPE,vc as NEL_ELAPSED_TIME,kc as NEL_PHASE,Tc as NEL_REFERRER,Sc as NEL_SAMPLING_FRACTION,Ec as NEL_SAMPLING_FUNCTION,Oc as NEL_TYPE,Ic as NETWORK_CONNECTION_EFFECTIVE_TYPE,Ac as NETWORK_CONNECTION_RTT,wc as NETWORK_CONNECTION_TYPE,xc as NETWORK_LOCAL_ADDRESS,Rc as NETWORK_LOCAL_PORT,Nc as NETWORK_PEER_ADDRESS,Cc as NETWORK_PEER_PORT,Pc as NETWORK_PROTOCOL_NAME,Dc as NETWORK_PROTOCOL_VERSION,Lc as NETWORK_TRANSPORT,qc as NETWORK_TYPE,Mc as NET_HOST_IP,Uc as NET_HOST_NAME,Gc as NET_HOST_PORT,zc as NET_PEER_IP,Yc as NET_PEER_NAME,Vc as NET_PEER_PORT,Fc as NET_PROTOCOL_NAME,Kc as NET_PROTOCOL_VERSION,Bc as NET_SOCK_FAMILY,Wc as NET_SOCK_HOST_ADDR,Hc as NET_SOCK_HOST_PORT,jc as NET_SOCK_PEER_ADDR,Qc as NET_SOCK_PEER_NAME,Jc as NET_SOCK_PEER_PORT,Xc as NET_TRANSPORT,Zc as OS_BUILD,$c as OS_BUILD_ID,eu as OS_DESCRIPTION,tu as OS_KERNEL_VERSION,iu as OS_NAME,au as OS_RAW_DESCRIPTION,su as OS_ROOTED,ru as OS_THEME,nu as OS_TYPE,ou as OS_VERSION,lu as OTEL_KIND,pu as OTEL_SCOPE_NAME,cu as OTEL_SCOPE_VERSION,uu as OTEL_STATUS_CODE,du as OTEL_STATUS_DESCRIPTION,mu as PARAMS_KEY,gu as PARAMS_KEY_BASE,bu as PERFORMANCE_ACTIVATIONSTART,yu as PERFORMANCE_TIMEORIGIN,_u as PORT,hu as PREVIOUS_ROUTE,fu as PROCESS_COMMAND_ARGS,vu as PROCESS_EXECUTABLE_NAME,ku as PROCESS_PID,Tu as PROCESS_RUNTIME_DESCRIPTION,Su as PROCESS_RUNTIME_ENGINE_NAME,Eu as PROCESS_RUNTIME_ENGINE_VERSION,Ou as PROCESS_RUNTIME_NAME,Iu as PROCESS_RUNTIME_VERSION,Au as PROFILE_ID,wu as QUERY,xu as QUERY_KEY,Ru as QUERY_KEY_BASE,Nu as REACT_NATIVE_ARCHITECTURE,Cu as REACT_NATIVE_MODULE_CALL_COUNT,Pu as REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT,Du as REACT_NATIVE_MODULE_DURATION_MAX,Lu as REACT_NATIVE_MODULE_DURATION_TOTAL,qu as REACT_NATIVE_MODULE_ERROR_COUNT,Mu as REACT_NATIVE_MODULE_KIND,Uu as REACT_NATIVE_MODULE_METHOD,Gu as REACT_NATIVE_MODULE_NAME,zu as REACT_NATIVE_MODULE_TOP_DURATION,Yu as REACT_NATIVE_MODULE_TOP_NAME,Vu as REACT_VERSION,Fu as REDIS_COMMAND,Ku as REDIS_KEY,Bu as RELEASE,Wu as REMIX_ACTION_FORM_DATA_KEY,Hu as REMIX_ACTION_FORM_DATA_KEY_BASE,ju as REPLAYID,Qu as REPLAY_ID,Ju as RESOURCE_DEPLOYMENT_ENVIRONMENT,Xu as RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME,Zu as RESOURCE_RENDER_BLOCKING_STATUS,$u as ROUTE,ed as ROUTER_NAVIGATION_ORIGIN,td as ROUTER_NAVIGATION_ROUTE_ID,id as ROUTER_NAVIGATION_TYPE,ad as RPC_GRPC_STATUS_CODE,sd as RPC_METHOD,rd as RPC_RESPONSE_STATUS_CODE,nd as RPC_SERVICE,od as RPC_SYSTEM,ld as RPC_SYSTEM_NAME,pd as RUNTIME_BUILD,cd as RUNTIME_NAME,ud as RUNTIME_RAW_DESCRIPTION,dd as RUNTIME_VERSION,md as SCORE_KEY,gd as SCORE_KEY_BASE,bd as SCORE_RATIO_KEY,yd as SCORE_RATIO_KEY_BASE,_d as SCORE_TOTAL,hd as SCORE_WEIGHT_KEY,fd as SCORE_WEIGHT_KEY_BASE,vd as SENTRY_ACTION,kd as SENTRY_BROWSER_NAME,Td as SENTRY_BROWSER_VERSION,Sd as SENTRY_CANCELLATION_REASON,Ed as SENTRY_CATEGORY,Od as SENTRY_CLIENT_SAMPLE_RATE,Id as SENTRY_DESCRIPTION,Ad as SENTRY_DIST,wd as SENTRY_DOMAIN,xd as SENTRY_DSC_ENVIRONMENT,Rd as SENTRY_DSC_PROJECT_ID,Nd as SENTRY_DSC_PUBLIC_KEY,Cd as SENTRY_DSC_RELEASE,Pd as SENTRY_DSC_SAMPLED,Dd as SENTRY_DSC_SAMPLE_RATE,Ld as SENTRY_DSC_TRACE_ID,qd as SENTRY_DSC_TRANSACTION,Md as SENTRY_ENVIRONMENT,Ud as SENTRY_EVENT_SERIALIZED_BREADCRUMBS,Gd as SENTRY_EVENT_SERIALIZED_CONTEXTS,zd as SENTRY_EVENT_SERIALIZED_EXTRA,Yd as SENTRY_EVENT_SERIALIZED_META,Vd as SENTRY_EXCLUSIVE_TIME,Fd as SENTRY_FRAMES_FROZEN,Kd as SENTRY_FRAMES_SLOW,Bd as SENTRY_FRAMES_TOTAL,Wd as SENTRY_GRAPHQL_OPERATION,Hd as SENTRY_GROUP,jd as SENTRY_HTTP_PREFETCH,Qd as SENTRY_IDLE_SPAN_FINISH_REASON,Jd as SENTRY_IS_LOCALHOST,Xd as SENTRY_IS_REMOTE,Zd as SENTRY_KIND,$d as SENTRY_LINK_TYPE,em as SENTRY_MAIN_THREAD,tm as SENTRY_MESSAGE_PARAMETER_KEY,im as SENTRY_MESSAGE_TEMPLATE,am as SENTRY_METRIC_SOURCE,sm as SENTRY_MOBILE,rm as SENTRY_MODULE_KEY,nm as SENTRY_MODULE_KEY_BASE,om as SENTRY_NEXTJS_SSR_FUNCTION_ROUTE,lm as SENTRY_NEXTJS_SSR_FUNCTION_TYPE,pm as SENTRY_NORMALIZED_DB_QUERY,cm as SENTRY_NORMALIZED_DB_QUERY_HASH,um as SENTRY_NORMALIZED_DESCRIPTION,dm as SENTRY_OBSERVED_TIMESTAMP_NANOS,mm as SENTRY_OP,gm as SENTRY_ORIGIN,bm as SENTRY_PAGELOAD_SPAN_ID,ym as SENTRY_PLATFORM,_m as SENTRY_PROFILER_ID,hm as SENTRY_PROFILE_ID,fm as SENTRY_RELAY_INGRESS,vm as SENTRY_RELAY_PIPELINE,km as SENTRY_RELEASE,Tm as SENTRY_REPLAY_ID,Sm as SENTRY_REPLAY_IS_BUFFERING,Em as SENTRY_REPORT_EVENT,Om as SENTRY_SDK_INTEGRATIONS,Im as SENTRY_SDK_NAME,Am as SENTRY_SDK_VERSION,wm as SENTRY_SEGMENT_ID,Rm as SENTRY_SEGMENT_NAME,Nm as SENTRY_SEGMENT_NAME_SOURCE,Cm as SENTRY_SERVER_SAMPLE_RATE,Pm as SENTRY_SOURCE,Dm as SENTRY_SPAN_SOURCE,Lm as SENTRY_STATUS,qm as SENTRY_STATUS_CODE,Mm as SENTRY_STATUS_MESSAGE,Um as SENTRY_SVELTEKIT_NAVIGATION_FROM,Gm as SENTRY_SVELTEKIT_NAVIGATION_TO,zm as SENTRY_SVELTEKIT_NAVIGATION_TYPE,Ym as SENTRY_THREAD_ID,Vm as SENTRY_TIMESTAMP_SEQUENCE,Fm as SENTRY_TRACE_LIFECYCLE,Km as SENTRY_TRACE_PARENT_SPAN_ID,Bm as SENTRY_TRACE_STATUS,Wm as SENTRY_TRANSACTION,Hm as SENTRY_USER_EMAIL,jm as SENTRY_USER_GEO_CITY,Qm as SENTRY_USER_GEO_COUNTRY_CODE,Jm as SENTRY_USER_GEO_REGION,Xm as SENTRY_USER_GEO_SUBDIVISION,Zm as SENTRY_USER_ID,$m as SENTRY_USER_IP,eg as SENTRY_USER_USERNAME,tg as SERVER_ADDRESS,ig as SERVER_NAME,ag as SERVER_PORT,sg as SERVICE_NAME,rg as SERVICE_VERSION,ng as SESSION_ID,og as STALL_PERCENTAGE,lg as STALL_TOTAL_TIME,pg as STARLETTE_MIDDLEWARE_NAME,cg as STARLITE_MIDDLEWARE_NAME,ug as STATE_TYPE,dg as SUBPROCESS_PID,mg as SVELTEKIT_LOAD_ENVIRONMENT,gg as SVELTEKIT_LOAD_NODE_ID,bg as SVELTEKIT_LOAD_NODE_TYPE,yg as SVELTEKIT_TRACING_ORIGINAL_NAME,_g as THREAD_ID,hg as THREAD_NAME,fg as TIMBER_TAG,vg as TIME_TO_FULL_DISPLAY,kg as TIME_TO_INITIAL_DISPLAY,Tg as TRANSACTION,Sg as TRPC_PROCEDURE_PATH,Eg as TRPC_PROCEDURE_TYPE,Og as TTFB,Ig as TTFB_REQUESTTIME,Ag as TURBO_MODULES_TOTAL_CALL_COUNT,wg as TURBO_MODULES_TOTAL_DURATION_MS,xg as TURBO_MODULES_TOTAL_ERROR_COUNT,Rg as TURBO_MODULES_UNIQUE_METHODS,Ng as TURBO_MODULE_ARCH,Cg as TURBO_MODULE_METHOD,Pg as TURBO_MODULE_NAME,Dg as TURBO_MODULE_TOP_MODULE,Lg as TURBO_MODULE_TOP_MODULE_DURATION_MS,qg as TURBO_MODULE_TOTAL_CALL_COUNT,Mg as TURBO_MODULE_TOTAL_DURATION_MS,Ug as TURBO_MODULE_TOTAL_ERROR_COUNT,Gg as TURBO_MODULE_UNIQUE_METHODS,zg as TYPE,Yg as UI_COMPONENT_NAME,Vg as UI_CONTRIBUTES_TO_TTFD,Fg as UI_CONTRIBUTES_TO_TTID,Kg as UI_ELEMENT_HEIGHT,Bg as UI_ELEMENT_ID,Wg as UI_ELEMENT_IDENTIFIER,Hg as UI_ELEMENT_LOAD_TIME,jg as UI_ELEMENT_PAINT_TYPE,Qg as UI_ELEMENT_RENDER_TIME,Jg as UI_ELEMENT_TYPE,Xg as UI_ELEMENT_URL,Zg as UI_ELEMENT_WIDTH,$g as URL,eb as URL_DOMAIN,tb as URL_FRAGMENT,ib as URL_FULL,ab as URL_PATH,sb as URL_PATH_PARAMETER_KEY,rb as URL_PATH_PARAMETER_KEY_BASE,nb as URL_PATH_PARAMS_KEY,ob as URL_PATH_PARAMS_KEY_BASE,lb as URL_PORT,pb as URL_QUERY,cb as URL_SAME_ORIGIN,ub as URL_SCHEME,db as URL_TEMPLATE,mb as USER_AGENT_ORIGINAL,gb as USER_EMAIL,bb as USER_FULL_NAME,yb as USER_GEO_CITY,_b as USER_GEO_COUNTRY_CODE,hb as USER_GEO_REGION,fb as USER_GEO_SUBDIVISION,vb as USER_HASH,kb as USER_ID,Tb as USER_IP_ADDRESS,Sb as USER_NAME,Eb as USER_ROLES,Ob as VERCEL_AI_TELEMETRY_METADATA_KEY,Ib as VERCEL_AI_TELEMETRY_METADATA_KEY_BASE,Ab as VERCEL_BRANCH,wb as VERCEL_BUILD_ID,xb as VERCEL_DEPLOYMENT_ID,Rb as VERCEL_DESTINATION,Nb as VERCEL_EDGE_TYPE,Cb as VERCEL_ENTRYPOINT,Pb as VERCEL_EXECUTION_REGION,Db as VERCEL_ID,Lb as VERCEL_JA3_DIGEST,qb as VERCEL_JA4_DIGEST,Mb as VERCEL_LOG_TYPE,Ub as VERCEL_PATH,Gb as VERCEL_PROJECT_ID,zb as VERCEL_PROJECT_NAME,Yb as VERCEL_PROXY_CACHE_ID,Vb as VERCEL_PROXY_CLIENT_IP,Fb as VERCEL_PROXY_HOST,Kb as VERCEL_PROXY_LAMBDA_REGION,Bb as VERCEL_PROXY_METHOD,Wb as VERCEL_PROXY_PATH,Hb as VERCEL_PROXY_PATH_TYPE,jb as VERCEL_PROXY_PATH_TYPE_VARIANT,Qb as VERCEL_PROXY_REFERER,Jb as VERCEL_PROXY_REGION,Xb as VERCEL_PROXY_RESPONSE_BYTE_SIZE,Zb as VERCEL_PROXY_SCHEME,$b as VERCEL_PROXY_STATUS_CODE,ey as VERCEL_PROXY_TIMESTAMP,ty as VERCEL_PROXY_USER_AGENT,iy as VERCEL_PROXY_VERCEL_CACHE,ay as VERCEL_PROXY_VERCEL_ID,sy as VERCEL_PROXY_WAF_ACTION,ry as VERCEL_PROXY_WAF_RULE_ID,ny as VERCEL_REQUEST_ID,oy as VERCEL_SOURCE,ly as VERCEL_STATUS_CODE,d as _AI_MODEL_ID,ut as _AWS_KINESIS_STREAM_NAME,Ot as _AWS_REQUEST_ID,qn as _GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,Un as _GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,Lo as _HTTP_REQUEST_METHOD,ac as _MESSAGING_MESSAGE_ID,xm as _SENTRY_SEGMENT_ID};\n//# sourceMappingURL=attributes.mjs.map\n","const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = \"sentry.sample_rate\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE = \"sentry.previous_trace_sample_rate\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = \"sentry.op\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = \"sentry.origin\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE = \"sentry.status.message\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = \"sentry.idle_span_finish_reason\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = \"sentry.measurement_unit\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = \"sentry.measurement_value\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_RELEASE = \"sentry.release\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT = \"sentry.environment\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME = \"sentry.segment.name\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID = \"sentry.segment.id\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME = \"sentry.sdk.name\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION = \"sentry.sdk.version\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS = \"sentry.sdk.integrations\";\nconst SEMANTIC_ATTRIBUTE_USER_ID = \"user.id\";\nconst SEMANTIC_ATTRIBUTE_USER_EMAIL = \"user.email\";\nconst SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS = \"user.ip_address\";\nconst SEMANTIC_ATTRIBUTE_USER_USERNAME = \"user.name\";\nconst SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = \"sentry.custom_span_name\";\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = \"sentry.profile_id\";\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = \"sentry.exclusive_time\";\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = \"cache.hit\";\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = \"cache.key\";\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = \"cache.item_size\";\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = \"http.request.method\";\nconst SEMANTIC_ATTRIBUTE_URL_FULL = \"url.full\";\nconst SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE = \"sentry.link.type\";\nconst GEN_AI_CONVERSATION_ID_ATTRIBUTE = \"gen_ai.conversation.id\";\n\nexport { GEN_AI_CONVERSATION_ID_ATTRIBUTE, SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_RELEASE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS, SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME, SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID, SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME, SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE, SEMANTIC_ATTRIBUTE_URL_FULL, SEMANTIC_ATTRIBUTE_USER_EMAIL, SEMANTIC_ATTRIBUTE_USER_ID, SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS, SEMANTIC_ATTRIBUTE_USER_USERNAME, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE };\n//# sourceMappingURL=semanticAttributes.js.map\n","const SPAN_STATUS_TYPES = [\n /** The operation completed successfully. */\n \"ok\",\n /** Deadline expired before operation could complete. */\n \"deadline_exceeded\",\n /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n \"unauthenticated\",\n /** 403 Forbidden */\n \"permission_denied\",\n /** 404 Not Found. Some requested entity (file or directory) was not found. */\n \"not_found\",\n /** 429 Too Many Requests */\n \"resource_exhausted\",\n /** Client specified an invalid argument. 4xx. */\n \"invalid_argument\",\n /** 501 Not Implemented */\n \"unimplemented\",\n /** 503 Service Unavailable */\n \"unavailable\",\n /** Other/generic 5xx. */\n \"internal_error\",\n /** Unknown. Any non-standard HTTP status code. */\n \"unknown_error\",\n /** The operation was cancelled (typically by the user). */\n \"cancelled\",\n /** Already exists (409) */\n \"already_exists\",\n /** Operation was rejected because the system is not in a state required for the operation's */\n \"failed_precondition\",\n /** The operation was aborted, typically due to a concurrency issue. */\n \"aborted\",\n /** Operation was attempted past the valid range. */\n \"out_of_range\",\n /** Unrecoverable data loss or corruption */\n \"data_loss\"\n];\n\nexport { SPAN_STATUS_TYPES };\n//# sourceMappingURL=spanStatus.js.map\n","import { SPAN_STATUS_TYPES } from '../types/spanStatus.js';\n\nconst SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\nfunction isStatusErrorMessageValid(message) {\n return message !== \"ok\" && SPAN_STATUS_TYPES.includes(message);\n}\nfunction getSpanStatusFromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: \"unauthenticated\" };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: \"permission_denied\" };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: \"not_found\" };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: \"already_exists\" };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: \"failed_precondition\" };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: \"resource_exhausted\" };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: \"cancelled\" };\n default:\n return { code: SPAN_STATUS_ERROR, message: \"invalid_argument\" };\n }\n }\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: \"unimplemented\" };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: \"unavailable\" };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: \"deadline_exceeded\" };\n default:\n return { code: SPAN_STATUS_ERROR, message: \"internal_error\" };\n }\n }\n return { code: SPAN_STATUS_ERROR, message: \"internal_error\" };\n}\nfunction setHttpStatus(span, httpStatus) {\n span.setAttribute(\"http.response.status_code\", httpStatus);\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== \"unknown_error\") {\n span.setStatus(spanStatus);\n }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, isStatusErrorMessageValid, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nfunction makeWeakRef(value) {\n try {\n const WeakRefImpl = GLOBAL_OBJ.WeakRef;\n if (typeof WeakRefImpl === \"function\") {\n return new WeakRefImpl(value);\n }\n } catch {\n }\n return value;\n}\nfunction derefWeakRef(ref) {\n if (!ref) {\n return void 0;\n }\n if (typeof ref === \"object\" && \"deref\" in ref && typeof ref.deref === \"function\") {\n try {\n return ref.deref();\n } catch {\n return void 0;\n }\n }\n return ref;\n}\n\nexport { derefWeakRef, makeWeakRef };\n//# sourceMappingURL=weakRef.js.map\n","import { addNonEnumerableProperty } from '../utils/object.js';\nimport { derefWeakRef, makeWeakRef } from '../utils/weakRef.js';\n\nconst SCOPE_ON_START_SPAN_FIELD = \"_sentryScope\";\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = \"_sentryIsolationScope\";\nconst TRACER_PROVIDER_SPAN_FIELD = /* @__PURE__ */ Symbol.for(\"sentry.tracerProviderSpan\");\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, makeWeakRef(isolationScope));\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\nfunction getCapturedScopesOnSpan(span) {\n const spanWithScopes = span;\n return {\n scope: spanWithScopes[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: derefWeakRef(spanWithScopes[ISOLATION_SCOPE_ON_START_SPAN_FIELD])\n };\n}\nfunction markSpanAsTracerProviderSpan(span) {\n addNonEnumerableProperty(span, TRACER_PROVIDER_SPAN_FIELD, true);\n}\nfunction spanIsTracerProviderSpan(span) {\n return span[TRACER_PROVIDER_SPAN_FIELD] === true;\n}\n\nexport { getCapturedScopesOnSpan, markSpanAsTracerProviderSpan, setCapturedScopesOnSpan, spanIsTracerProviderSpan };\n//# sourceMappingURL=utils.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isString } from './is.js';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = \"sentry-\";\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\nfunction baggageHeaderToDynamicSamplingContext(baggageHeader) {\n const baggageObject = parseBaggageHeader(baggageHeader);\n if (!baggageObject) {\n return void 0;\n }\n const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n if (key.startsWith(SENTRY_BAGGAGE_KEY_PREFIX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext;\n } else {\n return void 0;\n }\n}\nfunction dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext) {\n if (!dynamicSamplingContext) {\n return void 0;\n }\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {}\n );\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\nfunction parseBaggageHeader(baggageHeader) {\n if (!baggageHeader || !isString(baggageHeader) && !Array.isArray(baggageHeader)) {\n return void 0;\n }\n if (Array.isArray(baggageHeader)) {\n return baggageHeader.reduce((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n Object.entries(currBaggageObject).forEach(([key, value]) => {\n acc[key] = value;\n });\n return acc;\n }, {});\n }\n return baggageHeaderToObject(baggageHeader);\n}\nfunction baggageHeaderToObject(baggageHeader) {\n return baggageHeader.split(\",\").map((baggageEntry) => {\n const eqIdx = baggageEntry.indexOf(\"=\");\n if (eqIdx === -1) {\n return [];\n }\n const key = baggageEntry.slice(0, eqIdx);\n const value = baggageEntry.slice(eqIdx + 1);\n return [key, value].map((keyOrValue) => {\n try {\n return decodeURIComponent(keyOrValue.trim());\n } catch {\n return;\n }\n });\n }).reduce((acc, [key, value]) => {\n if (key && value) {\n acc[key] = value;\n }\n return acc;\n }, {});\n}\nfunction objectToBaggageHeader(object) {\n if (Object.keys(object).length === 0) {\n return void 0;\n }\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD && debug.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, \"\");\n}\nfunction mergeBaggageHeaders(existing, incoming) {\n if (!existing) {\n return incoming;\n }\n const existingEntries = parseBaggageHeader(existing);\n const incomingEntries = parseBaggageHeader(incoming);\n if (!incomingEntries) {\n return existing;\n }\n const merged = {};\n let hasNewSentryEntries = false;\n const newSentryEntries = {};\n const newNonSentryEntries = {};\n for (const [key, value] of Object.entries(incomingEntries)) {\n if (key.startsWith(SENTRY_BAGGAGE_KEY_PREFIX)) {\n newSentryEntries[key] = value;\n hasNewSentryEntries = true;\n } else {\n newNonSentryEntries[key] = value;\n }\n }\n if (existingEntries) {\n for (const [key, value] of Object.entries(existingEntries)) {\n if (!hasNewSentryEntries || !key.startsWith(SENTRY_BAGGAGE_KEY_PREFIX)) {\n merged[key] = value;\n }\n }\n }\n if (hasNewSentryEntries) {\n Object.assign(merged, newSentryEntries);\n }\n for (const [key, value] of Object.entries(newNonSentryEntries)) {\n merged[key] ?? (merged[key] = value);\n }\n return objectToBaggageHeader(merged);\n}\n\nexport { MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, mergeBaggageHeaders, objectToBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { consoleSandbox, debug } from './debug-logger.js';\n\nconst ORG_ID_REGEX = /^o(\\d+)\\./;\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)((?:\\[[:.%\\w]+\\]|[\\w.-]+))(?::(\\d+))?\\/(.+)/;\nfunction isValidProtocol(protocol) {\n return protocol === \"http\" || protocol === \"https\";\n}\nfunction dsnToString(dsn, withPassword = false) {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : \"\"}@${host}${port ? `:${port}` : \"\"}/${path ? `${path}/` : path}${projectId}`;\n}\nfunction dsnFromString(str) {\n const match = DSN_REGEX.exec(str);\n if (!match) {\n consoleSandbox(() => {\n console.error(`Invalid Sentry Dsn: ${str}`);\n });\n return void 0;\n }\n const [protocol, publicKey, pass = \"\", host = \"\", port = \"\", lastPath = \"\"] = match.slice(1);\n let path = \"\";\n let projectId = lastPath;\n const split = projectId.split(\"/\");\n if (split.length > 1) {\n path = split.slice(0, -1).join(\"/\");\n projectId = split.pop();\n }\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n return dsnFromComponents({ host, pass, path, projectId, port, protocol, publicKey });\n}\nfunction dsnFromComponents(components) {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || \"\",\n pass: components.pass || \"\",\n host: components.host,\n port: components.port || \"\",\n path: components.path || \"\",\n projectId: components.projectId\n };\n}\nfunction validateDsn(dsn) {\n if (!DEBUG_BUILD) {\n return true;\n }\n const { port, projectId, protocol } = dsn;\n const requiredComponents = [\"protocol\", \"publicKey\", \"host\", \"projectId\"];\n const hasMissingRequiredComponent = requiredComponents.find((component) => {\n if (!dsn[component]) {\n debug.error(`Invalid Sentry Dsn: ${component} missing`);\n return true;\n }\n return false;\n });\n if (hasMissingRequiredComponent) {\n return false;\n }\n if (!projectId.match(/^\\d+$/)) {\n debug.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n return false;\n }\n if (!isValidProtocol(protocol)) {\n debug.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n return false;\n }\n if (port && isNaN(parseInt(port, 10))) {\n debug.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n return false;\n }\n return true;\n}\nfunction extractOrgIdFromDsnHost(host) {\n const match = host.match(ORG_ID_REGEX);\n return match?.[1];\n}\nfunction extractOrgIdFromClient(client) {\n const options = client.getOptions();\n const { host } = client.getDsn() || {};\n let org_id;\n if (options.orgId) {\n org_id = String(options.orgId);\n } else if (host) {\n org_id = extractOrgIdFromDsnHost(host);\n }\n return org_id;\n}\nfunction makeDsn(from) {\n const components = typeof from === \"string\" ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return void 0;\n }\n return components;\n}\n\nexport { dsnFromString, dsnToString, extractOrgIdFromClient, extractOrgIdFromDsnHost, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","function parseSampleRate(sampleRate) {\n if (typeof sampleRate === \"boolean\") {\n return Number(sampleRate);\n }\n const rate = typeof sampleRate === \"string\" ? parseFloat(sampleRate) : sampleRate;\n if (typeof rate !== \"number\" || isNaN(rate) || rate < 0 || rate > 1) {\n return void 0;\n }\n return rate;\n}\n\nexport { parseSampleRate };\n//# sourceMappingURL=parseSampleRate.js.map\n","import { makeWeakRef, derefWeakRef } from './weakRef.js';\n\nconst SCOPE_SPAN_FIELD = \"span\";\nfunction _setSpanForScope(scope, span) {\n if (span) {\n scope.refs[SCOPE_SPAN_FIELD] = makeWeakRef(span);\n } else {\n delete scope.refs[SCOPE_SPAN_FIELD];\n }\n}\nfunction _getSpanForScope(scope) {\n return derefWeakRef(scope.refs[SCOPE_SPAN_FIELD]);\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { serializeAttributes } from '../attributes.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { SENTRY_SEGMENT_NAME_SOURCE, SENTRY_ORIGIN, SENTRY_OP, SENTRY_STATUS_MESSAGE } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK, isStatusErrorMessageValid } from '../tracing/spanstatus.js';\nimport { getCapturedScopesOnSpan } from '../tracing/utils.js';\nimport { addNonEnumerableProperty } from './object.js';\nimport { generateSpanId } from './propagationContext.js';\nimport { timestampInSeconds } from './time.js';\nimport { generateSentryTraceHeader, generateTraceparentHeader } from './tracing.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\nconst TRACE_FLAG_NONE = 0;\nconst TRACE_FLAG_SAMPLED = 1;\nfunction spanToTransactionTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin, links } = spanToStaticSpanJSON(span);\n return {\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n links\n };\n}\nfunction spanToTraceContext(span) {\n const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n const parent_span_id = isRemote ? spanId : spanToStaticSpanJSON(span).parent_span_id;\n const scope = getCapturedScopesOnSpan(span).scope;\n const span_id = isRemote ? scope?.getPropagationContext().propagationSpanId || generateSpanId() : spanId;\n return {\n parent_span_id,\n span_id,\n trace_id\n };\n}\nfunction spanToTraceHeader(span) {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\nfunction spanToTraceparentHeader(span) {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateTraceparentHeader(traceId, spanId, sampled);\n}\nfunction convertSpanLinksForEnvelope(links) {\n if (links && links.length > 0) {\n return links.map(({ context: { spanId, traceId, traceFlags, ...restContext }, attributes }) => ({\n span_id: spanId,\n trace_id: traceId,\n sampled: traceFlags === TRACE_FLAG_SAMPLED,\n attributes,\n ...restContext\n }));\n } else {\n return void 0;\n }\n}\nfunction getStreamedSpanLinks(links) {\n if (links?.length) {\n return links.map(({ context: { spanId, traceId, traceFlags }, attributes }) => ({\n span_id: spanId,\n trace_id: traceId,\n sampled: traceFlags === TRACE_FLAG_SAMPLED,\n attributes\n }));\n } else {\n return void 0;\n }\n}\nfunction spanTimeInputToSeconds(input) {\n if (typeof input === \"number\") {\n return ensureTimestampInSeconds(input);\n }\n if (Array.isArray(input)) {\n return input[0] + input[1] / 1e9;\n }\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n return timestampInSeconds();\n}\nfunction ensureTimestampInSeconds(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1e3 : timestamp;\n}\nfunction spanToStaticSpanJSON(span) {\n if (spanIsSentrySpan(span)) {\n return span.getStaticSpanJSON();\n }\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, status, links } = span;\n return {\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: getOtelParentSpanId(span),\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || void 0,\n status: getStatusMessage(status),\n op: attributes[SENTRY_OP],\n origin: attributes[SENTRY_ORIGIN],\n links: convertSpanLinksForEnvelope(links)\n };\n }\n return {\n span_id,\n trace_id,\n start_timestamp: 0,\n status: \"ok\",\n data: {}\n };\n}\nfunction spanToJSON(span) {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, status, links } = span;\n return {\n name,\n span_id,\n trace_id,\n parent_span_id: getOtelParentSpanId(span),\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n end_timestamp: spanTimeInputToSeconds(endTime) || void 0,\n is_segment: spanIsSegment(span),\n status: getSimpleStatus(status),\n attributes: addStatusMessageAttribute(attributes, status),\n links: getStreamedSpanLinks(links)\n };\n }\n return {\n span_id,\n trace_id,\n start_timestamp: 0,\n name: \"\",\n status: \"ok\",\n is_segment: spanIsSegment(span),\n attributes: {}\n };\n}\nfunction getOtelParentSpanId(span) {\n return \"parentSpanId\" in span ? span.parentSpanId : \"parentSpanContext\" in span ? span.parentSpanContext?.spanId : void 0;\n}\nfunction streamedSpanJsonToSerializedSpan(spanJson) {\n return {\n ...spanJson,\n // We only ever send ended spans, but fall back to the start time (i.e. duration 0) so that\n // sent spans always carry an end timestamp.\n end_timestamp: spanJson.end_timestamp ?? spanJson.start_timestamp,\n attributes: serializeAttributes(spanJson.attributes),\n links: spanJson.links?.map((link) => ({\n ...link,\n attributes: serializeAttributes(link.attributes)\n }))\n };\n}\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n const castSpan = span;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\nfunction spanIsSentrySpan(span) {\n return typeof span.getSpanJSON === \"function\";\n}\nfunction spanIsSampled(span) {\n const { traceFlags } = span.spanContext();\n return traceFlags === TRACE_FLAG_SAMPLED;\n}\nfunction getStatusMessage(status) {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return \"ok\";\n }\n if (status.code === SPAN_STATUS_OK) {\n return \"ok\";\n }\n return status.message && isStatusErrorMessageValid(status.message) ? status.message : \"internal_error\";\n}\nfunction getSimpleStatus(status) {\n return !status || status.code === SPAN_STATUS_OK || status.code === SPAN_STATUS_UNSET || status.message === \"cancelled\" ? \"ok\" : \"error\";\n}\nfunction addStatusMessageAttribute(attributes, status) {\n const statusMessage = getSimpleStatus(status) === \"error\" ? status?.message : void 0;\n return {\n ...statusMessage && { [SENTRY_STATUS_MESSAGE]: statusMessage },\n ...attributes\n };\n}\nconst CHILD_SPANS_FIELD = \"_sentryChildSpans\";\nconst ROOT_SPAN_FIELD = \"_sentryRootSpan\";\nfunction addChildSpanToSpan(span, childSpan) {\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan, ROOT_SPAN_FIELD, rootSpan);\n childSpan.setAttribute(SENTRY_SEGMENT_NAME_SOURCE, void 0);\n if (!spanIsSampled(span)) {\n return;\n }\n if (!span.isRecording() && !rootSpan.isRecording()) {\n return;\n }\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, /* @__PURE__ */ new Set([childSpan]));\n }\n}\nfunction removeChildSpanFromSpan(span, childSpan) {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\nfunction getSpanDescendants(span) {\n const resultSet = /* @__PURE__ */ new Set();\n function addSpanChildren(span2) {\n if (resultSet.has(span2)) {\n return;\n } else if (spanIsSampled(span2)) {\n resultSet.add(span2);\n const childSpans = span2[CHILD_SPANS_FIELD] ? Array.from(span2[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n addSpanChildren(span);\n return Array.from(resultSet);\n}\nconst getRootSpan = INTERNAL_getSegmentSpan;\nfunction INTERNAL_getSegmentSpan(span) {\n return span[ROOT_SPAN_FIELD] || span;\n}\nfunction spanIsSegment(span) {\n return span === INTERNAL_getSegmentSpan(span);\n}\nfunction getActiveSpan(scope) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan(scope);\n }\n return _getSpanForScope(scope || getCurrentScope());\n}\nfunction updateSpanName(span, name) {\n span.updateName(name);\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name\n });\n INTERNAL_setSegmentNameSourceIfSegment(span, \"custom\");\n}\nfunction INTERNAL_setSegmentNameSourceIfSegment(span, source) {\n if (spanIsSegment(span)) {\n span.setAttribute(SENTRY_SEGMENT_NAME_SOURCE, source);\n }\n}\n\nexport { INTERNAL_getSegmentSpan, INTERNAL_setSegmentNameSourceIfSegment, TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, addStatusMessageAttribute, convertSpanLinksForEnvelope, getActiveSpan, getRootSpan, getSimpleStatus, getSpanDescendants, getStatusMessage, getStreamedSpanLinks, removeChildSpanFromSpan, spanIsSampled, spanIsSegment, spanIsSentrySpan, spanTimeInputToSeconds, spanToJSON, spanToStaticSpanJSON, spanToTraceContext, spanToTraceHeader, spanToTraceparentHeader, spanToTransactionTraceContext, streamedSpanJsonToSerializedSpan, updateSpanName };\n//# sourceMappingURL=spanUtils.js.map\n","import { getClient } from '../currentScopes.js';\n\nfunction hasSpansEnabled(maybeOptions) {\n if (typeof __SENTRY_TRACING__ === \"boolean\" && !__SENTRY_TRACING__) {\n return false;\n }\n const options = maybeOptions || getClient()?.getOptions();\n return !!options && // Note: This check is `!= null`, meaning \"nullish\". `0` is not \"nullish\", `undefined` and `null` are. (This comment was brought to you by 15 minutes of questioning life)\n (options.tracesSampleRate != null || !!options.tracesSampler);\n}\n\nexport { hasSpansEnabled };\n//# sourceMappingURL=hasSpansEnabled.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isMatchingPattern } from './string.js';\n\nfunction logIgnoredSpan(droppedSpan) {\n debug.log(`Ignoring span ${droppedSpan.op} - ${droppedSpan.description} because it matches \\`ignoreSpans\\`.`);\n}\nfunction shouldIgnoreSpan(span, ignoreSpans) {\n if (!ignoreSpans?.length) {\n return false;\n }\n for (const pattern of ignoreSpans) {\n if (isStringOrRegExp(pattern)) {\n if (span.description && isMatchingPattern(span.description, pattern)) {\n DEBUG_BUILD && logIgnoredSpan(span);\n return true;\n }\n continue;\n }\n const hasAttributes = !!pattern.attributes && Object.keys(pattern.attributes).length > 0;\n if (!pattern.name && !pattern.op && !hasAttributes) {\n continue;\n }\n const nameMatches = pattern.name ? span.description && isMatchingPattern(span.description, pattern.name) : true;\n const opMatches = pattern.op ? span.op && isMatchingPattern(span.op, pattern.op) : true;\n const attrsMatch = pattern.attributes ? Object.entries(pattern.attributes).every(\n ([key, valuePattern]) => _matchesAttributeValue(span.attributes?.[key], valuePattern)\n ) : true;\n if (nameMatches && opMatches && attrsMatch) {\n DEBUG_BUILD && logIgnoredSpan(span);\n return true;\n }\n }\n return false;\n}\nfunction _matchesAttributeValue(actual, pat) {\n if (typeof actual === \"string\" && (typeof pat === \"string\" || pat instanceof RegExp)) {\n return isMatchingPattern(actual, pat);\n }\n if (Array.isArray(actual) && Array.isArray(pat)) {\n return actual.length === pat.length && actual.every((v, i) => v === pat[i]);\n }\n return actual === pat;\n}\nfunction reparentChildSpans(spans, dropSpan) {\n const droppedSpanParentId = dropSpan.parent_span_id;\n const droppedSpanId = dropSpan.span_id;\n if (!droppedSpanParentId) {\n return;\n }\n for (const span of spans) {\n if (span.parent_span_id === droppedSpanId) {\n span.parent_span_id = droppedSpanParentId;\n }\n }\n}\nfunction isStringOrRegExp(value) {\n return typeof value === \"string\" || value instanceof RegExp;\n}\n\nexport { reparentChildSpans, shouldIgnoreSpan };\n//# sourceMappingURL=should-ignore-span.js.map\n","import { getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { debug } from './utils/debug-logger.js';\n\nconst installedIntegrations = [];\nfunction filterDuplicates(integrations) {\n const integrationsByName = {};\n integrations.forEach((currentInstance) => {\n const { name } = currentInstance;\n const existingInstance = integrationsByName[name];\n if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n return;\n }\n integrationsByName[name] = currentInstance;\n });\n return Object.values(integrationsByName);\n}\nfunction getIntegrationsToSetup(options) {\n const defaultIntegrations = options.defaultIntegrations || [];\n const userIntegrations = options.integrations;\n defaultIntegrations.forEach((integration) => {\n integration.isDefaultInstance = true;\n });\n let integrations;\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === \"function\") {\n const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n } else {\n integrations = defaultIntegrations;\n }\n return filterDuplicates(integrations);\n}\nfunction setupIntegrations(client, integrations) {\n const integrationIndex = {};\n integrations.forEach((integration) => {\n if (integration?.beforeSetup) {\n integration.beforeSetup(client);\n }\n });\n integrations.forEach((integration) => {\n if (integration) {\n setupIntegration(client, integration, integrationIndex);\n }\n });\n return integrationIndex;\n}\nfunction afterSetupIntegrations(client, integrations) {\n for (const integration of integrations) {\n if (integration?.afterAllSetup) {\n integration.afterAllSetup(client);\n }\n }\n}\nfunction setupIntegration(client, integration, integrationIndex) {\n if (integrationIndex[integration.name]) {\n DEBUG_BUILD && debug.log(`Integration skipped because it was already installed: ${integration.name}`);\n return;\n }\n integrationIndex[integration.name] = integration;\n if (!installedIntegrations.includes(integration.name) && typeof integration.setupOnce === \"function\") {\n integration.setupOnce();\n installedIntegrations.push(integration.name);\n }\n if (integration.setup && typeof integration.setup === \"function\") {\n integration.setup(client);\n }\n if (typeof integration.preprocessEvent === \"function\") {\n const callback = integration.preprocessEvent.bind(integration);\n client.on(\"preprocessEvent\", (event, hint) => callback(event, hint, client));\n }\n if (typeof integration.processEvent === \"function\") {\n const callback = integration.processEvent.bind(integration);\n const processor = Object.assign((event, hint) => callback(event, hint, client), {\n id: integration.name\n });\n client.addEventProcessor(processor);\n }\n [\"processSpan\", \"processSegmentSpan\"].forEach((hook) => {\n const callback = integration[hook];\n if (typeof callback === \"function\") {\n client.on(hook, (span) => callback.call(integration, span, client));\n }\n });\n DEBUG_BUILD && debug.log(`Integration installed: ${integration.name}`);\n}\nfunction addIntegration(integration) {\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && debug.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n return;\n }\n client.addIntegration(integration);\n}\nfunction defineIntegration(fn) {\n return fn;\n}\nfunction extendIntegration(integration, extendedIntegration) {\n const wrappedIntegration = {\n ...integration,\n ...extendedIntegration\n };\n for (const key in extendedIntegration) {\n const baseValue = integration[key];\n const extendedValue = extendedIntegration[key];\n if (typeof baseValue === \"function\" && typeof extendedValue === \"function\") {\n const wrappedFunction = new Proxy(baseValue, {\n apply: (target, thisArg, args) => {\n Reflect.apply(target, thisArg, args);\n return Reflect.apply(extendedValue, thisArg, args);\n }\n });\n wrappedIntegration[key] = wrappedFunction;\n }\n }\n return wrappedIntegration;\n}\n\nexport { addIntegration, afterSetupIntegrations, defineIntegration, extendIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","const DEFAULT_ENVIRONMENT = \"production\";\nconst DEV_ENVIRONMENT = \"development\";\n\nexport { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { addNonEnumerableProperty } from '../utils/object.js';\nimport { generateTraceId, generateSpanId } from '../utils/propagationContext.js';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils.js';\n\nconst NON_RECORDING_SPAN_FIELD = /* @__PURE__ */ Symbol.for(\"sentry.nonRecordingSpan\");\nclass SentryNonRecordingSpan {\n constructor(spanContext = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n this.dropReason = spanContext.dropReason;\n addNonEnumerableProperty(this, NON_RECORDING_SPAN_FIELD, true);\n }\n /** @inheritdoc */\n spanContext() {\n return {\n spanId: this._spanId,\n traceId: this._traceId,\n traceFlags: TRACE_FLAG_NONE\n };\n }\n /** @inheritdoc */\n end(_timestamp) {\n }\n /** @inheritdoc */\n setAttribute(_key, _value) {\n return this;\n }\n /** @inheritdoc */\n setAttributes(_values) {\n return this;\n }\n /** @inheritdoc */\n setStatus(_status) {\n return this;\n }\n /** @inheritdoc */\n updateName(_name) {\n return this;\n }\n /** @inheritdoc */\n isRecording() {\n return false;\n }\n /** @inheritdoc */\n addEvent(_name, _attributesOrStartTime, _startTime) {\n return this;\n }\n /** @inheritDoc */\n addLink(_link) {\n return this;\n }\n /** @inheritDoc */\n addLinks(_links) {\n return this;\n }\n /**\n * This should generally not be used,\n * but we need it for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n recordException(_exception, _time) {\n }\n}\nfunction spanIsNonRecordingSpan(span) {\n return !!span && span[NON_RECORDING_SPAN_FIELD] === true;\n}\n\nexport { SentryNonRecordingSpan, spanIsNonRecordingSpan };\n//# sourceMappingURL=sentryNonRecordingSpan.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getExternalPropagationContext, getClient } from '../currentScopes.js';\nimport { SENTRY_SEGMENT_NAME_SOURCE } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE } from '../semanticAttributes.js';\nimport { baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader } from '../utils/baggage.js';\nimport { extractOrgIdFromClient } from '../utils/dsn.js';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled.js';\nimport { addNonEnumerableProperty } from '../utils/object.js';\nimport { getRootSpan, spanToStaticSpanJSON, spanIsSampled } from '../utils/spanUtils.js';\nimport { spanIsNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { getCapturedScopesOnSpan } from './utils.js';\n\nconst FROZEN_DSC_FIELD = \"_frozenDsc\";\nfunction freezeDscOnSpan(span, dsc) {\n const spanWithMaybeDsc = span;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n const options = client.getOptions();\n const { publicKey: public_key } = client.getDsn() || {};\n const dsc = {\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n org_id: extractOrgIdFromClient(client)\n };\n client.emit(\"createDsc\", dsc);\n return dsc;\n}\nfunction getDynamicSamplingContextFromScope(client, scope) {\n if (getExternalPropagationContext()) {\n return void 0;\n }\n const propagationContext = scope.getPropagationContext();\n return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\nfunction getDynamicSamplingContextFromSpan(span) {\n const client = getClient();\n if (!client) {\n return {};\n }\n const rootSpan = getRootSpan(span);\n const rootSpanJson = spanToStaticSpanJSON(rootSpan);\n const rootSpanAttributes = rootSpanJson.data;\n const traceState = rootSpan.spanContext().traceState;\n const rootSpanSampleRate = traceState?.get(\"sentry.sample_rate\") ?? rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] ?? rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE];\n function applyLocalSampleRateToDsc(dsc2) {\n if (typeof rootSpanSampleRate === \"number\" || typeof rootSpanSampleRate === \"string\") {\n dsc2.sample_rate = `${rootSpanSampleRate}`;\n }\n return dsc2;\n }\n const frozenDsc = rootSpan[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return applyLocalSampleRateToDsc(frozenDsc);\n }\n const isNonRecordingRoot = spanIsNonRecordingSpan(rootSpan);\n const isIgnoredRoot = isNonRecordingRoot && rootSpan.dropReason === \"ignored\";\n if (isNonRecordingRoot && (!hasSpansEnabled(client.getOptions()) || isIgnoredRoot)) {\n const capturedScope = getCapturedScopesOnSpan(rootSpan).scope;\n const scopeDsc = capturedScope && getDynamicSamplingContextFromScope(client, capturedScope);\n if (scopeDsc) {\n const dsc2 = { ...scopeDsc };\n if (isIgnoredRoot) {\n dsc2.sampled = \"false\";\n }\n return applyLocalSampleRateToDsc(dsc2);\n }\n }\n const traceStateDsc = traceState?.get(\"sentry.dsc\");\n const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n if (dscOnTraceState) {\n return applyLocalSampleRateToDsc(dscOnTraceState);\n }\n const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\n const source = rootSpanAttributes[SENTRY_SEGMENT_NAME_SOURCE];\n const name = rootSpanJson.description;\n if (source !== \"url\" && name) {\n dsc.transaction = name;\n }\n if (hasSpansEnabled()) {\n dsc.sampled = String(spanIsSampled(rootSpan));\n dsc.sample_rand = // In OTEL we store the sample rand on the trace state because we cannot access scopes for NonRecordingSpans\n // The Sentry OTEL SpanSampler takes care of writing the sample rand on the root span\n traceState?.get(\"sentry.sample_rand\") ?? // On all other platforms we can actually get the scopes from a root span (we use this as a fallback)\n getCapturedScopesOnSpan(rootSpan).scope?.getPropagationContext().sampleRand.toString();\n }\n applyLocalSampleRateToDsc(dsc);\n client.emit(\"createDsc\", dsc, rootSpan);\n return dsc;\n}\nfunction spanToBaggageHeader(span) {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { getGlobalScope } from '../currentScopes.js';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { merge } from './merge.js';\nimport { spanToTraceContext, getRootSpan, spanToStaticSpanJSON } from './spanUtils.js';\n\nfunction applyScopeDataToEvent(event, data) {\n const { fingerprint, breadcrumbs, sdkProcessingMetadata } = data;\n applyDataToEvent(event, data);\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\nfunction mergeScopeData(data, mergeData) {\n const {\n extra,\n tags,\n attributes,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n transactionName\n } = mergeData;\n mergeAndOverwriteScopeData(data, \"extra\", extra);\n mergeAndOverwriteScopeData(data, \"tags\", tags);\n mergeAndOverwriteScopeData(data, \"attributes\", attributes);\n mergeAndOverwriteScopeData(data, \"user\", user);\n mergeAndOverwriteScopeData(data, \"contexts\", contexts);\n data.sdkProcessingMetadata = merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n if (level) {\n data.level = level;\n }\n if (transactionName) {\n data.transactionName = transactionName;\n }\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\nfunction mergeAndOverwriteScopeData(data, prop, mergeVal) {\n data[prop] = merge(data[prop], mergeVal, 1);\n}\nfunction getCombinedScopeData(isolationScope, currentScope) {\n const scopeData = getGlobalScope().getScopeData();\n isolationScope && mergeScopeData(scopeData, isolationScope.getScopeData());\n currentScope && mergeScopeData(scopeData, currentScope.getScopeData());\n return scopeData;\n}\nfunction applyDataToEvent(event, data) {\n const { extra, tags, user, contexts, level, transactionName } = data;\n if (Object.keys(extra).length) {\n event.extra = { ...extra, ...event.extra };\n }\n if (Object.keys(tags).length) {\n event.tags = { ...tags, ...event.tags };\n }\n if (Object.keys(user).length) {\n event.user = { ...user, ...event.user };\n }\n if (Object.keys(contexts).length) {\n event.contexts = { ...contexts, ...event.contexts };\n }\n if (level) {\n event.level = level;\n }\n if (transactionName && event.type !== \"transaction\") {\n event.transaction = transactionName;\n }\n}\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n const mergedBreadcrumbs = [...event.breadcrumbs || [], ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : void 0;\n}\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata\n };\n}\nfunction applySpanToEvent(event, span) {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts\n };\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata\n };\n const rootSpan = getRootSpan(span);\n const transactionName = spanToStaticSpanJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === \"transaction\") {\n event.transaction = transactionName;\n }\n}\nfunction applyFingerprintToEvent(event, fingerprint) {\n event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : [];\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n if (!event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n\nexport { applyScopeDataToEvent, applySpanToEvent, getCombinedScopeData, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=scopeData.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { isThenable } from './is.js';\n\nconst CALLBACK_ERROR = /* @__PURE__ */ Symbol.for(\"SentryCallbackError\");\nfunction safeCallback(message, fn, fallback) {\n let result;\n try {\n result = fn();\n } catch (error) {\n return recover(message, error, fallback);\n }\n if (isThenable(result)) {\n return result.then(void 0, (error) => recover(message, error, fallback));\n }\n return result;\n}\nfunction recover(message, error, fallback) {\n DEBUG_BUILD && debug.error(message, error);\n return fallback(error);\n}\n\nexport { CALLBACK_ERROR, safeCallback };\n//# sourceMappingURL=safeCallback.js.map\n","import { DEBUG_BUILD } from '../../debug-build.js';\nimport { addNonEnumerableProperty } from '../../utils/object.js';\nimport { safeCallback } from '../../utils/safeCallback.js';\n\nfunction withStaticSpan(callback) {\n addNonEnumerableProperty(callback, \"_static\", true);\n return callback;\n}\nfunction withStreamedSpan(callback) {\n return callback;\n}\nfunction isStaticBeforeSendSpanCallback(callback) {\n return !!callback && typeof callback === \"function\" && \"_static\" in callback && !!callback._static;\n}\nfunction applyBeforeSendSpanCallback(span, beforeSendSpan) {\n const modifiedSpan = safeCallback(\n DEBUG_BUILD ? \"The `beforeSendSpan` callback threw an error, sending the span unmodified:\" : \"\",\n () => beforeSendSpan(span),\n () => span\n );\n return modifiedSpan || span;\n}\n\nexport { applyBeforeSendSpanCallback, isStaticBeforeSendSpanCallback, withStaticSpan, withStreamedSpan };\n//# sourceMappingURL=beforeSendSpan.js.map\n","import { streamedSpanJsonToSerializedSpan } from '../../utils/spanUtils.js';\n\nfunction spanJsonToSerializedStreamedSpan(span) {\n const streamedSpan = {\n trace_id: span.trace_id,\n span_id: span.span_id,\n parent_span_id: span.parent_span_id,\n name: span.description || \"\",\n start_timestamp: span.start_timestamp,\n end_timestamp: span.timestamp,\n status: !span.status || span.status === \"ok\" || span.status === \"cancelled\" ? \"ok\" : \"error\",\n is_segment: false,\n attributes: { ...span.data },\n links: span.links\n };\n return streamedSpanJsonToSerializedSpan(streamedSpan);\n}\n\nexport { spanJsonToSerializedStreamedSpan };\n//# sourceMappingURL=spanJsonToStreamedSpan.js.map\n","import { SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../../semanticAttributes.js';\nimport { getCombinedScopeData } from '../../utils/scopeData.js';\nimport { spanToJSON, INTERNAL_getSegmentSpan, streamedSpanJsonToSerializedSpan, spanToStaticSpanJSON } from '../../utils/spanUtils.js';\nimport { getCapturedScopesOnSpan } from '../utils.js';\nimport { isStaticBeforeSendSpanCallback, applyBeforeSendSpanCallback } from './beforeSendSpan.js';\nimport { spanJsonToSerializedStreamedSpan } from './spanJsonToStreamedSpan.js';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes.js';\nimport { DEFAULT_ENVIRONMENT } from '../../constants.js';\nimport { SENTRY_SDK_INTEGRATIONS, USER_NAME, USER_IP_ADDRESS, USER_EMAIL, USER_ID, SENTRY_ENVIRONMENT, SENTRY_RELEASE, SENTRY_SDK_VERSION, SENTRY_SDK_NAME, SENTRY_SEGMENT_ID, SENTRY_SEGMENT_NAME, SENTRY_TRACE_LIFECYCLE } from '@sentry/conventions/attributes';\n\nfunction captureSpan(span, client) {\n const spanJSON = spanToJSON(span);\n if (spanJSON.attributes) {\n delete spanJSON.attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n }\n const segmentSpan = INTERNAL_getSegmentSpan(span);\n const serializedSegmentSpan = spanToJSON(segmentSpan);\n const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n client.emit(\"preprocessSpan\", spanJSON);\n if (spanJSON.is_segment) {\n applyScopeToSegmentSpan(spanJSON, finalScopeData);\n applySdkMetadataToSegmentSpan(spanJSON, client);\n client.emit(\"processSegmentSpan\", spanJSON);\n }\n client.emit(\"processSpan\", spanJSON);\n const { beforeSendSpan, traceLifecycle } = client.getOptions();\n const processedSpan = (\n // check for traceLifecycle here because in static lifecycle,\n // captureSpan is called for INP spans. If an unmigrated beforeSendSpan\n // callback is run on these spans, it will throw an error.\n traceLifecycle !== \"static\" && beforeSendSpan && !isStaticBeforeSendSpanCallback(beforeSendSpan) ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan) : spanJSON\n );\n return {\n ...streamedSpanJsonToSerializedSpan(processedSpan),\n _segmentSpan: segmentSpan\n };\n}\nfunction applyScopeToSegmentSpan(segmentSpanJSON, scopeData) {\n const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\nfunction safeSetSpanJSONAttributes(spanJSON, newAttributes) {\n const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n Object.entries(newAttributes).forEach(([key, value]) => {\n if (value != null && !(key in originalAttributes)) {\n originalAttributes[key] = value;\n }\n });\n}\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON, client) {\n const integrationNames = client.getIntegrationNames();\n if (!integrationNames.length) return;\n safeSetSpanJSONAttributes(segmentSpanJSON, {\n [SENTRY_SDK_INTEGRATIONS]: integrationNames\n });\n}\nfunction commonSpanAttributes(serializedSegmentSpan, client, scopeData, includeScopeAttributes = true) {\n const sdk = client.getSdkMetadata();\n const { release, environment } = client.getOptions();\n return {\n [SENTRY_TRACE_LIFECYCLE]: \"stream\",\n [SENTRY_SEGMENT_NAME]: serializedSegmentSpan.name,\n [SENTRY_SEGMENT_ID]: serializedSegmentSpan.span_id,\n [SENTRY_SDK_NAME]: sdk?.sdk?.name,\n [SENTRY_SDK_VERSION]: sdk?.sdk?.version,\n [SENTRY_RELEASE]: release,\n [SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n [USER_ID]: scopeData.user?.id,\n [USER_EMAIL]: scopeData.user?.email,\n [USER_IP_ADDRESS]: scopeData.user?.ip_address,\n [USER_NAME]: scopeData.user?.username,\n ...includeScopeAttributes ? scopeData.attributes : void 0\n };\n}\nfunction applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, scopeData) {\n safeSetSpanJSONAttributes(spanJSON, commonSpanAttributes(serializedSegmentSpan, client, scopeData));\n}\nfunction captureStandaloneSpanWithStaticCallback(span, client, beforeSendSpan) {\n const spanJSON = spanToStaticSpanJSON(span);\n const segmentSpan = INTERNAL_getSegmentSpan(span);\n const serializedSegmentSpan = spanToJSON(segmentSpan);\n const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n const commonAttributes = commonSpanAttributes(serializedSegmentSpan, client, finalScopeData, false);\n Object.entries(commonAttributes).forEach(([key, value]) => {\n if (value != null && !(key in spanJSON.data)) {\n spanJSON.data[key] = value;\n }\n });\n const processedSpan = applyBeforeSendSpanCallback(spanJSON, beforeSendSpan);\n return spanJsonToSerializedStreamedSpan(processedSpan);\n}\n\nexport { captureSpan, captureStandaloneSpanWithStaticCallback, safeSetSpanJSONAttributes };\n//# sourceMappingURL=captureSpan.js.map\n","function hasSpanStreamingEnabled(client) {\n return client.getOptions().traceLifecycle === \"stream\";\n}\n\nexport { hasSpanStreamingEnabled };\n//# sourceMappingURL=hasSpanStreamingEnabled.js.map\n","function safeUnref(timer) {\n if (typeof timer === \"object\" && typeof timer.unref === \"function\") {\n timer.unref();\n }\n return timer;\n}\n\nexport { safeUnref };\n//# sourceMappingURL=timer.js.map\n","import { getSentryCarrier } from '../carrier.js';\nimport { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { safeDateNow } from './randomSafeContext.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction createEnvelope(headers, items = []) {\n return [headers, items];\n}\nfunction addItemToEnvelope(envelope, newItem) {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]];\n}\nfunction forEachEnvelopeItem(envelope, callback) {\n const envelopeItems = envelope[1];\n for (const envelopeItem of envelopeItems) {\n const envelopeItemType = envelopeItem[0].type;\n const result = callback(envelopeItem, envelopeItemType);\n if (result) {\n return true;\n }\n }\n return false;\n}\nfunction envelopeContainsItemType(envelope, types) {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\nfunction encodeUTF8(input) {\n const carrier = getSentryCarrier(GLOBAL_OBJ);\n return carrier.encodePolyfill ? carrier.encodePolyfill(input) : new TextEncoder().encode(input);\n}\nfunction decodeUTF8(input) {\n const carrier = getSentryCarrier(GLOBAL_OBJ);\n return carrier.decodePolyfill ? carrier.decodePolyfill(input) : new TextDecoder().decode(input);\n}\nfunction serializeEnvelope(envelope) {\n const [envHeaders, items] = envelope;\n let parts = JSON.stringify(envHeaders);\n function append(next) {\n if (typeof parts === \"string\") {\n parts = typeof next === \"string\" ? parts + next : [encodeUTF8(parts), next];\n } else {\n parts.push(typeof next === \"string\" ? encodeUTF8(next) : next);\n }\n }\n for (const item of items) {\n const [itemHeaders, payload] = item;\n append(`\n${JSON.stringify(itemHeaders)}\n`);\n if (typeof payload === \"string\" || payload instanceof Uint8Array) {\n append(payload);\n } else {\n let stringifiedPayload;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch {\n stringifiedPayload = JSON.stringify(normalize(payload));\n }\n append(stringifiedPayload);\n }\n }\n return typeof parts === \"string\" ? parts : concatBuffers(parts);\n}\nfunction concatBuffers(buffers) {\n const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n return merged;\n}\nfunction parseEnvelope(env) {\n let buffer = typeof env === \"string\" ? encodeUTF8(env) : env;\n function readBinary(length) {\n const bin = buffer.subarray(0, length);\n buffer = buffer.subarray(length + 1);\n return bin;\n }\n function readJson() {\n let i = buffer.indexOf(10);\n if (i < 0) {\n i = buffer.length;\n }\n return JSON.parse(decodeUTF8(readBinary(i)));\n }\n const envelopeHeader = readJson();\n const items = [];\n while (buffer.length) {\n const itemHeader = readJson();\n const binaryLength = typeof itemHeader.length === \"number\" ? itemHeader.length : void 0;\n items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n }\n return [envelopeHeader, items];\n}\nfunction createAttachmentEnvelopeItem(attachment) {\n const buffer = typeof attachment.data === \"string\" ? encodeUTF8(attachment.data) : attachment.data;\n return [\n {\n type: \"attachment\",\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType\n },\n buffer\n ];\n}\nconst DATA_CATEGORY_OVERRIDES = {\n sessions: \"session\",\n event: \"error\",\n client_report: \"internal\",\n user_report: \"default\",\n profile_chunk: \"profile\",\n replay_event: \"replay\",\n replay_recording: \"replay\",\n check_in: \"monitor\",\n raw_security: \"security\",\n log: \"log_item\",\n trace_metric: \"metric\"\n};\nfunction _isOverriddenType(type) {\n return type in DATA_CATEGORY_OVERRIDES;\n}\nfunction envelopeItemTypeToDataCategory(type) {\n return _isOverriddenType(type) ? DATA_CATEGORY_OVERRIDES[type] : type;\n}\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n if (!metadataOrEvent?.sdk) {\n return;\n }\n const { name, version } = metadataOrEvent.sdk;\n return { name, version };\n}\nfunction createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn) {\n const dynamicSamplingContext = event.sdkProcessingMetadata?.dynamicSamplingContext;\n return {\n event_id: event.event_id,\n sent_at: new Date(safeDateNow()).toISOString(),\n ...sdkInfo && { sdk: sdkInfo },\n ...!!tunnel && dsn && { dsn: dsnToString(dsn) },\n ...dynamicSamplingContext && {\n trace: dynamicSamplingContext\n }\n };\n}\nfunction getDataCategoryByType(type) {\n return type === \"replay_event\" ? \"replay\" : type || \"error\";\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getDataCategoryByType, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","function isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== \"undefined\" && !!__SENTRY_BROWSER_BUNDLE__;\n}\nfunction getSDKSource() {\n /*! __SENTRY_SDK_SOURCE__ */\n return \"npm\";\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { isBrowserBundle } from './env.js';\n\nfunction isNodeEnv() {\n return !isBrowserBundle() && Object.prototype.toString.call(typeof process !== \"undefined\" ? process : 0) === \"[object process]\";\n}\nfunction dynamicRequire(mod, request) {\n return mod.require(request);\n}\nfunction loadModule(moduleName, existingModule = typeof module !== \"undefined\" ? module : void 0) {\n let mod;\n try {\n mod = dynamicRequire(existingModule, moduleName);\n } catch {\n }\n if (!mod) {\n try {\n const { cwd } = dynamicRequire(existingModule, \"process\");\n mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`);\n } catch {\n }\n }\n return mod;\n}\n\nexport { isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","import { isNodeEnv } from './node.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nfunction isBrowser() {\n return typeof window !== \"undefined\" && (!isNodeEnv() || isElectronNodeRenderer());\n}\nfunction isElectronNodeRenderer() {\n const process = GLOBAL_OBJ.process;\n return process?.type === \"renderer\";\n}\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.js.map\n","import { dsnToString } from '../../utils/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEnvelope } from '../../utils/envelope.js';\nimport { isBrowser } from '../../utils/isBrowser.js';\nimport { safeDateNow } from '../../utils/randomSafeContext.js';\n\nfunction createStreamedSpanEnvelope(serializedSpans, dsc, client) {\n const options = client.getOptions();\n const dsn = client.getDsn();\n const tunnel = options.tunnel;\n const sdk = getSdkMetadataForEnvelopeHeader(options._metadata);\n const headers = {\n sent_at: new Date(safeDateNow()).toISOString(),\n ...dscHasRequiredProps(dsc) && { trace: dsc },\n ...sdk && { sdk },\n ...!!tunnel && dsn && { dsn: dsnToString(dsn) }\n };\n return createEnvelope(headers, [createSpanContainerItem(serializedSpans, client)]);\n}\nfunction createSpanContainerItem(serializedSpans, client) {\n const inferSetting = client.getDataCollectionOptions().userInfo ? \"auto\" : \"never\";\n return [\n { type: \"span\", item_count: serializedSpans.length, content_type: \"application/vnd.sentry.items.span.v2+json\" },\n {\n version: 2,\n ingest_settings: isBrowser() ? { infer_ip: inferSetting, infer_user_agent: inferSetting } : void 0,\n items: serializedSpans\n }\n ];\n}\nfunction dscHasRequiredProps(dsc) {\n return !!dsc.trace_id && !!dsc.public_key;\n}\n\nexport { createSpanContainerItem, createStreamedSpanEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { getTraceContextFromScope } from '../currentScopes.js';\nimport { isPrimitive } from './is.js';\nimport { spanIsSampled, spanToTraceContext } from './spanUtils.js';\n\nconst escapedSpanTraceContexts = /* @__PURE__ */ new WeakMap();\nfunction toWeakMapKey(error) {\n return isPrimitive(error) ? void 0 : error;\n}\nfunction recordEscapedErrorSpan(error, span) {\n const key = toWeakMapKey(error);\n if (!key || !spanIsSampled(span) || escapedSpanTraceContexts.has(key)) {\n return;\n }\n escapedSpanTraceContexts.set(key, spanToTraceContext(span));\n}\nfunction applyEscapedErrorSpanToEvent(event, hint, scope) {\n const key = toWeakMapKey(hint.originalException);\n const traceContext = key && escapedSpanTraceContexts.get(key);\n if (!traceContext) {\n return;\n }\n const eventTraceContext = event.contexts?.trace;\n const eventTraceId = eventTraceContext?.trace_id ?? (scope && getTraceContextFromScope(scope).trace_id);\n if (eventTraceId !== traceContext.trace_id) {\n return;\n }\n event.contexts = {\n ...event.contexts,\n trace: {\n ...eventTraceContext,\n ...traceContext\n }\n };\n}\n\nexport { applyEscapedErrorSpanToEvent, recordEscapedErrorSpan };\n//# sourceMappingURL=errorSpanAttribution.js.map\n","import { dsnToString } from './utils/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEventEnvelopeHeaders, createEnvelope } from './utils/envelope.js';\nimport { safeDateNow } from './utils/randomSafeContext.js';\n\nfunction _enhanceEventWithSdkInfo(event, newSdkInfo) {\n if (!newSdkInfo) {\n return event;\n }\n const eventSdkInfo = event.sdk || {};\n event.sdk = {\n ...eventSdkInfo,\n name: eventSdkInfo.name || newSdkInfo.name,\n version: eventSdkInfo.version || newSdkInfo.version,\n integrations: [...event.sdk?.integrations || [], ...newSdkInfo.integrations || []],\n packages: [...event.sdk?.packages || [], ...newSdkInfo.packages || []],\n settings: event.sdk?.settings || newSdkInfo.settings ? {\n ...event.sdk?.settings,\n ...newSdkInfo.settings\n } : void 0\n };\n return event;\n}\nfunction createSessionEnvelope(session, dsn, metadata, tunnel) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n const envelopeHeaders = {\n sent_at: new Date(safeDateNow()).toISOString(),\n ...sdkInfo && { sdk: sdkInfo },\n ...!!tunnel && dsn && { dsn: dsnToString(dsn) }\n };\n const envelopeItem = \"aggregates\" in session ? [{ type: \"sessions\" }, session] : [{ type: \"session\" }, session.toJSON()];\n return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\nfunction createEventEnvelope(event, dsn, metadata, tunnel) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n const eventType = event.type && event.type !== \"replay_event\" ? event.type : \"event\";\n _enhanceEventWithSdkInfo(event, metadata?.sdk);\n const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n delete event.sdkProcessingMetadata;\n const eventItem = [{ type: eventType }, event];\n return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\nexport { _enhanceEventWithSdkInfo, createEventEnvelope, createSessionEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { isThenable } from './is.js';\n\nconst STATE_PENDING = 0;\nconst STATE_RESOLVED = 1;\nconst STATE_REJECTED = 2;\nfunction resolvedSyncPromise(value) {\n return new SyncPromise((resolve) => {\n resolve(value);\n });\n}\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\nclass SyncPromise {\n constructor(executor) {\n this._state = STATE_PENDING;\n this._handlers = [];\n this._runExecutor(executor);\n }\n /** @inheritdoc */\n then(onfulfilled, onrejected) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n (result) => {\n if (!onfulfilled) {\n resolve(result);\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n (reason) => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n }\n ]);\n this._executeHandlers();\n });\n }\n /** @inheritdoc */\n catch(onrejected) {\n return this.then((val) => val, onrejected);\n }\n /** @inheritdoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n return this.then(\n (value) => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n (reason) => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n }\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n resolve(val);\n });\n });\n }\n /** Excute the resolve/reject handlers. */\n _executeHandlers() {\n if (this._state === STATE_PENDING) {\n return;\n }\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n cachedHandlers.forEach((handler) => {\n if (handler[0]) {\n return;\n }\n if (this._state === STATE_RESOLVED) {\n handler[1](this._value);\n }\n if (this._state === STATE_REJECTED) {\n handler[2](this._value);\n }\n handler[0] = true;\n });\n }\n /** Run the executor for the SyncPromise. */\n _runExecutor(executor) {\n const setResult = (state, value) => {\n if (this._state !== STATE_PENDING) {\n return;\n }\n if (isThenable(value)) {\n void value.then(resolve, reject);\n return;\n }\n this._state = state;\n this._value = value;\n this._executeHandlers();\n };\n const resolve = (value) => {\n setResult(STATE_RESOLVED, value);\n };\n const reject = (reason) => {\n setResult(STATE_REJECTED, reason);\n };\n try {\n executor(resolve, reject);\n } catch (e) {\n reject(e);\n }\n }\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { debug } from './utils/debug-logger.js';\nimport { isThenable } from './utils/is.js';\nimport { safeCallback } from './utils/safeCallback.js';\nimport { resolvedSyncPromise, rejectedSyncPromise } from './utils/syncpromise.js';\n\nfunction notifyEventProcessors(processors, event, hint, index = 0, onDrop) {\n try {\n const result = _notifyEventProcessors(event, hint, processors, index, onDrop);\n return isThenable(result) ? result : resolvedSyncPromise(result);\n } catch (error) {\n return rejectedSyncPromise(error);\n }\n}\nfunction _notifyEventProcessors(event, hint, processors, index, onDrop) {\n const processor = processors[index];\n if (!event || !processor) {\n return event;\n }\n const processorName = `Event processor \"${processor.id || \"?\"}\"`;\n let callbackError = false;\n const result = safeCallback(\n DEBUG_BUILD ? `${processorName} threw an error, dropping event:` : \"\",\n () => processor({ ...event }, hint),\n () => {\n callbackError = true;\n return null;\n }\n );\n DEBUG_BUILD && result === null && debug.log(`${processorName} dropped event`);\n if (isThenable(result)) {\n return result.then((final) => {\n if (!final) {\n onDrop?.(callbackError ? \"callback_error\" : \"event_processor\");\n return null;\n }\n return _notifyEventProcessors(final, hint, processors, index + 1, onDrop);\n });\n }\n if (!result) {\n onDrop?.(callbackError ? \"callback_error\" : \"event_processor\");\n return null;\n }\n return _notifyEventProcessors(result, hint, processors, index + 1, onDrop);\n}\n\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { normalizeStackTracePath } from './stacktrace.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nlet parsedStackResults;\nlet lastSentryKeysCount;\nlet lastNativeKeysCount;\nlet cachedFilenameDebugIds;\nfunction getFilenameToDebugIdMap(stackParser) {\n const sentryDebugIdMap = GLOBAL_OBJ._sentryDebugIds;\n const nativeDebugIdMap = GLOBAL_OBJ._debugIds;\n if (!sentryDebugIdMap && !nativeDebugIdMap) {\n return {};\n }\n const sentryDebugIdKeys = sentryDebugIdMap ? Object.keys(sentryDebugIdMap) : [];\n const nativeDebugIdKeys = nativeDebugIdMap ? Object.keys(nativeDebugIdMap) : [];\n if (cachedFilenameDebugIds && sentryDebugIdKeys.length === lastSentryKeysCount && nativeDebugIdKeys.length === lastNativeKeysCount) {\n return cachedFilenameDebugIds;\n }\n lastSentryKeysCount = sentryDebugIdKeys.length;\n lastNativeKeysCount = nativeDebugIdKeys.length;\n cachedFilenameDebugIds = {};\n if (!parsedStackResults) {\n parsedStackResults = {};\n }\n const processDebugIds = (debugIdKeys, debugIdMap) => {\n for (const key of debugIdKeys) {\n const debugId = debugIdMap[key];\n const result = parsedStackResults?.[key];\n if (result && cachedFilenameDebugIds && debugId) {\n cachedFilenameDebugIds[result[0]] = debugId;\n if (parsedStackResults) {\n parsedStackResults[key] = [result[0], debugId];\n }\n } else if (debugId) {\n const parsedStack = stackParser(key);\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n const filename = stackFrame?.filename;\n if (filename && cachedFilenameDebugIds && parsedStackResults) {\n cachedFilenameDebugIds[filename] = debugId;\n parsedStackResults[key] = [filename, debugId];\n break;\n }\n }\n }\n }\n };\n if (sentryDebugIdMap) {\n processDebugIds(sentryDebugIdKeys, sentryDebugIdMap);\n }\n if (nativeDebugIdMap) {\n processDebugIds(nativeDebugIdKeys, nativeDebugIdMap);\n }\n return cachedFilenameDebugIds;\n}\nfunction getDebugImagesForResources(stackParser, resource_paths) {\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n if (!filenameDebugIdMap) {\n return [];\n }\n const images = [];\n for (const path of resource_paths) {\n const normalizedPath = normalizeStackTracePath(path);\n if (normalizedPath && filenameDebugIdMap[normalizedPath]) {\n images.push({\n type: \"sourcemap\",\n code_file: path,\n debug_id: filenameDebugIdMap[normalizedPath]\n });\n }\n }\n return images;\n}\n\nexport { getDebugImagesForResources, getFilenameToDebugIdMap };\n//# sourceMappingURL=debug-ids.js.map\n","function isInternalException(hint) {\n return hint.data?.__sentry__ === true;\n}\nfunction getPossibleEventMessages(event) {\n const possibleMessages = [];\n if (event.message) {\n possibleMessages.push(event.message);\n }\n try {\n const lastException = event.exception.values[event.exception.values.length - 1];\n if (lastException?.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n } catch {\n }\n return possibleMessages;\n}\n\nexport { getPossibleEventMessages, isInternalException };\n//# sourceMappingURL=eventUtils.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { getFilenameToDebugIdMap } from './debug-ids.js';\nimport { getDataCategoryByType } from './envelope.js';\nimport { applyEscapedErrorSpanToEvent } from './errorSpanAttribution.js';\nimport { isInternalException } from './eventUtils.js';\nimport { uuid4, addExceptionMechanismToCapturedException } from './misc.js';\nimport { normalize } from './normalize.js';\nimport { getCombinedScopeData, applyScopeDataToEvent, applySpanToEvent } from './scopeData.js';\nimport { getActiveSpan } from './spanUtils.js';\nimport { truncate } from './string.js';\nimport { resolvedSyncPromise } from './syncpromise.js';\nimport { dateTimestampInSeconds } from './time.js';\n\nfunction prepareEvent(options, event, hint, scope, client, isolationScope) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1e3 } = options;\n const prepared = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds()\n };\n const integrations = hint.integrations || options.integrations.map((i) => i.name);\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n if (client) {\n client.emit(\"applyFrameMetadata\", event);\n }\n if (event.type === void 0) {\n applyDebugIds(prepared, options.stackParser);\n }\n const finalScope = getFinalScope(scope, hint.captureContext);\n if (hint.mechanism) {\n addExceptionMechanismToCapturedException(prepared, hint.mechanism);\n }\n const clientEventProcessors = client ? client.getEventProcessors() : [];\n const data = getCombinedScopeData(isolationScope, finalScope);\n const attachments = [...hint.attachments || [], ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n applyScopeDataToEvent(prepared, data);\n const span = getActiveSpan(finalScope);\n if (span) {\n applySpanToEvent(prepared, span);\n }\n applyEscapedErrorSpanToEvent(prepared, hint, finalScope);\n const eventProcessors = [\n ...clientEventProcessors,\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors\n ];\n const isTransaction = event.type === \"transaction\";\n const spanCountBeforeProcessing = event.spans?.length || 0;\n const result = isInternalException(hint) ? resolvedSyncPromise(prepared) : notifyEventProcessors(eventProcessors, prepared, hint, 0, (reason) => {\n if (!client) {\n return;\n }\n client.recordDroppedEvent(reason, getDataCategoryByType(event.type));\n if (isTransaction) {\n client.recordDroppedEvent(reason, \"span\", 1 + spanCountBeforeProcessing);\n }\n });\n return result.then((evt) => {\n if (!evt) {\n return null;\n }\n if (isTransaction && client) {\n const droppedSpanCount = spanCountBeforeProcessing - (evt.spans?.length || 0);\n if (droppedSpanCount > 0) {\n client.recordDroppedEvent(\"event_processor\", \"span\", droppedSpanCount);\n }\n }\n applyDebugMeta(evt);\n if (typeof normalizeDepth === \"number\" && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\nfunction applyClientOptions(event, options) {\n const { environment, release, dist, maxValueLength } = options;\n event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n if (!event.release && release) {\n event.release = release;\n }\n if (!event.dist && dist) {\n event.dist = dist;\n }\n const request = event.request;\n if (request?.url && maxValueLength) {\n request.url = truncate(request.url, maxValueLength);\n }\n if (maxValueLength) {\n event.exception?.values?.forEach((exception) => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n });\n }\n}\nfunction applyDebugIds(event, stackParser) {\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n event.exception?.values?.forEach((exception) => {\n exception.stacktrace?.frames?.forEach((frame) => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n}\nfunction applyDebugMeta(event) {\n const filenameDebugIdMap = {};\n event.exception?.values?.forEach((exception) => {\n exception.stacktrace?.frames?.forEach((frame) => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n images.push({\n type: \"sourcemap\",\n code_file: filename,\n debug_id\n });\n });\n}\nfunction applyIntegrationsMetadata(event, integrationNames) {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...event.sdk.integrations || [], ...integrationNames];\n }\n}\nfunction normalizeEvent(event, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n const normalized = {\n ...event,\n ...event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map((b) => ({\n ...b,\n ...b.data && {\n data: normalize(b.data, depth, maxBreadth)\n }\n }))\n },\n ...event.user && {\n user: normalize(event.user, depth, maxBreadth)\n },\n ...event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth)\n },\n ...event.extra && {\n extra: normalize(event.extra, depth, maxBreadth)\n }\n };\n if (event.contexts?.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n if (event.spans) {\n normalized.spans = event.spans.map((span) => {\n return {\n ...span,\n ...span.data && {\n data: normalize(span.data, depth, maxBreadth)\n }\n };\n });\n }\n if (event.contexts?.flags && normalized.contexts) {\n normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n }\n return normalized;\n}\nfunction getFinalScope(scope, captureContext) {\n if (!captureContext) {\n return scope;\n }\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\nfunction parseEventHintOrCaptureContext(hint) {\n if (!hint) {\n return void 0;\n }\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint\n };\n }\n return hint;\n}\nfunction hintIsScopeOrFunction(hint) {\n return hint instanceof Scope || typeof hint === \"function\";\n}\nconst captureContextKeys = [\n \"user\",\n \"level\",\n \"extra\",\n \"contexts\",\n \"tags\",\n \"fingerprint\",\n \"propagationContext\"\n];\nfunction hintIsScopeContext(hint) {\n return Object.keys(hint).some((key) => captureContextKeys.includes(key));\n}\n\nexport { applyClientOptions, applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { getIsolationScope, getCurrentScope, getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\nimport { debug } from './utils/debug-logger.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\nimport { getCombinedScopeData } from './utils/scopeData.js';\nimport { GLOBAL_OBJ } from './utils/worldwide.js';\n\nfunction captureException(exception, hint) {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\nfunction captureMessage(message, captureContext) {\n const level = typeof captureContext === \"string\" ? captureContext : void 0;\n const hint = typeof captureContext !== \"string\" ? { captureContext } : void 0;\n return getCurrentScope().captureMessage(message, level, hint);\n}\nfunction captureEvent(event, hint) {\n return getCurrentScope().captureEvent(event, hint);\n}\nfunction setContext(name, context) {\n getIsolationScope().setContext(name, context);\n}\nfunction setExtras(extras) {\n getIsolationScope().setExtras(extras);\n}\nfunction setExtra(key, extra) {\n getIsolationScope().setExtra(key, extra);\n}\nfunction setTags(tags) {\n getIsolationScope().setTags(tags);\n}\nfunction setTag(key, value) {\n getIsolationScope().setTag(key, value);\n}\nfunction setAttributes(attributes) {\n getIsolationScope().setAttributes(attributes);\n}\nfunction setAttribute(key, value) {\n getIsolationScope().setAttribute(key, value);\n}\nfunction setUser(user) {\n getIsolationScope().setUser(user);\n}\nfunction setConversationId(conversationId) {\n getIsolationScope().setConversationId(conversationId);\n}\nfunction lastEventId() {\n return getIsolationScope().lastEventId();\n}\nasync function flush(timeout) {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && debug.warn(\"Cannot flush events. No client defined.\");\n return Promise.resolve(false);\n}\nasync function close(timeout) {\n const scope = getCurrentScope();\n const client = scope.getClient();\n if (client) {\n const result = await client.close(timeout);\n if (scope.getClient() === client) {\n scope.setClient(void 0);\n }\n return result;\n }\n DEBUG_BUILD && debug.warn(\"Cannot flush events and disable SDK. No client defined.\");\n return Promise.resolve(false);\n}\nfunction isInitialized() {\n return !!getClient();\n}\nfunction isEnabled() {\n const client = getClient();\n return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\nfunction addEventProcessor(callback) {\n getIsolationScope().addEventProcessor(callback);\n}\nfunction startSession(context) {\n const isolationScope = getIsolationScope();\n const { user } = getCombinedScopeData(isolationScope, getCurrentScope());\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n const session = makeSession({\n user,\n ...userAgent && { userAgent },\n ...context\n });\n const currentSession = isolationScope.getSession();\n if (currentSession?.status === \"ok\") {\n updateSession(currentSession, { status: \"exited\" });\n }\n endSession();\n isolationScope.setSession(session);\n return session;\n}\nfunction endSession() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n isolationScope.setSession();\n}\nfunction _sendSessionUpdate() {\n const isolationScope = getIsolationScope();\n const client = getClient();\n const session = isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\nfunction captureSession(end = false) {\n if (end) {\n endSession();\n return;\n }\n _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setAttribute, setAttributes, setContext, setConversationId, setExtra, setExtras, setTag, setTags, setUser, startSession };\n//# sourceMappingURL=exports.js.map\n","import { makeDsn, dsnToString } from './utils/dsn.js';\n\nconst SENTRY_API_VERSION = \"7\";\nfunction getBaseApiEndpoint(dsn) {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : \"\";\n const port = dsn.port ? `:${dsn.port}` : \"\";\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : \"\"}/api/`;\n}\nfunction _getIngestEndpoint(dsn) {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\nfunction _encodedAuth(dsn, sdkInfo) {\n const params = {\n sentry_version: SENTRY_API_VERSION\n };\n if (dsn.publicKey) {\n params.sentry_key = dsn.publicKey;\n }\n if (sdkInfo) {\n params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n }\n return new URLSearchParams(params).toString();\n}\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\nfunction getReportDialogEndpoint(dsnLike, dialogOptions) {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return \"\";\n }\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === \"dsn\") {\n continue;\n }\n if (key === \"onClose\" || key === \"onError\") {\n continue;\n }\n if (key === \"user\") {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key])}`;\n }\n }\n return `${endpoint}?${encodedOptions}`;\n}\n\nexport { SENTRY_API_VERSION, getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { dsnToString } from '../utils/dsn.js';\nimport { createEnvelope } from '../utils/envelope.js';\nimport { isBrowser } from '../utils/isBrowser.js';\n\nfunction createLogContainerEnvelopeItem(items, inferUserData) {\n const inferSetting = inferUserData ? \"auto\" : \"never\";\n return [\n {\n type: \"log\",\n item_count: items.length,\n content_type: \"application/vnd.sentry.items.log+json\"\n },\n {\n version: 2,\n ...isBrowser() && {\n ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting }\n },\n items\n }\n ];\n}\nfunction createLogEnvelope(logs, metadata, tunnel, dsn, inferUserData) {\n const headers = {};\n if (metadata?.sdk) {\n headers.sdk = {\n name: metadata.sdk.name,\n version: metadata.sdk.version\n };\n }\n if (!!tunnel && !!dsn) {\n headers.dsn = dsnToString(dsn);\n }\n return createEnvelope(headers, [createLogContainerEnvelopeItem(logs, inferUserData)]);\n}\n\nexport { createLogContainerEnvelopeItem, createLogEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { serializeAttributes } from '../attributes.js';\nimport { getGlobalSingleton } from '../carrier.js';\nimport { getClient, getIsolationScope, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { debug, consoleSandbox } from '../utils/debug-logger.js';\nimport { isParameterizedString } from '../utils/is.js';\nimport { safeCallback, CALLBACK_ERROR } from '../utils/safeCallback.js';\nimport { getCombinedScopeData } from '../utils/scopeData.js';\nimport { getActiveSpan } from '../utils/spanUtils.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { getSequenceAttribute } from '../utils/timestampSequence.js';\nimport { _getTraceInfoFromScope } from '../utils/trace-info.js';\nimport { SEVERITY_TEXT_TO_SEVERITY_NUMBER } from './constants.js';\nimport { createLogEnvelope } from './envelope.js';\n\nconst MAX_LOG_BUFFER_SIZE = 100;\nfunction setLogAttribute(logAttributes, key, value, setEvenIfPresent = true) {\n if (value && (!logAttributes[key] || setEvenIfPresent)) {\n logAttributes[key] = value;\n }\n}\nfunction _INTERNAL_captureSerializedLog(client, serializedLog) {\n const bufferMap = _getBufferMap();\n const logBuffer = _INTERNAL_getLogBuffer(client);\n if (logBuffer === void 0) {\n bufferMap.set(client, [serializedLog]);\n } else {\n if (logBuffer.length >= MAX_LOG_BUFFER_SIZE) {\n _INTERNAL_flushLogsBuffer(client, logBuffer);\n bufferMap.set(client, [serializedLog]);\n } else {\n bufferMap.set(client, [...logBuffer, serializedLog]);\n }\n }\n}\nfunction _INTERNAL_captureLog(beforeLog, currentScope = getCurrentScope(), captureSerializedLog = _INTERNAL_captureSerializedLog) {\n const client = currentScope?.getClient() ?? getClient();\n if (!client) {\n DEBUG_BUILD && debug.warn(\"No client available to capture log.\");\n return;\n }\n const { release, environment, beforeSendLog } = client.getOptions();\n const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n const processedLogAttributes = {\n ...beforeLog.attributes\n };\n const {\n user: { id, email, username },\n attributes: scopeAttributes\n } = getCombinedScopeData(getIsolationScope(), currentScope);\n setLogAttribute(processedLogAttributes, \"user.id\", id, false);\n setLogAttribute(processedLogAttributes, \"user.email\", email, false);\n setLogAttribute(processedLogAttributes, \"user.name\", username, false);\n setLogAttribute(processedLogAttributes, \"sentry.release\", release);\n setLogAttribute(processedLogAttributes, \"sentry.environment\", environment);\n const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n setLogAttribute(processedLogAttributes, \"sentry.sdk.name\", name);\n setLogAttribute(processedLogAttributes, \"sentry.sdk.version\", version);\n const replay = client.getIntegrationByName(\"Replay\");\n const replayId = replay?.getReplayId(true);\n setLogAttribute(processedLogAttributes, \"sentry.replay_id\", replayId);\n if (replayId && replay?.getRecordingMode() === \"buffer\") {\n setLogAttribute(processedLogAttributes, \"sentry._internal.replay_is_buffering\", true);\n }\n const beforeLogMessage = beforeLog.message;\n if (isParameterizedString(beforeLogMessage)) {\n const { __sentry_template_string__, __sentry_template_values__ = [] } = beforeLogMessage;\n if (__sentry_template_values__?.length) {\n processedLogAttributes[\"sentry.message.template\"] = __sentry_template_string__;\n }\n __sentry_template_values__.forEach((param, index) => {\n processedLogAttributes[`sentry.message.parameter.${index}`] = param;\n });\n }\n const span = getActiveSpan(currentScope);\n setLogAttribute(processedLogAttributes, \"sentry.trace.parent_span_id\", span?.spanContext().spanId);\n const processedLog = { ...beforeLog, attributes: processedLogAttributes };\n client.emit(\"beforeCaptureLog\", processedLog);\n const log = beforeSendLog ? safeCallback(\n DEBUG_BUILD ? \"The `beforeSendLog` callback threw an error, dropping the log:\" : \"\",\n // We need to wrap this in `consoleSandbox` to avoid recursive calls to `beforeSendLog`\n () => consoleSandbox(() => beforeSendLog(processedLog)),\n () => CALLBACK_ERROR\n ) : processedLog;\n if (log === CALLBACK_ERROR) {\n client.recordDroppedEvent(\"callback_error\", \"log_item\", 1);\n return;\n }\n if (!log) {\n client.recordDroppedEvent(\"before_send\", \"log_item\", 1);\n DEBUG_BUILD && debug.warn(\"beforeSendLog returned null, log will not be captured.\");\n return;\n }\n const { level, message, attributes: logAttributes = {}, severityNumber } = log;\n const timestamp = timestampInSeconds();\n const sequenceAttr = getSequenceAttribute(timestamp);\n const serializedLog = {\n timestamp,\n level,\n body: _removeLoneSurrogates(String(message)),\n trace_id: traceContext?.trace_id,\n severity_number: severityNumber ?? SEVERITY_TEXT_TO_SEVERITY_NUMBER[level],\n attributes: sanitizeLogAttributes({\n ...serializeAttributes(scopeAttributes),\n ...serializeAttributes(logAttributes, true),\n [sequenceAttr.key]: sequenceAttr.value\n })\n };\n captureSerializedLog(client, serializedLog);\n client.emit(\"afterCaptureLog\", log);\n}\nfunction _INTERNAL_flushLogsBuffer(client, maybeLogBuffer) {\n const logBuffer = maybeLogBuffer ?? _INTERNAL_getLogBuffer(client) ?? [];\n if (logBuffer.length === 0) {\n return;\n }\n const clientOptions = client.getOptions();\n const envelope = createLogEnvelope(\n logBuffer,\n clientOptions._metadata,\n clientOptions.tunnel,\n client.getDsn(),\n client.getDataCollectionOptions().userInfo\n );\n _getBufferMap().set(client, []);\n client.emit(\"flushLogs\");\n client.sendEnvelope(envelope);\n}\nfunction _INTERNAL_getLogBuffer(client) {\n return _getBufferMap().get(client);\n}\nfunction _getBufferMap() {\n return getGlobalSingleton(\"clientToLogBufferMap\", () => /* @__PURE__ */ new WeakMap());\n}\nfunction sanitizeLogAttributes(attributes) {\n const sanitized = {};\n for (const [key, attr] of Object.entries(attributes)) {\n const sanitizedKey = _removeLoneSurrogates(key);\n if (attr.type === \"string\") {\n sanitized[sanitizedKey] = { ...attr, value: _removeLoneSurrogates(attr.value) };\n } else {\n sanitized[sanitizedKey] = attr;\n }\n }\n return sanitized;\n}\nfunction _removeLoneSurrogates(str) {\n const strObj = Object(str);\n const isWellFormed = strObj[\"isWellFormed\"];\n const toWellFormed = strObj[\"toWellFormed\"];\n if (typeof isWellFormed === \"function\" && typeof toWellFormed === \"function\") {\n return isWellFormed.call(str) ? str : toWellFormed.call(str);\n }\n return str;\n}\n\nexport { _INTERNAL_captureLog, _INTERNAL_captureSerializedLog, _INTERNAL_flushLogsBuffer, _INTERNAL_getLogBuffer, _removeLoneSurrogates };\n//# sourceMappingURL=internal.js.map\n","import { dsnToString } from '../utils/dsn.js';\nimport { createEnvelope } from '../utils/envelope.js';\nimport { isBrowser } from '../utils/isBrowser.js';\n\nfunction createMetricContainerEnvelopeItem(items, inferUserData) {\n const inferSetting = inferUserData ? \"auto\" : \"never\";\n return [\n {\n type: \"trace_metric\",\n item_count: items.length,\n content_type: \"application/vnd.sentry.items.trace-metric+json\"\n },\n {\n version: 2,\n ...isBrowser() && {\n ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting }\n },\n items\n }\n ];\n}\nfunction createMetricEnvelope(metrics, metadata, tunnel, dsn, inferUserData) {\n const headers = {};\n if (metadata?.sdk) {\n headers.sdk = {\n name: metadata.sdk.name,\n version: metadata.sdk.version\n };\n }\n if (!!tunnel && !!dsn) {\n headers.dsn = dsnToString(dsn);\n }\n return createEnvelope(headers, [createMetricContainerEnvelopeItem(metrics, inferUserData)]);\n}\n\nexport { createMetricContainerEnvelopeItem, createMetricEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { serializeAttributes } from '../attributes.js';\nimport { getGlobalSingleton } from '../carrier.js';\nimport { getCurrentScope, getClient, getIsolationScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { safeCallback, CALLBACK_ERROR } from '../utils/safeCallback.js';\nimport { getCombinedScopeData } from '../utils/scopeData.js';\nimport { getActiveSpan } from '../utils/spanUtils.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { getSequenceAttribute } from '../utils/timestampSequence.js';\nimport { _getTraceInfoFromScope } from '../utils/trace-info.js';\nimport { createMetricEnvelope } from './envelope.js';\n\nconst MAX_METRIC_BUFFER_SIZE = 1e3;\nfunction setMetricAttribute(metricAttributes, key, value, setEvenIfPresent = true) {\n if (value && (setEvenIfPresent || !(key in metricAttributes))) {\n metricAttributes[key] = value;\n }\n}\nfunction _INTERNAL_captureSerializedMetric(client, serializedMetric) {\n const bufferMap = _getBufferMap();\n const metricBuffer = _INTERNAL_getMetricBuffer(client);\n if (metricBuffer === void 0) {\n bufferMap.set(client, [serializedMetric]);\n } else {\n if (metricBuffer.length >= MAX_METRIC_BUFFER_SIZE) {\n _INTERNAL_flushMetricsBuffer(client, metricBuffer);\n bufferMap.set(client, [serializedMetric]);\n } else {\n bufferMap.set(client, [...metricBuffer, serializedMetric]);\n }\n }\n}\nfunction _enrichMetricAttributes(beforeMetric, client, user) {\n const { release, environment } = client.getOptions();\n const processedMetricAttributes = {\n ...beforeMetric.attributes\n };\n setMetricAttribute(processedMetricAttributes, \"user.id\", user.id, false);\n setMetricAttribute(processedMetricAttributes, \"user.email\", user.email, false);\n setMetricAttribute(processedMetricAttributes, \"user.name\", user.username, false);\n setMetricAttribute(processedMetricAttributes, \"sentry.release\", release);\n setMetricAttribute(processedMetricAttributes, \"sentry.environment\", environment);\n const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n setMetricAttribute(processedMetricAttributes, \"sentry.sdk.name\", name);\n setMetricAttribute(processedMetricAttributes, \"sentry.sdk.version\", version);\n const replay = client.getIntegrationByName(\"Replay\");\n const replayId = replay?.getReplayId(true);\n setMetricAttribute(processedMetricAttributes, \"sentry.replay_id\", replayId);\n if (replayId && replay?.getRecordingMode() === \"buffer\") {\n setMetricAttribute(processedMetricAttributes, \"sentry._internal.replay_is_buffering\", true);\n }\n return {\n ...beforeMetric,\n attributes: processedMetricAttributes\n };\n}\nfunction _buildSerializedMetric(metric, client, currentScope, scopeAttributes) {\n const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n const span = getActiveSpan(currentScope);\n const traceId = span ? span.spanContext().traceId : traceContext?.trace_id;\n const spanId = span ? span.spanContext().spanId : void 0;\n const timestamp = timestampInSeconds();\n const sequenceAttr = getSequenceAttribute(timestamp);\n return {\n timestamp,\n trace_id: traceId ?? \"\",\n span_id: spanId,\n name: metric.name,\n type: metric.type,\n unit: metric.unit,\n value: metric.value,\n attributes: {\n ...serializeAttributes(scopeAttributes),\n ...serializeAttributes(metric.attributes, \"skip-undefined\"),\n [sequenceAttr.key]: sequenceAttr.value\n }\n };\n}\nfunction _INTERNAL_captureMetric(beforeMetric, options) {\n const currentScope = options?.scope ?? getCurrentScope();\n const captureSerializedMetric = options?.captureSerializedMetric ?? _INTERNAL_captureSerializedMetric;\n const client = currentScope?.getClient() ?? getClient();\n if (!client) {\n DEBUG_BUILD && debug.warn(\"No client available to capture metric.\");\n return;\n }\n const { beforeSendMetric } = client.getOptions();\n const { user, attributes: scopeAttributes } = getCombinedScopeData(getIsolationScope(), currentScope);\n const enrichedMetric = _enrichMetricAttributes(beforeMetric, client, user);\n client.emit(\"processMetric\", enrichedMetric);\n const processedMetric = beforeSendMetric ? safeCallback(\n DEBUG_BUILD ? \"The `beforeSendMetric` callback threw an error, dropping the metric:\" : \"\",\n () => beforeSendMetric(enrichedMetric),\n () => CALLBACK_ERROR\n ) : enrichedMetric;\n if (processedMetric === CALLBACK_ERROR) {\n client.recordDroppedEvent(\"callback_error\", \"metric\", 1);\n return;\n }\n if (!processedMetric) {\n client.recordDroppedEvent(\"before_send\", \"metric\", 1);\n DEBUG_BUILD && debug.log(\"`beforeSendMetric` returned `null`, will not send metric.\");\n return;\n }\n const serializedMetric = _buildSerializedMetric(processedMetric, client, currentScope, scopeAttributes);\n DEBUG_BUILD && debug.log(\"[Metric]\", serializedMetric);\n captureSerializedMetric(client, serializedMetric);\n client.emit(\"afterCaptureMetric\", processedMetric);\n}\nfunction _INTERNAL_flushMetricsBuffer(client, maybeMetricBuffer) {\n const metricBuffer = maybeMetricBuffer ?? _INTERNAL_getMetricBuffer(client) ?? [];\n if (metricBuffer.length === 0) {\n return;\n }\n const clientOptions = client.getOptions();\n const envelope = createMetricEnvelope(\n metricBuffer,\n clientOptions._metadata,\n clientOptions.tunnel,\n client.getDsn(),\n client.getDataCollectionOptions().userInfo\n );\n _getBufferMap().set(client, []);\n client.emit(\"flushMetrics\");\n client.sendEnvelope(envelope);\n}\nfunction _INTERNAL_getMetricBuffer(client) {\n return _getBufferMap().get(client);\n}\nfunction _getBufferMap() {\n return getGlobalSingleton(\"clientToMetricBufferMap\", () => /* @__PURE__ */ new WeakMap());\n}\n\nexport { _INTERNAL_captureMetric, _INTERNAL_captureSerializedMetric, _INTERNAL_flushMetricsBuffer, _INTERNAL_getMetricBuffer };\n//# sourceMappingURL=internal.js.map\n","import { createSpanContainerItem } from './envelope.js';\nimport { hasSpanStreamingEnabled } from './hasSpanStreamingEnabled.js';\nimport { spanJsonToSerializedStreamedSpan } from './spanJsonToStreamedSpan.js';\n\nfunction extractGenAiSpansFromEvent(event, client) {\n if (event.type !== \"transaction\" || !event.spans?.length || !event.sdkProcessingMetadata?.hasGenAiSpans || hasSpanStreamingEnabled(client)) {\n return void 0;\n }\n const genAiSpans = [];\n const remainingSpans = [];\n for (const span of event.spans) {\n if (span.op?.startsWith(\"gen_ai.\")) {\n genAiSpans.push(spanJsonToSerializedStreamedSpan(span));\n } else {\n remainingSpans.push(span);\n }\n }\n if (genAiSpans.length === 0) {\n return void 0;\n }\n event.spans = remainingSpans;\n return createSpanContainerItem(genAiSpans, client);\n}\n\nexport { extractGenAiSpansFromEvent };\n//# sourceMappingURL=extractGenAiSpans.js.map\n","import { resolvedSyncPromise, rejectedSyncPromise } from './syncpromise.js';\nimport { safeUnref } from './timer.js';\n\nconst SENTRY_BUFFER_FULL_ERROR = /* @__PURE__ */ Symbol.for(\"SentryBufferFullError\");\nfunction makePromiseBuffer(limit = 100) {\n const buffer = /* @__PURE__ */ new Set();\n function isReady() {\n return buffer.size < limit;\n }\n function remove(task) {\n buffer.delete(task);\n }\n function add(taskProducer) {\n if (!isReady()) {\n return rejectedSyncPromise(SENTRY_BUFFER_FULL_ERROR);\n }\n const task = taskProducer();\n buffer.add(task);\n void task.then(\n () => remove(task),\n () => remove(task)\n );\n return task;\n }\n function drain(timeout) {\n if (!buffer.size) {\n return resolvedSyncPromise(true);\n }\n const drainPromise = Promise.allSettled(Array.from(buffer)).then(() => true);\n if (!timeout) {\n return drainPromise;\n }\n const promises = [\n drainPromise,\n new Promise((resolve) => safeUnref(setTimeout(() => resolve(false), timeout)))\n ];\n return Promise.race(promises);\n }\n return {\n get $() {\n return Array.from(buffer);\n },\n add,\n drain\n };\n}\n\nexport { SENTRY_BUFFER_FULL_ERROR, makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","import { safeDateNow } from './randomSafeContext.js';\n\nconst DEFAULT_RETRY_AFTER = 60 * 1e3;\nfunction parseRetryAfterHeader(header, now = safeDateNow()) {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1e3;\n }\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n return DEFAULT_RETRY_AFTER;\n}\nfunction disabledUntil(limits, dataCategory) {\n return limits[dataCategory] || limits.all || 0;\n}\nfunction isRateLimited(limits, dataCategory, now = safeDateNow()) {\n return disabledUntil(limits, dataCategory) > now;\n}\nfunction updateRateLimits(limits, { statusCode, headers }, now = safeDateNow()) {\n const updatedRateLimits = {\n ...limits\n };\n const rateLimitHeader = headers?.[\"x-sentry-rate-limits\"];\n const retryAfterHeader = headers?.[\"retry-after\"];\n if (rateLimitHeader) {\n for (const limit of rateLimitHeader.trim().split(\",\")) {\n const [retryAfter, categories, , , namespaces] = limit.split(\":\", 5);\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1e3;\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(\";\")) {\n if (category === \"metric_bucket\") {\n if (!namespaces || namespaces.split(\";\").includes(\"custom\")) {\n updatedRateLimits[category] = now + delay;\n }\n } else {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1e3;\n }\n return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { forEachEnvelopeItem, envelopeItemTypeToDataCategory, createEnvelope, serializeEnvelope, envelopeContainsItemType } from '../utils/envelope.js';\nimport { makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from '../utils/promisebuffer.js';\nimport { isRateLimited, updateRateLimits } from '../utils/ratelimit.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\nfunction createTransport(options, makeRequest, buffer = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE\n)) {\n let rateLimits = {};\n const flush = (timeout) => buffer.drain(timeout);\n function recordItemLoss(reason, [headers, payload], type) {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (type === \"transaction\") {\n options.recordDroppedEvent(reason, \"span\", (payload.spans?.length ?? 0) + 1);\n }\n options.recordDroppedEvent(reason, dataCategory, typeof headers.item_count === \"number\" ? headers.item_count : 1);\n }\n function send(envelope) {\n const filteredEnvelopeItems = [];\n forEachEnvelopeItem(envelope, (item, type) => {\n if (isRateLimited(rateLimits, envelopeItemTypeToDataCategory(type))) {\n recordItemLoss(\"ratelimit_backoff\", item, type);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n if (filteredEnvelopeItems.length === 0) {\n return Promise.resolve({});\n }\n const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems);\n const recordEnvelopeLoss = (reason) => {\n if (envelopeContainsItemType(filteredEnvelope, [\"client_report\"])) {\n DEBUG_BUILD && debug.warn(`Dropping client report. Will not send outcomes (reason: ${reason}).`);\n return;\n }\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n recordItemLoss(reason, item, type);\n });\n };\n const requestTask = () => makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n (response) => {\n if (response.statusCode === 413) {\n DEBUG_BUILD && debug.error(\n \"Sentry responded with status code 413. Envelope was discarded due to exceeding size limits.\"\n );\n recordEnvelopeLoss(\"send_error\");\n return response;\n }\n if (DEBUG_BUILD && response.statusCode !== void 0 && (response.statusCode < 200 || response.statusCode >= 300)) {\n debug.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n (error) => {\n recordEnvelopeLoss(\"network_error\");\n DEBUG_BUILD && debug.error(\"Encountered error running transport request:\", error);\n throw error;\n }\n );\n return buffer.add(requestTask).then(\n (result) => result,\n (error) => {\n if (error === SENTRY_BUFFER_FULL_ERROR) {\n DEBUG_BUILD && debug.error(\"Skipped sending event because buffer is full.\");\n recordEnvelopeLoss(\"queue_overflow\");\n return Promise.resolve({});\n } else {\n throw error;\n }\n }\n );\n }\n return {\n send,\n flush\n };\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\nfunction createClientReportEnvelope(discarded_events, dsn, timestamp) {\n const clientReportItem = [\n { type: \"client_report\" },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events\n }\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","import { SENTRY_EXCLUSIVE_TIME, SENTRY_PROFILE_ID } from '@sentry/conventions/attributes';\n\nfunction convertTransactionEventToSpanJson(event) {\n const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};\n return {\n data: data ?? {},\n description: event.transaction,\n op,\n parent_span_id,\n span_id: span_id ?? \"\",\n start_timestamp: event.start_timestamp ?? 0,\n status: status ?? \"ok\",\n timestamp: event.timestamp,\n trace_id: trace_id ?? \"\",\n origin,\n profile_id: data?.[SENTRY_PROFILE_ID],\n exclusive_time: data?.[SENTRY_EXCLUSIVE_TIME],\n measurements: event.measurements,\n is_segment: true\n };\n}\nfunction convertSpanJsonToTransactionEvent(span) {\n return {\n type: \"transaction\",\n timestamp: span.timestamp,\n start_timestamp: span.start_timestamp,\n transaction: span.description,\n contexts: {\n trace: {\n trace_id: span.trace_id,\n span_id: span.span_id,\n parent_span_id: span.parent_span_id,\n op: span.op,\n status: span.status,\n origin: span.origin,\n data: {\n ...span.data,\n ...span.profile_id && { [SENTRY_PROFILE_ID]: span.profile_id },\n ...span.exclusive_time && { [SENTRY_EXCLUSIVE_TIME]: span.exclusive_time }\n }\n }\n },\n measurements: span.measurements\n };\n}\n\nexport { convertSpanJsonToTransactionEvent, convertTransactionEventToSpanJson };\n//# sourceMappingURL=transactionEvent.js.map\n","import { consoleSandbox } from './debug-logger.js';\n\nfunction maybeWarnAboutIgnoredTransactionOptions(options) {\n if (options.traceLifecycle !== \"stream\" || // oxlint-disable-next-line typescript/no-deprecated\n !(options.beforeSendTransaction || options.ignoreTransactions?.length)) {\n return;\n }\n consoleSandbox(() => {\n console.warn(\n \"[Sentry] `beforeSendTransaction` and `ignoreTransactions` are ignored with `traceLifecycle: 'stream'` (enabled by default). Use `beforeSendSpan` and `ignoreSpans` instead, or set `traceLifecycle: 'static'`.\"\n );\n });\n}\n\nexport { maybeWarnAboutIgnoredTransactionOptions };\n//# sourceMappingURL=warnAboutIgnoredTransactionOptions.js.map\n","const DEFAULTS = {\n userInfo: true,\n cookies: true,\n httpHeaders: { request: true, response: true },\n httpBodies: [\"incomingRequest\", \"outgoingRequest\", \"incomingResponse\", \"outgoingResponse\"],\n urlQueryParams: true,\n graphQL: { document: true, variables: true },\n genAI: { inputs: true, outputs: true },\n databaseQueryData: true,\n queues: true,\n stackFrameVariables: true,\n frameContextLines: 5\n};\nfunction isCollectBehavior(value) {\n return typeof value === \"boolean\" || \"allow\" in value || \"deny\" in value;\n}\nfunction resolveHttpHeaders(httpHeaders) {\n if (httpHeaders === void 0) {\n return { ...DEFAULTS.httpHeaders };\n }\n if (isCollectBehavior(httpHeaders)) {\n return { request: httpHeaders, response: httpHeaders };\n }\n return {\n request: httpHeaders.request ?? DEFAULTS.httpHeaders.request,\n response: httpHeaders.response ?? DEFAULTS.httpHeaders.response\n };\n}\nfunction resolveDataCollectionOptions(options) {\n const dc = options.dataCollection ?? {};\n return {\n userInfo: dc.userInfo ?? DEFAULTS.userInfo,\n cookies: dc.cookies ?? DEFAULTS.cookies,\n httpHeaders: resolveHttpHeaders(dc.httpHeaders),\n httpBodies: dc.httpBodies ?? DEFAULTS.httpBodies,\n urlQueryParams: dc.urlQueryParams ?? DEFAULTS.urlQueryParams,\n graphQL: {\n document: dc.graphQL?.document ?? DEFAULTS.graphQL.document,\n variables: dc.graphQL?.variables ?? DEFAULTS.graphQL.variables\n },\n genAI: {\n inputs: dc.genAI?.inputs ?? DEFAULTS.genAI.inputs,\n outputs: dc.genAI?.outputs ?? DEFAULTS.genAI.outputs\n },\n databaseQueryData: dc.databaseQueryData ?? DEFAULTS.databaseQueryData,\n queues: dc.queues ?? DEFAULTS.queues,\n stackFrameVariables: dc.stackFrameVariables ?? DEFAULTS.stackFrameVariables,\n frameContextLines: dc.frameContextLines ?? DEFAULTS.frameContextLines\n };\n}\n\nexport { resolveDataCollectionOptions };\n//# sourceMappingURL=resolveDataCollectionOptions.js.map\n","import { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getTraceContextFromScope, getCurrentScope, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { _INTERNAL_flushLogsBuffer } from './logs/internal.js';\nimport { _INTERNAL_flushMetricsBuffer } from './metrics/internal.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromScope } from './tracing/dynamicSamplingContext.js';\nimport { isStaticBeforeSendSpanCallback, applyBeforeSendSpanCallback } from './tracing/spans/beforeSendSpan.js';\nimport { extractGenAiSpansFromEvent } from './tracing/spans/extractGenAiSpans.js';\nimport { DEFAULT_TRANSPORT_BUFFER_SIZE } from './transports/base.js';\nimport { createClientReportEnvelope } from './utils/clientreport.js';\nimport { debug, consoleSandbox } from './utils/debug-logger.js';\nimport { makeDsn, dsnToString } from './utils/dsn.js';\nimport { getDataCategoryByType, addItemToEnvelope, createAttachmentEnvelopeItem } from './utils/envelope.js';\nimport { isInternalException, getPossibleEventMessages } from './utils/eventUtils.js';\nimport { isPlainObject, isParameterizedString, isPrimitive, isObjectLike } from './utils/is.js';\nimport { merge } from './utils/merge.js';\nimport { uuid4, checkOrSetAlreadyCaught } from './utils/misc.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\nimport { makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from './utils/promisebuffer.js';\nimport { safeMathRandom } from './utils/randomSafeContext.js';\nimport { safeCallback } from './utils/safeCallback.js';\nimport { shouldIgnoreSpan, reparentChildSpans } from './utils/should-ignore-span.js';\nimport { safeUnref } from './utils/timer.js';\nimport { convertTransactionEventToSpanJson, convertSpanJsonToTransactionEvent } from './utils/transactionEvent.js';\nimport { maybeWarnAboutIgnoredTransactionOptions } from './utils/warnAboutIgnoredTransactionOptions.js';\nimport { resolveDataCollectionOptions } from './utils/data-collection/resolveDataCollectionOptions.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\nconst MISSING_RELEASE_FOR_SESSION_ERROR = \"Discarded session because of missing or non-string release\";\nconst INTERNAL_ERROR_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryInternalError\");\nconst DO_NOT_SEND_EVENT_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryDoNotSendEventError\");\nconst DEFAULT_FLUSH_INTERVAL = 5e3;\nconst CLOSED_CLIENT_SYMBOL = /* @__PURE__ */ Symbol.for(\"SentryClosedClient\");\nfunction isClientClosed(client) {\n return CLOSED_CLIENT_SYMBOL in client;\n}\nfunction _makeInternalError(message) {\n return {\n message,\n [INTERNAL_ERROR_SYMBOL]: true\n };\n}\nfunction _makeDoNotSendEventError(message) {\n return {\n message,\n [DO_NOT_SEND_EVENT_SYMBOL]: true\n };\n}\nfunction _isInternalError(error) {\n return isObjectLike(error) && INTERNAL_ERROR_SYMBOL in error;\n}\nfunction _isDoNotSendEventError(error) {\n return isObjectLike(error) && DO_NOT_SEND_EVENT_SYMBOL in error;\n}\nfunction setupWeightBasedFlushing(client, afterCaptureHook, flushHook, estimateSizeFn, flushFn) {\n let weight = 0;\n let flushTimeout;\n let isTimerActive = false;\n client.on(flushHook, () => {\n weight = 0;\n clearTimeout(flushTimeout);\n isTimerActive = false;\n });\n client.on(afterCaptureHook, (item) => {\n weight += estimateSizeFn(item);\n if (weight >= 8e5) {\n flushFn(client);\n } else if (!isTimerActive) {\n const flushInterval = client.getOptions()._flushInterval ?? DEFAULT_FLUSH_INTERVAL;\n if (flushInterval > 0) {\n isTimerActive = true;\n flushTimeout = safeUnref(\n setTimeout(() => {\n flushFn(client);\n }, flushInterval)\n );\n }\n }\n });\n client.on(\"flush\", () => {\n flushFn(client);\n });\n}\nclass Client {\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n constructor(options) {\n this._options = {\n attachStacktrace: true,\n ...options,\n traceLifecycle: options.traceLifecycle === \"static\" ? \"static\" : \"stream\"\n };\n this._integrations = {};\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n this._promiseBuffer = makePromiseBuffer(options.transportOptions?.bufferSize ?? DEFAULT_TRANSPORT_BUFFER_SIZE);\n this._dataCollection = resolveDataCollectionOptions(options);\n this._unhandledSessionStatus = \"crashed\";\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && debug.warn(\"No DSN provided, client will not send events.\");\n }\n const { beforeSendSpan, traceLifecycle } = this._options;\n if (DEBUG_BUILD && beforeSendSpan && isStaticBeforeSendSpanCallback(beforeSendSpan) !== (traceLifecycle === \"static\")) {\n consoleSandbox(() => {\n console.warn(\n `Ignoring \\`beforeSendSpan\\`: ${traceLifecycle === \"static\" ? \"wrap it with\" : \"remove\"} \\`Sentry.withStaticSpan\\` to use it with \\`traceLifecycle: \"${traceLifecycle}\"\\`.`\n );\n });\n }\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(\n this._dsn,\n options.tunnel,\n options._metadata ? options._metadata.sdk : void 0\n );\n this._transport = options.transport({\n tunnel: this._options.tunnel,\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url\n });\n }\n setupWeightBasedFlushing(this, \"afterCaptureLog\", \"flushLogs\", estimateLogSizeInBytes, _INTERNAL_flushLogsBuffer);\n setupWeightBasedFlushing(\n this,\n \"afterCaptureMetric\",\n \"flushMetrics\",\n estimateMetricSizeInBytes,\n _INTERNAL_flushMetricsBuffer\n );\n }\n /**\n * Captures an exception event and sends it to Sentry.\n *\n * Unlike `captureException` exported from every SDK, this method requires that you pass it the current scope.\n */\n captureException(exception, hint, scope) {\n const eventId = uuid4();\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n const hintWithEventId = {\n event_id: eventId,\n ...hint\n };\n this._process(\n () => this.eventFromException(exception, hintWithEventId).then((event) => this._captureEvent(event, hintWithEventId, scope)).then((res) => res),\n \"error\"\n );\n return hintWithEventId.event_id;\n }\n /**\n * Captures a message event and sends it to Sentry.\n *\n * Unlike `captureMessage` exported from every SDK, this method requires that you pass it the current scope.\n */\n captureMessage(message, level, hint, currentScope) {\n const hintWithEventId = {\n event_id: uuid4(),\n ...hint\n };\n const eventMessage = isParameterizedString(message) ? message : String(message);\n const isMessage = isPrimitive(message);\n const promisedEvent = isMessage ? this.eventFromMessage(eventMessage, level, hintWithEventId) : this.eventFromException(message, hintWithEventId);\n this._process(\n () => promisedEvent.then((event) => this._captureEvent(event, hintWithEventId, currentScope)),\n isMessage ? \"unknown\" : \"error\"\n );\n return hintWithEventId.event_id;\n }\n /**\n * Captures a manually created event and sends it to Sentry.\n *\n * Unlike `captureEvent` exported from every SDK, this method requires that you pass it the current scope.\n */\n captureEvent(event, hint, currentScope) {\n const eventId = uuid4();\n if (hint?.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n const hintWithEventId = {\n event_id: eventId,\n ...hint\n };\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n const dataCategory = getDataCategoryByType(event.type);\n this._process(\n () => this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope),\n dataCategory\n );\n return hintWithEventId.event_id;\n }\n /**\n * Captures a session.\n */\n captureSession(session) {\n this.sendSession(session);\n updateSession(session, { init: false });\n }\n /**\n * Get the current Dsn.\n */\n getDsn() {\n return this._dsn;\n }\n /**\n * Get the current options.\n */\n getOptions() {\n return this._options;\n }\n /**\n * Get the resolved data collection configuration.\n */\n getDataCollectionOptions() {\n return this._dataCollection;\n }\n /**\n * Get the SDK metadata.\n * @see SdkMetadata\n */\n getSdkMetadata() {\n return this._options._metadata;\n }\n /**\n * Returns the transport that is used by the client.\n * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n */\n getTransport() {\n return this._transport;\n }\n /**\n * Wait for all events to be sent or the timeout to expire, whichever comes first.\n *\n * @param timeout Maximum time in ms the client should wait for events to be flushed. Omitting this parameter will\n * cause the client to wait until all events are sent before resolving the promise.\n * @returns A promise that will resolve with `true` if all events are sent before the timeout, or `false` if there are\n * still events in the queue when the timeout is reached.\n */\n // @ts-expect-error - PromiseLike is a subset of Promise\n async flush(timeout) {\n const transport = this._transport;\n this.emit(\"flush\");\n if (!transport) {\n return true;\n }\n const clientFinished = await this._isClientDoneProcessing(timeout);\n const transportFlushed = await transport.flush(timeout);\n return clientFinished && transportFlushed;\n }\n /**\n * Flush the event queue and set the client to `enabled = false`. See {@link Client.flush}.\n *\n * @param {number} timeout Maximum time in ms the client should wait before shutting down. Omitting this parameter will cause\n * the client to wait until all events are sent before disabling itself.\n * @returns {Promise<boolean>} A promise which resolves to `true` if the flush completes successfully before the timeout, or `false` if\n * it doesn't.\n */\n // @ts-expect-error - PromiseLike is a subset of Promise\n async close(timeout) {\n Object.defineProperty(this, CLOSED_CLIENT_SYMBOL, { value: true });\n const result = await this.flush(timeout);\n this.getOptions().enabled = false;\n this.emit(\"close\");\n return result;\n }\n /**\n * Get all installed event processors.\n */\n getEventProcessors() {\n return this._eventProcessors;\n }\n /**\n * Adds an event processor that applies to any event processed by this client.\n */\n addEventProcessor(eventProcessor) {\n this._eventProcessors.push(eventProcessor);\n }\n /**\n * Initialize this client.\n * Call this after the client was set on a scope.\n */\n init() {\n if (this._isEnabled() || // Force integrations to be setup even if no DSN was set when we have\n // Spotlight enabled. This is particularly important for browser as we\n // don't support the `spotlight` option there and rely on the users\n // adding the `spotlightBrowserIntegration()` to their integrations which\n // wouldn't get initialized with the check below when there's no DSN set.\n this._options.integrations.some(({ name }) => name.startsWith(\"Spotlight\"))) {\n this._setupIntegrations();\n maybeWarnAboutIgnoredTransactionOptions(this._options);\n }\n }\n /**\n * Gets an installed integration by its name.\n *\n * @returns {Integration|undefined} The installed integration or `undefined` if no integration with that `name` was installed.\n */\n getIntegrationByName(integrationName) {\n return this._integrations[integrationName];\n }\n /**\n * Returns the names of all installed integrations.\n */\n getIntegrationNames() {\n return Object.keys(this._integrations);\n }\n /**\n * Add an integration to the client.\n * This can be used to e.g. lazy load integrations.\n * In most cases, this should not be necessary,\n * and you're better off just passing the integrations via `integrations: []` at initialization time.\n * However, if you find the need to conditionally load & add an integration, you can use `addIntegration` to do so.\n */\n addIntegration(integration) {\n const isAlreadyInstalled = this._integrations[integration.name];\n if (!isAlreadyInstalled && integration.beforeSetup) {\n integration.beforeSetup(this);\n }\n setupIntegration(this, integration, this._integrations);\n if (!isAlreadyInstalled) {\n afterSetupIntegrations(this, [integration]);\n }\n }\n /**\n * Send a fully prepared event to Sentry.\n */\n sendEvent(event, hint = {}) {\n this.emit(\"beforeSendEvent\", event, hint);\n const genAiSpanItem = extractGenAiSpansFromEvent(event, this);\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n if (!isInternalException(hint)) {\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n }\n }\n if (genAiSpanItem) {\n env = addItemToEnvelope(env, genAiSpanItem);\n }\n this.sendEnvelope(env).then((sendResponse) => this.emit(\"afterSendEvent\", event, sendResponse));\n }\n /**\n * Send a session or session aggregrates to Sentry.\n */\n sendSession(session) {\n const { release: clientReleaseOption, environment: clientEnvironmentOption = DEFAULT_ENVIRONMENT } = this._options;\n if (\"aggregates\" in session) {\n const sessionAttrs = session.attrs || {};\n if (!sessionAttrs.release && !clientReleaseOption) {\n DEBUG_BUILD && debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n return;\n }\n sessionAttrs.release = sessionAttrs.release || clientReleaseOption;\n sessionAttrs.environment = sessionAttrs.environment || clientEnvironmentOption;\n session.attrs = sessionAttrs;\n } else {\n if (!session.release && !clientReleaseOption) {\n DEBUG_BUILD && debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n return;\n }\n session.release = session.release || clientReleaseOption;\n session.environment = session.environment || clientEnvironmentOption;\n }\n this.emit(\"beforeSendSession\", session);\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n this.sendEnvelope(env);\n }\n /**\n * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).\n */\n recordDroppedEvent(reason, category, count = 1) {\n if (this._options.sendClientReports) {\n const key = `${reason}:${category}`;\n DEBUG_BUILD && debug.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : \"\"}`);\n this._outcomes[key] = (this._outcomes[key] || 0) + count;\n }\n }\n /**\n * Register a hook on this client.\n */\n on(hook, callback) {\n const hookCallbacks = this._hooks[hook] = this._hooks[hook] || /* @__PURE__ */ new Set();\n const uniqueCallback = (...args) => callback(...args);\n hookCallbacks.add(uniqueCallback);\n return () => {\n hookCallbacks.delete(uniqueCallback);\n };\n }\n /**\n * Emit a hook that was previously registered via `on()`.\n */\n emit(hook, ...rest) {\n const callbacks = this._hooks[hook];\n if (callbacks) {\n callbacks.forEach((callback) => callback(...rest));\n }\n }\n /**\n * Send an envelope to Sentry.\n */\n // @ts-expect-error - PromiseLike is a subset of Promise\n async sendEnvelope(envelope) {\n this.emit(\"beforeEnvelope\", envelope);\n if (this._isEnabled() && this._transport) {\n try {\n const result = await this._transport.send(envelope);\n this.emit(\"afterEnvelope\", envelope);\n return result;\n } catch (reason) {\n DEBUG_BUILD && debug.error(\"Error while sending envelope:\", reason);\n return {};\n }\n }\n DEBUG_BUILD && debug.error(\"Transport disabled\");\n return {};\n }\n /**\n * Register a cleanup function to be called when the client is disposed.\n * This is useful for integrations that need to clean up global state.\n *\n * NOTE: This is a no-op in the base `Client` class. Subclasses like `ServerRuntimeClient`\n * override this method to actually register and execute cleanup callbacks.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n registerCleanup(callback) {\n }\n /**\n * Disposes of the client and releases all resources.\n *\n * Subclasses should override this method to clean up their own resources, including invoking\n * any callbacks registered via {@link Client.registerCleanup}. The base implementation is a\n * no-op and does NOT execute registered cleanup callbacks.\n *\n * After calling dispose(), the client should not be used anymore.\n */\n dispose() {\n }\n /* eslint-enable @typescript-eslint/unified-signatures */\n /** Setup integrations for this client. */\n _setupIntegrations() {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n }\n /** Updates existing session based on the provided event */\n _updateSessionFromEvent(session, event) {\n let unhandled = event.level === \"fatal\";\n let errored = false;\n const exceptions = event.exception?.values;\n if (exceptions) {\n errored = true;\n unhandled = false;\n for (const ex of exceptions) {\n if (ex.mechanism?.handled === false) {\n unhandled = true;\n break;\n }\n }\n }\n const sessionNonTerminal = session.status === \"ok\";\n const shouldUpdateAndSend = sessionNonTerminal && session.errors === 0 || sessionNonTerminal && unhandled;\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...unhandled && { status: this._unhandledSessionStatus },\n errors: session.errors || Number(errored || unhandled)\n });\n this.captureSession(session);\n }\n }\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n async _isClientDoneProcessing(timeout) {\n let ticked = 0;\n while (!timeout || ticked < timeout) {\n await new Promise((resolve) => setTimeout(resolve, 1));\n if (!this._numProcessing) {\n return true;\n }\n ticked++;\n }\n return false;\n }\n /** Determines whether this SDK is enabled and a transport is present. */\n _isEnabled() {\n return this.getOptions().enabled !== false && this._transport !== void 0;\n }\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A new event with more information.\n */\n _prepareEvent(event, hint, currentScope, isolationScope) {\n const options = this.getOptions();\n const integrations = this.getIntegrationNames();\n if (!hint.integrations && integrations.length) {\n hint.integrations = integrations;\n }\n this.emit(\"preprocessEvent\", event, hint);\n if (!event.type) {\n isolationScope.setLastEventId(event.event_id || hint.event_id);\n }\n return prepareEvent(options, event, hint, currentScope, this, isolationScope).then((evt) => {\n if (evt === null) {\n return evt;\n }\n this.emit(\"postprocessEvent\", evt, hint);\n evt.contexts = {\n trace: { ...evt.contexts?.trace, ...getTraceContextFromScope(currentScope) },\n ...evt.contexts\n };\n const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata\n };\n return evt;\n });\n }\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n _captureEvent(event, hint = {}, currentScope = getCurrentScope(), isolationScope = getIsolationScope()) {\n if (DEBUG_BUILD && isErrorEvent(event)) {\n debug.log(`Captured error event \\`${getPossibleEventMessages(event)[0] || \"<unknown>\"}\\``);\n }\n return this._processEvent(event, hint, currentScope, isolationScope).then(\n (finalEvent) => {\n return finalEvent.event_id;\n },\n (reason) => {\n if (DEBUG_BUILD) {\n if (_isDoNotSendEventError(reason)) {\n debug.log(reason.message);\n } else if (_isInternalError(reason)) {\n debug.warn(reason.message);\n } else {\n debug.warn(reason);\n }\n }\n return void 0;\n }\n );\n }\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n _processEvent(event, hint, currentScope, isolationScope) {\n const options = this.getOptions();\n const { sampleRate } = options;\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || \"error\";\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n let beforeSendDropReason = \"before_send\";\n let ignoredSpanCount = 0;\n const parsedSampleRate = typeof sampleRate === \"undefined\" ? void 0 : parseSampleRate(sampleRate);\n const dataCategory = getDataCategoryByType(event.type);\n let preparedSpanCount = 0;\n return this._prepareEvent(event, hint, currentScope, isolationScope).then((prepared) => {\n if (prepared === null) {\n throw _makeDoNotSendEventError(\"An event processor returned `null`, will not send event.\");\n }\n preparedSpanCount = prepared.spans?.length || 0;\n if (isInternalException(hint)) {\n return prepared;\n }\n return processBeforeSend(\n options,\n prepared,\n hint,\n (reason) => {\n beforeSendDropReason = reason;\n },\n (count) => {\n ignoredSpanCount = count;\n }\n );\n }).then((processedEvent) => {\n if (ignoredSpanCount) {\n this.recordDroppedEvent(\"ignored\", \"span\", ignoredSpanCount);\n }\n const isValidEvent = isPlainObject(processedEvent);\n if (!isValidEvent || processedEvent === null) {\n this.recordDroppedEvent(beforeSendDropReason, dataCategory);\n if (isTransaction) {\n this.recordDroppedEvent(beforeSendDropReason, \"span\", 1 + preparedSpanCount - ignoredSpanCount);\n }\n if (processedEvent !== null) {\n throw _makeInternalError(`${beforeSendLabel} must return \\`null\\` or a valid event.`);\n }\n const dropMessage = beforeSendDropReason === \"ignored\" ? \"Transaction matched `ignoreSpans`\" : `${beforeSendLabel} ${beforeSendDropReason === \"callback_error\" ? \"threw an error\" : \"returned `null`\"}`;\n throw _makeDoNotSendEventError(`${dropMessage}, will not send event.`);\n }\n const session = currentScope.getSession() || isolationScope.getSession();\n if (isError && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n if (isError && typeof parsedSampleRate === \"number\" && safeMathRandom() > parsedSampleRate) {\n this.recordDroppedEvent(\"sample_rate\", \"error\");\n throw _makeDoNotSendEventError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`\n );\n }\n if (isTransaction) {\n const droppedSpanCount = preparedSpanCount - ignoredSpanCount - (processedEvent.spans?.length || 0);\n if (droppedSpanCount > 0) {\n this.recordDroppedEvent(\"before_send\", \"span\", droppedSpanCount);\n }\n }\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = \"custom\";\n processedEvent.transaction_info = {\n ...transactionInfo,\n source\n };\n }\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n }).then(null, (reason) => {\n if (_isDoNotSendEventError(reason) || _isInternalError(reason)) {\n throw reason;\n }\n this.captureException(reason, {\n mechanism: {\n handled: false,\n type: \"internal\"\n },\n data: {\n __sentry__: true\n },\n originalException: reason\n });\n throw _makeInternalError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${reason}`\n );\n });\n }\n /**\n * Occupies the client with processing and event\n */\n _process(taskProducer, dataCategory) {\n this._numProcessing++;\n void this._promiseBuffer.add(taskProducer).then(\n (value) => {\n this._numProcessing--;\n return value;\n },\n (reason) => {\n this._numProcessing--;\n if (reason === SENTRY_BUFFER_FULL_ERROR) {\n this.recordDroppedEvent(\"queue_overflow\", dataCategory);\n }\n return reason;\n }\n );\n }\n /**\n * Clears outcomes on this client and returns them.\n */\n _clearOutcomes() {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.entries(outcomes).map(([key, quantity]) => {\n const [reason, category] = key.split(\":\");\n return {\n reason,\n category,\n quantity\n };\n });\n }\n /**\n * Sends client reports as an envelope.\n */\n _flushOutcomes() {\n DEBUG_BUILD && debug.log(\"Flushing outcomes...\");\n const outcomes = this._clearOutcomes();\n if (outcomes.length === 0) {\n DEBUG_BUILD && debug.log(\"No outcomes to send\");\n return;\n }\n if (!this._dsn) {\n DEBUG_BUILD && debug.log(\"No dsn provided, will not send outcomes\");\n return;\n }\n DEBUG_BUILD && debug.log(\"Sending outcomes:\", outcomes);\n const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n this.sendEnvelope(envelope);\n }\n}\nfunction processBeforeSend(options, event, hint, onDrop, onIgnoredSpans) {\n const {\n beforeSend,\n ignoreSpans,\n // oxlint-disable-next-line typescript/no-deprecated\n beforeSendTransaction\n } = options;\n const beforeSendSpan = isStaticBeforeSendSpanCallback(options.beforeSendSpan) && options.beforeSendSpan;\n let processedEvent = event;\n if (isErrorEvent(processedEvent) && beforeSend) {\n const errorEvent = processedEvent;\n return safeCallback(\n DEBUG_BUILD ? \"The `beforeSend` callback threw an error, dropping the event:\" : \"\",\n () => beforeSend(errorEvent, hint),\n () => {\n onDrop(\"callback_error\");\n return null;\n }\n );\n }\n if (isTransactionEvent(processedEvent)) {\n if (beforeSendSpan || ignoreSpans) {\n const rootSpanJson = convertTransactionEventToSpanJson(processedEvent);\n if (ignoreSpans?.length && shouldIgnoreSpan(\n { description: rootSpanJson.description, op: rootSpanJson.op, attributes: rootSpanJson.data },\n ignoreSpans\n )) {\n onDrop(\"ignored\");\n return null;\n }\n if (beforeSendSpan) {\n const processedRootSpanJson = applyBeforeSendSpanCallback(rootSpanJson, beforeSendSpan);\n processedEvent = merge(event, convertSpanJsonToTransactionEvent(processedRootSpanJson));\n }\n if (processedEvent.spans) {\n const processedSpans = [];\n const initialSpans = processedEvent.spans;\n for (const span of initialSpans) {\n if (ignoreSpans?.length && shouldIgnoreSpan({ description: span.description, op: span.op, attributes: span.data }, ignoreSpans)) {\n reparentChildSpans(initialSpans, span);\n continue;\n }\n if (beforeSendSpan) {\n processedSpans.push(applyBeforeSendSpanCallback(span, beforeSendSpan));\n } else {\n processedSpans.push(span);\n }\n }\n onIgnoredSpans(initialSpans.length - processedSpans.length);\n processedEvent.spans = processedSpans;\n }\n }\n if (beforeSendTransaction) {\n return safeCallback(\n DEBUG_BUILD ? \"The `beforeSendTransaction` callback threw an error, dropping the event:\" : \"\",\n () => beforeSendTransaction(processedEvent, hint),\n () => {\n onDrop(\"callback_error\");\n return null;\n }\n );\n }\n }\n return processedEvent;\n}\nfunction isErrorEvent(event) {\n return event.type === void 0;\n}\nfunction isTransactionEvent(event) {\n return event.type === \"transaction\";\n}\nfunction estimateMetricSizeInBytes(metric) {\n let weight = 0;\n if (metric.name) {\n weight += metric.name.length * 2;\n }\n weight += 8;\n return weight + estimateAttributesSizeInBytes(metric.attributes);\n}\nfunction estimateLogSizeInBytes(log) {\n let weight = 0;\n if (log.message) {\n weight += log.message.length * 2;\n }\n return weight + estimateAttributesSizeInBytes(log.attributes);\n}\nfunction estimateAttributesSizeInBytes(attributes) {\n if (!attributes) {\n return 0;\n }\n let weight = 0;\n Object.values(attributes).forEach((value) => {\n if (Array.isArray(value)) {\n weight += value.length * estimatePrimitiveSizeInBytes(value[0]);\n } else if (isPrimitive(value)) {\n weight += estimatePrimitiveSizeInBytes(value);\n } else {\n weight += 100;\n }\n });\n return weight;\n}\nfunction estimatePrimitiveSizeInBytes(value) {\n if (typeof value === \"string\") {\n return value.length * 2;\n } else if (typeof value === \"number\") {\n return 8;\n } else if (typeof value === \"boolean\") {\n return 4;\n }\n return 0;\n}\n\nexport { Client, isClientClosed };\n//# sourceMappingURL=client.js.map\n","import { isClientClosed } from './client.js';\nimport { getClient, getCurrentScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, debug } from './utils/debug-logger.js';\n\nfunction initAndBind(clientClass, options) {\n if (options.debug === true) {\n if (DEBUG_BUILD) {\n debug.enable();\n } else {\n consoleSandbox(() => {\n console.warn(\"[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.\");\n });\n }\n }\n warnIfClientIsActive();\n const scope = getCurrentScope();\n scope.update(options.initialScope);\n const client = new clientClass(options);\n setCurrentClient(client);\n client.init();\n return client;\n}\nfunction getActiveClient() {\n const client = getClient();\n return client && !isClientClosed(client) ? client : void 0;\n}\nfunction warnIfClientIsActive() {\n if (getActiveClient()) {\n consoleSandbox(() => {\n console.warn(\n \"[Sentry] `Sentry.init()` was called more than once. The new client replaces the active client, but the active client is not closed, so state from both can mix. Call `Sentry.init()` only once, or call `await Sentry.close()` before you call it again.\"\n );\n });\n }\n}\nfunction setCurrentClient(client) {\n getCurrentScope().setClient(client);\n}\n\nexport { getActiveClient, initAndBind, setCurrentClient, warnIfClientIsActive };\n//# sourceMappingURL=sdk.js.map\n","const FILTERED_VALUE = \"[Filtered]\";\nconst SENSITIVE_KEY_SNIPPETS = [\n \"auth\",\n \"token\",\n \"secret\",\n \"session\",\n // for the user_session cookie\n \"password\",\n \"passwd\",\n \"pwd\",\n \"key\",\n \"jwt\",\n \"bearer\",\n \"sso\",\n \"saml\",\n \"csrf\",\n \"xsrf\",\n \"credentials\",\n \"sid\",\n \"identity\",\n // Always treat cookie headers as sensitive in case individual key-value cookie pairs cannot properly be extracted\n \"set-cookie\",\n \"cookie\"\n];\nconst SENSITIVE_COOKIE_NAME_SNIPPETS = [\n // Express / Connect default session cookie\n \".sid\",\n // Opaque session ids (PHPSESSID, ASPSESSIONID*, BIGipServer*, *sessid*, …)\n \"sessid\",\n // Laravel etc. \"remember me\" tokens\n \"remember\",\n // OIDC / OAuth auxiliary (`oauth*` covered by header snippet `auth`)\n \"oidc\",\n \"pkce\",\n \"nonce\",\n // RFC 6265bis high-security cookie name prefixes\n \"__secure-\",\n \"__host-\",\n // Load balancer / CDN sticky-session cookies (opaque routing tokens)\n \"awsalb\",\n \"awselb\",\n \"akamai\",\n // BaaS / IdP session cookies (names often omit \"session\")\n \"__stripe\",\n \"cognito\",\n \"firebase\",\n \"supabase\",\n \"sb-\",\n // Step-up / MFA cookies\n \"mfa\",\n \"2fa\"\n];\n\nexport { FILTERED_VALUE, SENSITIVE_COOKIE_NAME_SNIPPETS, SENSITIVE_KEY_SNIPPETS };\n//# sourceMappingURL=filtering-snippets.js.map\n","import { FILTERED_VALUE, SENSITIVE_KEY_SNIPPETS } from './filtering-snippets.js';\n\nfunction isSensitiveKey(lower, denySnippets) {\n return denySnippets.some((snippet) => lower.includes(snippet));\n}\nfunction shouldFilterDataKey(key, behavior, additionalDenyTerms) {\n if (behavior === false) {\n return true;\n }\n const lowerKey = key.toLowerCase();\n const denySnippets = additionalDenyTerms != null ? [...SENSITIVE_KEY_SNIPPETS, ...additionalDenyTerms] : SENSITIVE_KEY_SNIPPETS;\n if (isSensitiveKey(lowerKey, denySnippets)) {\n return true;\n }\n if (behavior === true) {\n return false;\n }\n const terms = \"deny\" in behavior ? behavior.deny : behavior.allow;\n const matchesConfiguredTerm = terms.some((term) => lowerKey.includes(term.toLowerCase()));\n return \"deny\" in behavior ? matchesConfiguredTerm : !matchesConfiguredTerm;\n}\nfunction filterKeyValueData(data, behavior, additionalDenyTerms) {\n if (behavior === false) {\n return {};\n }\n const result = {};\n for (const key of Object.keys(data)) {\n result[key] = shouldFilterDataKey(key, behavior, additionalDenyTerms) ? FILTERED_VALUE : data[key];\n }\n return result;\n}\n\nexport { filterKeyValueData, shouldFilterDataKey };\n//# sourceMappingURL=filterKeyValueData.js.map\n","import { FILTERED_VALUE } from './filtering-snippets.js';\nimport { shouldFilterDataKey } from './filterKeyValueData.js';\n\nfunction filterQueryParams(queryString, behavior) {\n if (!queryString || behavior === false) {\n return void 0;\n }\n return queryString.split(\"&\").map((pair) => {\n const separatorIndex = pair.indexOf(\"=\");\n const encodedKey = separatorIndex === -1 ? pair : pair.slice(0, separatorIndex);\n const key = new URLSearchParams(`${encodedKey}=`).keys().next().value;\n return key !== void 0 && shouldFilterDataKey(key, behavior) ? `${encodedKey}=${FILTERED_VALUE}` : pair;\n }).join(\"&\");\n}\n\nexport { filterQueryParams };\n//# sourceMappingURL=filterQueryParams.js.map\n","import { filterQueryParams } from './filterQueryParams.js';\n\nfunction filterUrlQuery(url, behavior) {\n const fragmentStart = url.indexOf(\"#\");\n const queryEnd = fragmentStart === -1 ? url.length : fragmentStart;\n const queryStart = url.indexOf(\"?\");\n if (queryStart === -1 || queryStart > queryEnd) {\n return url;\n }\n const prefix = url.slice(0, queryStart);\n const query = url.slice(queryStart + 1, queryEnd);\n const suffix = url.slice(queryEnd);\n const filtered = filterQueryParams(query, behavior);\n return filtered ? `${prefix}?${filtered}${suffix}` : `${prefix}${suffix}`;\n}\n\nexport { filterUrlQuery };\n//# sourceMappingURL=filterUrlQuery.js.map\n","import { getClient } from '../../currentScopes.js';\nimport { filterQueryParams } from './filterQueryParams.js';\nimport { filterUrlQuery } from './filterUrlQuery.js';\n\nfunction urlQueryParamsBehavior(client) {\n return (client ?? getClient())?.getDataCollectionOptions().urlQueryParams ?? true;\n}\nfunction filterCollectedUrl(url, client) {\n return url === void 0 ? void 0 : filterUrlQuery(url, urlQueryParamsBehavior(client));\n}\nfunction filterCollectedUrlQuery(query, client) {\n return query ? filterQueryParams(query, urlQueryParamsBehavior(client)) : void 0;\n}\n\nexport { filterCollectedUrl, filterCollectedUrlQuery };\n//# sourceMappingURL=filterCollectedUrl.js.map\n","import { HTTP_ROUTE, URL_TEMPLATE, HTTP_REQUEST_METHOD, URL_FULL, URL_QUERY, URL_FRAGMENT, URL_PATH, URL_PORT, URL_SCHEME, SERVER_ADDRESS, URL_DOMAIN, SENTRY_SEGMENT_NAME_SOURCE, SENTRY_ORIGIN } from '@sentry/conventions/attributes';\nimport { filterCollectedUrl, filterCollectedUrlQuery } from './data-collection/filterCollectedUrl.js';\n\nconst DEFAULT_BASE_URL = \"thismessage:/\";\nfunction isURLObjectRelative(url) {\n return \"isRelative\" in url;\n}\nfunction parseStringToURLObject(url, urlBase) {\n const isRelative = url.indexOf(\"://\") <= 0 && url.indexOf(\"//\") !== 0;\n const base = urlBase ?? (isRelative ? DEFAULT_BASE_URL : void 0);\n try {\n if (\"canParse\" in URL && !URL.canParse(url, base)) {\n return void 0;\n }\n const fullUrlObject = new URL(url, base);\n if (isRelative) {\n return {\n isRelative,\n pathname: fullUrlObject.pathname,\n search: fullUrlObject.search,\n hash: fullUrlObject.hash\n };\n }\n return fullUrlObject;\n } catch {\n }\n return void 0;\n}\nfunction getSanitizedUrlStringFromUrlObject(url) {\n if (isURLObjectRelative(url)) {\n return url.pathname;\n }\n const newUrl = new URL(url);\n newUrl.search = \"\";\n newUrl.hash = \"\";\n if ([\"80\", \"443\"].includes(newUrl.port)) {\n newUrl.port = \"\";\n }\n if (newUrl.password) {\n newUrl.password = \"%filtered%\";\n }\n if (newUrl.username) {\n newUrl.username = \"%filtered%\";\n }\n return newUrl.toString();\n}\nfunction getUrlQuery(query) {\n return query?.replace(/^\\?/, \"\") || void 0;\n}\nfunction getUrlFragment(fragment) {\n return fragment?.replace(/^#/, \"\") || void 0;\n}\nfunction getUrlDomain(url, base) {\n try {\n return new URL(url, base).hostname || void 0;\n } catch {\n return void 0;\n }\n}\nfunction getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName) {\n const method = request?.method?.toUpperCase() ?? \"GET\";\n const route = routeName ? routeName : urlObject ? kind === \"client\" ? getSanitizedUrlStringFromUrlObject(urlObject) : urlObject.pathname : \"/\";\n return `${method} ${route}`;\n}\nfunction getHttpSpanDetailsFromUrlObject(urlObject, kind, spanOrigin, request, routeName, client) {\n const attributes = {\n [SENTRY_ORIGIN]: spanOrigin\n };\n let nameSource = \"url\";\n if (routeName) {\n attributes[kind === \"server\" ? HTTP_ROUTE : URL_TEMPLATE] = routeName;\n nameSource = \"route\";\n }\n if (request?.method) {\n attributes[HTTP_REQUEST_METHOD] = request.method.toUpperCase();\n }\n if (urlObject) {\n attributes[URL_FULL] = filterCollectedUrl(\n isURLObjectRelative(urlObject) ? getSanitizedUrlStringFromUrlObject(urlObject) : urlObject.href,\n client\n );\n attributes[URL_QUERY] = filterCollectedUrlQuery(getUrlQuery(urlObject.search), client);\n attributes[URL_FRAGMENT] = getUrlFragment(urlObject.hash);\n if (urlObject.pathname) {\n attributes[URL_PATH] = urlObject.pathname;\n if (urlObject.pathname === \"/\") {\n nameSource = \"route\";\n }\n }\n if (!isURLObjectRelative(urlObject)) {\n if (urlObject.port) {\n attributes[URL_PORT] = urlObject.port;\n }\n if (urlObject.protocol) {\n attributes[URL_SCHEME] = urlObject.protocol;\n }\n if (urlObject.hostname) {\n attributes[kind === \"server\" ? SERVER_ADDRESS : URL_DOMAIN] = urlObject.hostname;\n }\n }\n }\n if (kind === \"server\") {\n attributes[SENTRY_SEGMENT_NAME_SOURCE] = nameSource;\n }\n return [getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName), attributes];\n}\nfunction parseUrl(url) {\n if (!url) {\n return {};\n }\n const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n if (!match) {\n return {};\n }\n const query = match[6] || \"\";\n const fragment = match[8] || \"\";\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n search: query,\n hash: fragment,\n relative: match[5] + query + fragment\n // everything minus origin\n };\n}\nfunction stripUrlQueryAndFragment(urlPath) {\n return urlPath.split(/[?#]/, 1)[0];\n}\nfunction getSanitizedUrlString(url) {\n const { protocol, host, path } = url;\n const filteredHost = host?.replace(/^.*@/, \"[filtered]:[filtered]@\").replace(/(:80)$/, \"\").replace(/(:443)$/, \"\") || \"\";\n return `${protocol ? `${protocol}://` : \"\"}${filteredHost}${path || \"\"}`;\n}\nfunction stripDataUrlContent(url, includeDataPrefix = true) {\n if (url.startsWith(\"data:\")) {\n const match = url.match(/^data:([^;,]+)/);\n const mimeType = match ? match[1] : \"text/plain\";\n const isBase64 = url.includes(\";base64,\");\n const dataStart = url.indexOf(\",\");\n let dataPrefix = \"\";\n if (includeDataPrefix && dataStart !== -1) {\n const data = url.slice(dataStart + 1);\n dataPrefix = data.length > 10 ? `${data.slice(0, 10)}... [truncated]` : data;\n }\n return `data:${mimeType}${isBase64 ? \",base64\" : \"\"}${dataPrefix ? `,${dataPrefix}` : \"\"}`;\n }\n return url;\n}\n\nexport { getHttpSpanDetailsFromUrlObject, getSanitizedUrlString, getSanitizedUrlStringFromUrlObject, getUrlDomain, getUrlFragment, getUrlQuery, isURLObjectRelative, parseStringToURLObject, parseUrl, stripDataUrlContent, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","function addAutoIpAddressToSession(session) {\n if (\"aggregates\" in session) {\n if (session.attrs?.[\"ip_address\"] === void 0) {\n session.attrs = {\n ...session.attrs,\n ip_address: \"{{auto}}\"\n };\n }\n } else {\n if (session.ipAddress === void 0) {\n session.ipAddress = \"{{auto}}\";\n }\n }\n}\n\nexport { addAutoIpAddressToSession };\n//# sourceMappingURL=ipAddress.js.map\n","import { SDK_VERSION } from './version.js';\n\nfunction applySdkMetadata(options, name, names = [name], source = \"npm\") {\n const sdk = (options._metadata = options._metadata || {}).sdk = options._metadata.sdk || {};\n if (!sdk.name) {\n sdk.name = `sentry.javascript.${name}`;\n sdk.packages = names.map((name2) => ({\n name: `${source}:@sentry/${name2}`,\n version: SDK_VERSION\n }));\n sdk.version = SDK_VERSION;\n }\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { getClient, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox } from './utils/debug-logger.js';\nimport { safeCallback } from './utils/safeCallback.js';\nimport { dateTimestampInSeconds } from './utils/time.js';\n\nconst DEFAULT_BREADCRUMBS = 100;\nfunction addBreadcrumb(breadcrumb, hint) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n if (!client) return;\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n if (maxBreadcrumbs <= 0) return;\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb ? safeCallback(\n DEBUG_BUILD ? \"The `beforeBreadcrumb` callback threw an error, dropping the breadcrumb:\" : \"\",\n () => consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)),\n () => null\n ) : mergedBreadcrumb;\n if (finalBreadcrumb === null) return;\n if (client.emit) {\n client.emit(\"beforeAddBreadcrumb\", finalBreadcrumb, hint);\n }\n isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { getOriginalFunction } from '../utils/object.js';\n\nconst INTEGRATION_NAME = \"FunctionToString\";\nconst SETUP_CLIENTS = /* @__PURE__ */ new WeakMap();\nconst _functionToStringIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n const originalFunctionToString = Function.prototype.toString;\n try {\n Function.prototype.toString = function(...args) {\n const originalFunction = getOriginalFunction(this);\n let unwrappedFunction;\n try {\n if (SETUP_CLIENTS.has(getClient()) && originalFunction !== void 0) {\n unwrappedFunction = originalFunction;\n }\n } catch {\n }\n return originalFunctionToString.apply(unwrappedFunction ?? this, args);\n };\n } catch {\n }\n },\n setup(client) {\n SETUP_CLIENTS.set(client, true);\n }\n };\n});\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getPossibleEventMessages } from '../utils/eventUtils.js';\nimport { getEventDescription } from '../utils/misc.js';\nimport { stringMatchesSomePattern } from '../utils/string.js';\n\nconst DEFAULT_IGNORE_ERRORS = [\n /^Script error\\.?$/,\n /^Javascript error: Script error\\.? on line 0$/,\n /^ResizeObserver loop completed with undelivered notifications.$/,\n // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n /^Cannot redefine property: googletag$/,\n // This is thrown when google tag manager is used in combination with an ad blocker\n /^Can't find variable: gmo$/,\n // Error from Google Search App https://issuetracker.google.com/issues/396043331\n /^undefined is not an object \\(evaluating 'a\\.[A-Z]'\\)$/,\n // Random error that happens but not actionable or noticeable to end-users.\n /can't redefine non-configurable property \"solana\"/,\n // Probably a browser extension or custom browser (Brave) throwing this error\n /vv\\(\\)\\.getRestrictions is not a function/,\n // Error thrown by GTM, seemingly not affecting end-users\n /Can't find variable: _AutofillCallbackHandler/,\n // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n /Object Not Found Matching Id:\\d+, MethodName:simulateEvent/,\n // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n /Java exception was raised during method invocation$/,\n // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)\n /Java object is gone$/\n // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)\n];\nconst INTEGRATION_NAME = \"EventFilters\";\nconst eventFiltersIntegration = defineIntegration((options = {}) => {\n let mergedOptions;\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n const clientOptions = client.getOptions();\n mergedOptions = _mergeOptions(options, clientOptions);\n },\n processEvent(event, _hint, client) {\n if (!mergedOptions) {\n const clientOptions = client.getOptions();\n mergedOptions = _mergeOptions(options, clientOptions);\n }\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n }\n };\n});\nfunction _mergeOptions(internalOptions = {}, clientOptions = {}) {\n return {\n allowUrls: [...internalOptions.allowUrls || [], ...clientOptions.allowUrls || []],\n denyUrls: [...internalOptions.denyUrls || [], ...clientOptions.denyUrls || []],\n ignoreErrors: [\n ...internalOptions.ignoreErrors || [],\n ...clientOptions.ignoreErrors || [],\n ...internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS\n ],\n ignoreTransactions: [...internalOptions.ignoreTransactions || [], ...clientOptions.ignoreTransactions || []]\n };\n}\nfunction _shouldDropEvent(event, options) {\n if (!event.type) {\n if (_isIgnoredError(event, options.ignoreErrors)) {\n DEBUG_BUILD && debug.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\nEvent: ${getEventDescription(event)}`\n );\n return true;\n }\n if (_isUselessError(event)) {\n DEBUG_BUILD && debug.warn(\n `Event dropped due to not having an error message, error type or stacktrace.\nEvent: ${getEventDescription(\n event\n )}`\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n DEBUG_BUILD && debug.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\nEvent: ${getEventDescription(\n event\n )}.\nUrl: ${_getEventFilterUrl(event)}`\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n DEBUG_BUILD && debug.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\nEvent: ${getEventDescription(\n event\n )}.\nUrl: ${_getEventFilterUrl(event)}`\n );\n return true;\n }\n } else if (event.type === \"transaction\") {\n if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n DEBUG_BUILD && debug.warn(\n `Event dropped due to being matched by \\`ignoreTransactions\\` option.\nEvent: ${getEventDescription(event)}`\n );\n return true;\n }\n }\n return false;\n}\nfunction _isIgnoredError(event, ignoreErrors) {\n if (!ignoreErrors?.length) {\n return false;\n }\n return getPossibleEventMessages(event).some((message) => stringMatchesSomePattern(message, ignoreErrors));\n}\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n if (!ignoreTransactions?.length) {\n return false;\n }\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\nfunction _isDeniedUrl(event, denyUrls) {\n if (!denyUrls?.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\nfunction _isAllowedUrl(event, allowUrls) {\n if (!allowUrls?.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\nfunction _getLastValidUrl(frames = []) {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n if (frame && frame.filename !== \"<anonymous>\" && frame.filename !== \"[native code]\") {\n return frame.filename || null;\n }\n }\n return null;\n}\nfunction _getEventFilterUrl(event) {\n try {\n const rootException = [...event.exception?.values ?? []].reverse().find((value) => value.mechanism?.parent_id === void 0 && value.stacktrace?.frames?.length);\n const frames = rootException?.stacktrace?.frames;\n return frames ? _getLastValidUrl(frames) : null;\n } catch {\n DEBUG_BUILD && debug.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\nfunction _isUselessError(event) {\n if (!event.exception?.values?.length) {\n return false;\n }\n return (\n // No top-level message\n !event.message && // There are no exception values that have a stacktrace, a non-generic-Error type or value\n !event.exception.values.some((value) => value.stacktrace || value.type && value.type !== \"Error\" || value.value)\n );\n}\n\nexport { eventFiltersIntegration };\n//# sourceMappingURL=eventFilters.js.map\n","import { isError } from './is.js';\n\nfunction applyAggregateErrorsToEvent(exceptionFromErrorImplementation, parser, key, limit, event, hint) {\n if (!event.exception?.values || !hint || !isError(hint.originalException)) {\n return;\n }\n const originalException = event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : void 0;\n if (originalException) {\n event.exception.values = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n hint.originalException,\n key,\n event.exception.values,\n originalException,\n 0\n );\n }\n}\nfunction aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, error, key, prevExceptions, exception, exceptionId) {\n if (prevExceptions.length >= limit + 1) {\n return prevExceptions;\n }\n let newExceptions = [...prevExceptions];\n if (isError(error[key])) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId, error);\n const newException = exceptionFromErrorImplementation(parser, error[key]);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error[key],\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId\n );\n }\n if (isExceptionGroup(error)) {\n error.errors.forEach((childError, i) => {\n if (isError(childError)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId, error);\n const newException = exceptionFromErrorImplementation(parser, childError);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n childError,\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId\n );\n }\n });\n }\n return newExceptions;\n}\nfunction isExceptionGroup(error) {\n return Array.isArray(error.errors);\n}\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId, error) {\n exception.mechanism = {\n handled: true,\n type: \"auto.core.linked_errors\",\n ...isExceptionGroup(error) && { is_exception_group: true },\n ...exception.mechanism,\n exception_id: exceptionId\n };\n}\nfunction applyExceptionGroupFieldsForChildException(exception, source, exceptionId, parentId) {\n exception.mechanism = {\n handled: true,\n ...exception.mechanism,\n type: \"chained\",\n source,\n exception_id: exceptionId,\n parent_id: parentId\n };\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","import { isParameterizedString, isError, isPlainObject, isErrorEvent } from './is.js';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc.js';\nimport { normalizeToSize } from './normalize.js';\nimport { extractExceptionKeysForMessage } from './object.js';\n\nfunction parseStackFrames(stackParser, error) {\n return stackParser(error.stack || \"\", 1);\n}\nfunction hasSentryFetchUrlHost(error) {\n return isError(error) && \"__sentry_fetch_url_host__\" in error && typeof error.__sentry_fetch_url_host__ === \"string\";\n}\nfunction _enhanceErrorWithSentryInfo(error) {\n if (hasSentryFetchUrlHost(error)) {\n return `${error.message} (${error.__sentry_fetch_url_host__})`;\n }\n return error.message;\n}\nfunction exceptionFromError(stackParser, error) {\n const exception = {\n type: error.name || error.constructor.name,\n value: _enhanceErrorWithSentryInfo(error)\n };\n const frames = parseStackFrames(stackParser, error);\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n return exception;\n}\nfunction getErrorPropertyFromObject(obj) {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (isError(value)) {\n return value;\n }\n }\n }\n return void 0;\n}\nfunction getMessageForObject(exception) {\n if (\"name\" in exception && typeof exception.name === \"string\") {\n let message = `'${exception.name}' captured as exception`;\n if (\"message\" in exception && typeof exception.message === \"string\") {\n message += ` with message '${exception.message}'`;\n }\n return message;\n } else if (\"message\" in exception && typeof exception.message === \"string\") {\n return exception.message;\n }\n const keys = extractExceptionKeysForMessage(exception);\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``;\n }\n const className = getObjectClassName(exception);\n return `${className && className !== \"Object\" ? `'${className}'` : \"Object\"} captured as exception with keys: ${keys}`;\n}\nfunction getObjectClassName(obj) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : void 0;\n } catch {\n }\n}\nfunction getException(client, mechanism, exception, hint) {\n if (isError(exception)) {\n return [exception, void 0];\n }\n mechanism.synthetic = true;\n if (isPlainObject(exception)) {\n const normalizeDepth = client?.getOptions().normalizeDepth;\n const extras = { [\"__serialized__\"]: normalizeToSize(exception, normalizeDepth) };\n const errorFromProp = getErrorPropertyFromObject(exception);\n if (errorFromProp) {\n return [errorFromProp, extras];\n }\n const message = getMessageForObject(exception);\n const ex2 = hint?.syntheticException || new Error(message);\n ex2.message = message;\n return [ex2, extras];\n }\n const ex = hint?.syntheticException || new Error(exception);\n ex.message = `${exception}`;\n return [ex, void 0];\n}\nfunction eventFromUnknownInput(client, stackParser, exception, hint) {\n const providedMechanism = hint?.data && hint.data.mechanism;\n const mechanism = providedMechanism || {\n handled: true,\n type: \"generic\"\n };\n const [ex, extras] = getException(client, mechanism, exception, hint);\n const event = {\n exception: {\n values: [exceptionFromError(stackParser, ex)]\n }\n };\n if (extras) {\n event.extra = extras;\n }\n addExceptionTypeValue(event, void 0, void 0);\n addExceptionMechanism(event, mechanism);\n return {\n ...event,\n event_id: hint?.event_id\n };\n}\nfunction eventFromMessage(stackParser, message, level = \"info\", hint, attachStacktrace) {\n const event = {\n event_id: hint?.event_id,\n level\n };\n if (attachStacktrace && hint?.syntheticException) {\n const frames = parseStackFrames(stackParser, hint.syntheticException);\n if (frames.length) {\n event.exception = {\n values: [\n {\n value: message,\n stacktrace: { frames }\n }\n ]\n };\n addExceptionMechanism(event, { synthetic: true });\n }\n }\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__\n };\n return event;\n }\n event.message = message;\n return event;\n}\n\nexport { _enhanceErrorWithSentryInfo, eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { CONSOLE_LEVELS, originalConsoleMethods, debug } from '../utils/debug-logger.js';\nimport { fill } from '../utils/object.js';\nimport { stringMatchesSomePattern } from '../utils/string.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nconst _filter = /* @__PURE__ */ new Set([]);\nfunction addConsoleInstrumentationHandler(handler) {\n const type = \"console\";\n const removeHandler = addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n return removeHandler;\n}\nfunction addConsoleInstrumentationFilter(filter) {\n for (const f of filter) {\n _filter.add(f);\n }\n return () => {\n for (const f of filter) {\n _filter.delete(f);\n }\n };\n}\nconst instrumentedLevels = /* @__PURE__ */ new Set();\nfunction instrumentConsole() {\n if (!(\"console\" in GLOBAL_OBJ)) {\n return;\n }\n CONSOLE_LEVELS.forEach(function(level) {\n if (instrumentedLevels.has(level) || !(level in GLOBAL_OBJ.console)) {\n return;\n }\n instrumentedLevels.add(level);\n fill(GLOBAL_OBJ.console, level, function(originalConsoleMethod) {\n originalConsoleMethods[level] = originalConsoleMethod;\n return function(...args) {\n const firstArg = args[0];\n const log = originalConsoleMethods[level];\n const isFiltered = _filter.size && typeof firstArg === \"string\" && stringMatchesSomePattern(firstArg, _filter);\n if (!isFiltered) {\n triggerHandlers(\"console\", { args, level });\n }\n if (!isFiltered || DEBUG_BUILD && debug.isEnabled()) {\n log?.apply(GLOBAL_OBJ.console, args);\n }\n };\n });\n });\n}\n\nexport { addConsoleInstrumentationFilter, addConsoleInstrumentationHandler, instrumentConsole };\n//# sourceMappingURL=console.js.map\n","function severityLevelFromString(level) {\n return level === \"warn\" ? \"warning\" : [\"fatal\", \"error\", \"warning\", \"log\", \"info\", \"debug\"].includes(level) ? level : \"log\";\n}\n\nexport { severityLevelFromString };\n//# sourceMappingURL=severity.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { debug } from '../utils/debug-logger.js';\nimport { getFramesFromEvent } from '../utils/stacktrace.js';\n\nconst INTEGRATION_NAME = \"Dedupe\";\nconst _dedupeIntegration = (() => {\n let previousEvent;\n return {\n name: INTEGRATION_NAME,\n processEvent(currentEvent) {\n if (currentEvent.type) {\n return currentEvent;\n }\n try {\n if (_shouldDropEvent(currentEvent, previousEvent)) {\n DEBUG_BUILD && debug.warn(\"Event dropped due to being a duplicate of previously captured event.\");\n return null;\n }\n } catch {\n }\n return previousEvent = currentEvent;\n }\n };\n});\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n if (!previousEvent) {\n return false;\n }\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n return false;\n}\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n if (!currentMessage && !previousMessage) {\n return false;\n }\n if (currentMessage && !previousMessage || !currentMessage && previousMessage) {\n return false;\n }\n if (currentMessage !== previousMessage) {\n return false;\n }\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n return true;\n}\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n if (!previousException || !currentException) {\n return false;\n }\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n return true;\n}\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n const currentFrames = getFramesFromEvent(currentEvent);\n const previousFrames = getFramesFromEvent(previousEvent);\n if (!currentFrames || !previousFrames) {\n return !currentFrames && !previousFrames;\n }\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n for (let i = 0; i < previousFrames.length; i++) {\n const frameA = previousFrames[i];\n const frameB = currentFrames[i];\n if (frameA.filename !== frameB.filename || frameA.lineno !== frameB.lineno || frameA.colno !== frameB.colno || frameA.function !== frameB.function) {\n return false;\n }\n }\n return true;\n}\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n const currentFingerprint = currentEvent.fingerprint;\n const previousFingerprint = previousEvent.fingerprint;\n if (!currentFingerprint || !previousFingerprint) {\n return !currentFingerprint && !previousFingerprint;\n }\n try {\n return !!(currentFingerprint.join(\"\") === previousFingerprint.join(\"\"));\n } catch {\n return false;\n }\n}\nfunction _getExceptionFromEvent(event) {\n return event.exception?.values?.[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { addBreadcrumb } from '../breadcrumbs.js';\nimport { getClient } from '../currentScopes.js';\nimport { addConsoleInstrumentationHandler, addConsoleInstrumentationFilter } from '../instrument/console.js';\nimport { defineIntegration } from '../integration.js';\nimport { CONSOLE_LEVELS } from '../utils/debug-logger.js';\nimport { severityLevelFromString } from '../utils/severity.js';\nimport { safeJoin } from '../utils/string.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\n\nconst INTEGRATION_NAME = \"Console\";\nconst consoleIntegration = defineIntegration((options = {}) => {\n const levels = new Set(options.levels || CONSOLE_LEVELS);\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n const unsubscribe = addConsoleInstrumentationHandler(({ args, level }) => {\n if (getClient() !== client || !levels.has(level)) {\n return;\n }\n addConsoleBreadcrumb(level, args);\n });\n client.registerCleanup(unsubscribe);\n if (options.filter) {\n const unsubscribe2 = addConsoleInstrumentationFilter(options.filter);\n client.registerCleanup(unsubscribe2);\n }\n }\n };\n});\nfunction addConsoleBreadcrumb(level, args) {\n const breadcrumb = {\n category: \"console\",\n data: {\n arguments: args,\n logger: \"console\"\n },\n level: severityLevelFromString(level),\n message: formatConsoleArgs(args)\n };\n if (level === \"assert\") {\n if (args[0] === false) {\n const assertionArgs = args.slice(1);\n breadcrumb.message = assertionArgs.length > 0 ? `Assertion failed: ${formatConsoleArgs(assertionArgs)}` : \"Assertion failed\";\n breadcrumb.data.arguments = assertionArgs;\n } else {\n return;\n }\n }\n addBreadcrumb(breadcrumb, {\n input: args,\n level\n });\n}\nfunction formatConsoleArgs(values) {\n return \"util\" in GLOBAL_OBJ && typeof GLOBAL_OBJ.util.format === \"function\" ? GLOBAL_OBJ.util.format(...values) : safeJoin(values, \" \");\n}\n\nexport { addConsoleBreadcrumb, consoleIntegration };\n//# sourceMappingURL=console.js.map\n","import { GEN_AI_CONVERSATION_ID } from '@sentry/conventions/attributes';\nimport { getCurrentScope, getIsolationScope } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { spanToStaticSpanJSON } from '../utils/spanUtils.js';\n\nconst INTEGRATION_NAME = \"ConversationId\";\nconst _conversationIdIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n client.on(\"spanStart\", (span) => {\n const scopeData = getCurrentScope().getScopeData();\n const isolationScopeData = getIsolationScope().getScopeData();\n const conversationId = scopeData.conversationId || isolationScopeData.conversationId;\n if (conversationId) {\n const { op, data: attributes, description: name } = spanToStaticSpanJSON(span);\n if (!op?.startsWith(\"gen_ai.\") && !attributes[\"ai.operationId\"] && !name?.startsWith(\"ai.\")) {\n return;\n }\n span.setAttribute(GEN_AI_CONVERSATION_ID, conversationId);\n }\n });\n }\n };\n});\nconst conversationIdIntegration = defineIntegration(_conversationIdIntegration);\n\nexport { conversationIdIntegration };\n//# sourceMappingURL=conversationId.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { debug } from './debug-logger.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ;\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(\"\");\n return true;\n } catch {\n return false;\n }\n}\nfunction supportsDOMException() {\n try {\n new DOMException(\"\");\n return true;\n } catch {\n return false;\n }\n}\nconst supportsFetch = _isFetchSupported;\nfunction _isFetchSupported() {\n if (!(\"fetch\" in WINDOW)) {\n return false;\n }\n try {\n new Headers();\n new Request(\"data:,\");\n new Response();\n return true;\n } catch {\n return false;\n }\n}\nfunction isNativeFunction(func) {\n return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\nfunction supportsNativeFetch() {\n if (typeof EdgeRuntime === \"string\") {\n return true;\n }\n if (!_isFetchSupported()) {\n return false;\n }\n if (isNativeFunction(WINDOW.fetch)) {\n return true;\n }\n let result = false;\n const doc = WINDOW.document;\n if (doc && typeof doc.createElement === \"function\") {\n try {\n const sandbox = doc.createElement(\"iframe\");\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow?.fetch) {\n result = isNativeFunction(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n DEBUG_BUILD && debug.warn(\"Could not create sandbox iframe for pure fetch check, bailing to window.fetch: \", err);\n }\n }\n return result;\n}\nfunction supportsReferrerPolicy() {\n if (!_isFetchSupported()) {\n return false;\n }\n try {\n new Request(\"_\", {\n referrerPolicy: \"origin\"\n });\n return true;\n } catch {\n return false;\n }\n}\n\nexport { isNativeFunction, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy };\n//# sourceMappingURL=supports.js.map\n","import { getClient } from '../currentScopes.js';\nimport { isError, isRequest, isObjectLike } from '../utils/is.js';\nimport { isBrowser } from '../utils/isBrowser.js';\nimport { fill, addNonEnumerableProperty } from '../utils/object.js';\nimport { supportsNativeFetch } from '../utils/supports.js';\nimport { timestampInSeconds } from '../utils/time.js';\nimport { GLOBAL_OBJ } from '../utils/worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nfunction addFetchInstrumentationHandler(handler) {\n const type = \"fetch\";\n const removeHandler = addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch());\n return removeHandler;\n}\nfunction addFetchEndInstrumentationHandler(handler) {\n const type = \"fetch-body-resolved\";\n const removeHandler = addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch(streamHandler));\n return removeHandler;\n}\nfunction instrumentFetch(onFetchResolved) {\n if (isBrowser() && !supportsNativeFetch()) {\n return;\n }\n fill(GLOBAL_OBJ, \"fetch\", function(originalFetch) {\n return new Proxy(originalFetch, {\n apply(target, _thisArg, args) {\n const virtualError = new Error();\n const { method, url } = parseFetchArgs(args);\n const handlerData = {\n args,\n fetchData: {\n method,\n url\n },\n startTimestamp: timestampInSeconds() * 1e3,\n // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n virtualError,\n headers: getHeadersFromFetchArgs(args)\n };\n if (!onFetchResolved) {\n triggerHandlers(\"fetch\", {\n ...handlerData\n });\n }\n return Reflect.apply(target, GLOBAL_OBJ, args).then(\n async (response) => {\n if (onFetchResolved) {\n onFetchResolved(response);\n } else {\n triggerHandlers(\"fetch\", {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1e3,\n response\n });\n }\n return response;\n },\n (error) => {\n triggerHandlers(\"fetch\", {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1e3,\n error\n });\n if (isError(error) && error.stack === void 0) {\n error.stack = virtualError.stack;\n addNonEnumerableProperty(error, \"framesToPop\", 1);\n }\n const client = getClient();\n const enhanceOption = client?.getOptions().enhanceFetchErrorMessages ?? \"always\";\n const shouldEnhance = enhanceOption !== false;\n if (shouldEnhance && isError(error) && error.name === \"TypeError\" && (error.message === \"Failed to fetch\" || error.message === \"Load failed\" || error.message === \"NetworkError when attempting to fetch resource.\")) {\n try {\n const url2 = new URL(handlerData.fetchData.url);\n const hostname = url2.host;\n if (enhanceOption === \"always\") {\n error.message = `${error.message} (${hostname})`;\n } else {\n addNonEnumerableProperty(error, \"__sentry_fetch_url_host__\", hostname);\n }\n } catch {\n }\n }\n throw error;\n }\n );\n }\n });\n });\n}\nasync function resolveResponse(res, onFinishedResolving) {\n if (res?.body) {\n const body = res.body;\n const responseReader = body.getReader();\n const maxFetchDurationTimeout = setTimeout(\n () => {\n body.cancel().then(null, () => {\n });\n },\n 90 * 1e3\n // 90s\n );\n let readingActive = true;\n while (readingActive) {\n let chunkTimeout;\n try {\n chunkTimeout = setTimeout(() => {\n body.cancel().then(null, () => {\n });\n }, 5e3);\n const { done } = await responseReader.read();\n clearTimeout(chunkTimeout);\n if (done) {\n onFinishedResolving();\n readingActive = false;\n }\n } catch {\n readingActive = false;\n } finally {\n clearTimeout(chunkTimeout);\n }\n }\n clearTimeout(maxFetchDurationTimeout);\n responseReader.releaseLock();\n body.cancel().then(null, () => {\n });\n }\n}\nfunction streamHandler(response) {\n let clonedResponseForResolving;\n try {\n clonedResponseForResolving = response.clone();\n } catch {\n return;\n }\n resolveResponse(clonedResponseForResolving, () => {\n triggerHandlers(\"fetch-body-resolved\", {\n endTimestamp: timestampInSeconds() * 1e3,\n response\n });\n });\n}\nfunction hasProp(obj, prop) {\n return isObjectLike(obj) && !!obj[prop];\n}\nfunction getUrlFromResource(resource) {\n if (typeof resource === \"string\") {\n return resource;\n }\n if (!resource) {\n return \"\";\n }\n if (hasProp(resource, \"url\")) {\n return resource.url;\n }\n if (resource.toString) {\n return resource.toString();\n }\n return \"\";\n}\nfunction parseFetchArgs(fetchArgs) {\n if (fetchArgs.length === 0) {\n return { method: \"GET\", url: \"\" };\n }\n if (fetchArgs.length === 2) {\n const [resource, options] = fetchArgs;\n return {\n url: getUrlFromResource(resource),\n method: hasProp(options, \"method\") ? String(options.method).toUpperCase() : (\n // Request object as first argument\n isRequest(resource) && hasProp(resource, \"method\") ? String(resource.method).toUpperCase() : \"GET\"\n )\n };\n }\n const arg = fetchArgs[0];\n return {\n url: getUrlFromResource(arg),\n method: hasProp(arg, \"method\") ? String(arg.method).toUpperCase() : \"GET\"\n };\n}\nfunction getHeadersFromFetchArgs(fetchArgs) {\n const [requestArgument, optionsArgument] = fetchArgs;\n try {\n if (typeof optionsArgument === \"object\" && optionsArgument !== null && \"headers\" in optionsArgument && optionsArgument.headers) {\n return new Headers(optionsArgument.headers);\n }\n if (isRequest(requestArgument)) {\n return new Headers(requestArgument.headers);\n }\n } catch {\n }\n return;\n}\n\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","function getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n if (statusCode === void 0) {\n return void 0;\n } else if (statusCode >= 400 && statusCode < 500) {\n return \"warning\";\n } else if (statusCode >= 500) {\n return \"error\";\n } else {\n return void 0;\n }\n}\n\nexport { getBreadcrumbLogLevelFromHttpStatusCode };\n//# sourceMappingURL=breadcrumb-log-level.js.map\n","const DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","import { isString } from '@sentry/core';\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\nconst accessors = {};\ntry {\n if (typeof Node !== \"undefined\") {\n accessors.parentNode = Object.getOwnPropertyDescriptor(Node.prototype, \"parentNode\").get;\n }\n if (typeof Element !== \"undefined\") {\n accessors.tagName = Object.getOwnPropertyDescriptor(Element.prototype, \"tagName\").get;\n accessors.id = Object.getOwnPropertyDescriptor(Element.prototype, \"id\").get;\n accessors.className = Object.getOwnPropertyDescriptor(Element.prototype, \"className\").get;\n accessors.getAttribute = Element.prototype.getAttribute;\n }\n if (typeof HTMLElement !== \"undefined\") {\n accessors.dataset = Object.getOwnPropertyDescriptor(HTMLElement.prototype, \"dataset\").get;\n }\n} catch {\n}\nfunction _safeRead(el, prop, arg) {\n const fn = accessors[prop];\n if (fn) {\n try {\n return fn.call(el, arg);\n } catch {\n }\n }\n const val = el[prop];\n return typeof val === \"function\" ? val.call(el, arg) : val;\n}\nfunction htmlTreeAsString(elem, options = {}) {\n if (!elem) {\n return \"<unknown>\";\n }\n try {\n let currentElem = elem;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = \" > \";\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = !Array.isArray(options) && options.maxStringLength || DEFAULT_MAX_STRING_LENGTH;\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n if (nextStr === \"html\" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) {\n break;\n }\n out.push(nextStr);\n len += nextStr.length;\n currentElem = _safeRead(currentElem, \"parentNode\");\n }\n return out.reverse().join(separator);\n } catch {\n return \"<unknown>\";\n }\n}\nfunction _htmlElementAsString(el, keyAttrs) {\n const out = [];\n const tagName = _safeRead(el, \"tagName\");\n if (!tagName) {\n return \"\";\n }\n if (typeof HTMLElement !== \"undefined\") {\n if (el instanceof HTMLElement) {\n const dataset = _safeRead(el, \"dataset\");\n if (dataset) {\n if (dataset[\"sentryComponent\"]) {\n return dataset[\"sentryComponent\"];\n }\n if (dataset[\"sentryElement\"]) {\n return dataset[\"sentryElement\"];\n }\n }\n }\n }\n out.push(tagName.toLowerCase());\n const keyAttrPairs = keyAttrs?.length ? keyAttrs.filter((keyAttr) => _safeRead(el, \"getAttribute\", keyAttr)).map((keyAttr) => [keyAttr, _safeRead(el, \"getAttribute\", keyAttr)]) : null;\n if (keyAttrPairs?.length) {\n keyAttrPairs.forEach((keyAttrPair) => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n const id = _safeRead(el, \"id\");\n if (id) {\n out.push(`#${id}`);\n }\n const className = _safeRead(el, \"className\");\n if (className && isString(className)) {\n const classes = className.split(/\\s+/);\n for (const c of classes) {\n out.push(`.${c}`);\n }\n }\n }\n for (const k of [\"aria-label\", \"type\", \"name\", \"title\", \"alt\"]) {\n const attr = _safeRead(el, \"getAttribute\", k);\n if (attr) {\n out.push(`[${k}=\"${attr}\"]`);\n }\n }\n return out.join(\"\");\n}\n\nexport { htmlTreeAsString };\n//# sourceMappingURL=htmlTreeAsString.js.map\n","import { WINDOW } from '../types.js';\n\nfunction addPageListener(type, listener, options) {\n if (WINDOW.document) {\n WINDOW.addEventListener(type, listener, options);\n }\n}\nfunction removePageListener(type, listener, options) {\n if (WINDOW.document) {\n WINDOW.removeEventListener(type, listener, options);\n }\n}\nconst getNavigationEntry = (checkResponseStart = true) => {\n const navigationEntry = WINDOW.performance?.getEntriesByType?.(\"navigation\")[0];\n if (\n // sentry-specific change:\n // We don't want to check for responseStart for our own use of `getNavigationEntry`\n !checkResponseStart || navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now()\n ) {\n return navigationEntry;\n }\n};\nconst getActivationStart = () => {\n const navEntry = getNavigationEntry();\n return navEntry?.activationStart ?? 0;\n};\nconst onHidden = (cb) => {\n const onHiddenCallback = (event) => {\n if (WINDOW.document?.visibilityState === \"hidden\") {\n cb(event);\n }\n };\n addPageListener(\"visibilitychange\", onHiddenCallback, { capture: true });\n};\nlet firstHiddenTime = -1;\nconst onHiddenFunctions = /* @__PURE__ */ new Set();\nconst initHiddenTime = () => {\n return WINDOW.document?.visibilityState === \"hidden\" && !WINDOW.document?.prerendering ? 0 : Infinity;\n};\nconst onVisibilityUpdate = (event) => {\n if (WINDOW.document?.visibilityState === \"hidden\" && firstHiddenTime > -1) {\n if (event.type === \"visibilitychange\") {\n for (const onHiddenFunction of onHiddenFunctions) {\n onHiddenFunction();\n }\n }\n if (!isFinite(firstHiddenTime)) {\n firstHiddenTime = event.type === \"visibilitychange\" ? event.timeStamp : 0;\n removePageListener(\"prerenderingchange\", onVisibilityUpdate, true);\n }\n }\n};\nconst getVisibilityWatcher = () => {\n if (WINDOW.document && firstHiddenTime < 0) {\n const activationStart = getActivationStart();\n const firstVisibilityStateHiddenTime = !WINDOW.document.prerendering ? globalThis.performance.getEntriesByType(\"visibility-state\").filter((e) => e.name === \"hidden\" && e.startTime > activationStart)[0]?.startTime : void 0;\n firstHiddenTime = firstVisibilityStateHiddenTime ?? initHiddenTime();\n addPageListener(\"visibilitychange\", onVisibilityUpdate, true);\n addPageListener(\"prerenderingchange\", onVisibilityUpdate, true);\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n onHidden(cb) {\n onHiddenFunctions.add(cb);\n }\n };\n};\nconst whenIdleOrHidden = (cb) => {\n const rIC = WINDOW.requestIdleCallback || WINDOW.setTimeout;\n if (WINDOW.document?.visibilityState === \"hidden\") {\n cb();\n } else {\n let called = false;\n const runOnce = () => {\n if (!called) {\n cb();\n called = true;\n }\n };\n addPageListener(\"visibilitychange\", runOnce, { once: true, capture: true });\n rIC(() => {\n runOnce();\n removePageListener(\"visibilitychange\", runOnce, { capture: true });\n });\n }\n};\n\nexport { addPageListener, getActivationStart, getNavigationEntry, getVisibilityWatcher, onHidden, removePageListener, whenIdleOrHidden };\n//# sourceMappingURL=utils.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nfunction getComponentName(elem, maxTraverseHeight = 5) {\n if (!GLOBAL_OBJ.HTMLElement) {\n return null;\n }\n let currentElem = elem;\n for (let i = 0; i < maxTraverseHeight; i++) {\n if (!currentElem) {\n return null;\n }\n if (currentElem instanceof HTMLElement) {\n if (currentElem.dataset[\"sentryComponent\"]) {\n return currentElem.dataset[\"sentryComponent\"];\n }\n if (currentElem.dataset[\"sentryElement\"]) {\n return currentElem.dataset[\"sentryElement\"];\n }\n }\n currentElem = currentElem.parentNode;\n }\n return null;\n}\n\nexport { getComponentName };\n//# sourceMappingURL=component-name.js.map\n","import { WINDOW } from './types.js';\n\nfunction getLocationHref() {\n try {\n return WINDOW.document?.location.href ?? \"\";\n } catch {\n return \"\";\n }\n}\n\nexport { getLocationHref };\n//# sourceMappingURL=getLocationHref.js.map\n","import { LRUMap, getClient, safeCallback, debug, parseStringToURLObject } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { getLocationHref } from './getLocationHref.js';\n\nconst CLIENT_ROUTE_PROVIDERS = /* @__PURE__ */ new WeakMap();\nfunction setRouteProvider(provider, client = getClient()) {\n if (!client) {\n DEBUG_BUILD && debug.warn(\"Cannot set a route provider without a client.\");\n return;\n }\n if (DEBUG_BUILD && getRouteProvider(client)) {\n debug.warn(\n \"A route provider is already registered for this client and will be replaced. Routes only the previous provider knows about will no longer resolve.\"\n );\n }\n CLIENT_ROUTE_PROVIDERS.set(client, provider);\n}\nfunction getRouteProvider(client = getClient()) {\n return client && CLIENT_ROUTE_PROVIDERS.get(client);\n}\nfunction resolveRoute(url, client = getClient()) {\n const provider = getRouteProvider(client);\n if (!provider) {\n return void 0;\n }\n const urlObject = typeof url === \"string\" ? parseLocation(url) : url;\n if (!urlObject) {\n return void 0;\n }\n return safeCallback(\n DEBUG_BUILD ? \"Route provider threw while resolving a route:\" : \"\",\n () => provider.resolveRoute(urlObject) || void 0,\n () => void 0\n );\n}\nfunction resolveCurrentRoute(client = getClient()) {\n const provider = getRouteProvider(client);\n return safeCallback(\n DEBUG_BUILD ? \"Route provider threw while resolving a route:\" : \"\",\n () => provider?.resolveCurrentRoute() || void 0,\n () => void 0\n );\n}\nfunction createUrlRouteProvider(resolveRouteFromUrl) {\n return {\n resolveRoute: resolveRouteFromUrl,\n resolveCurrentRoute: () => {\n const urlObject = parseLocation(getLocationHref());\n return urlObject && resolveRouteFromUrl(urlObject);\n }\n };\n}\nfunction createCachedRouteProvider(maxEntries = 50) {\n const routeNames = new LRUMap(maxEntries);\n return {\n ...createUrlRouteProvider((url) => routeNames.get(url.pathname)),\n record(pathname, routeName) {\n if (pathname && routeName) {\n routeNames.set(pathname, routeName);\n }\n }\n };\n}\nfunction parseLocation(url) {\n return url ? parseStringToURLObject(url, getLocationHref() || void 0) : void 0;\n}\n\nexport { createCachedRouteProvider, createUrlRouteProvider, getRouteProvider, resolveCurrentRoute, resolveRoute, setRouteProvider };\n//# sourceMappingURL=routing.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1e3;\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\nfunction getCapture(options) {\n return typeof options === \"boolean\" ? options : !!options?.capture;\n}\nfunction addClickKeypressInstrumentationHandler(handler) {\n const type = \"dom\";\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\nfunction instrumentDOM() {\n if (!WINDOW.document) {\n return;\n }\n const triggerDOMHandler = triggerHandlers.bind(null, \"dom\");\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener(\"click\", globalDOMEventHandler, false);\n WINDOW.document.addEventListener(\"keypress\", globalDOMEventHandler, false);\n [\"EventTarget\", \"Node\"].forEach((target) => {\n const globalObject = WINDOW;\n const proto = globalObject[target]?.prototype;\n if (!proto?.hasOwnProperty?.(\"addEventListener\")) {\n return;\n }\n fill(proto, \"addEventListener\", function(originalAddEventListener) {\n return function(type, listener, options) {\n if ((type === \"click\" || type == \"keypress\") && listener) {\n try {\n const handlers = this.__sentry_instrumentation_handlers__ = this.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type] = handlers[type] || {\n captureListeners: /* @__PURE__ */ new WeakSet(),\n bubbleListeners: /* @__PURE__ */ new WeakSet(),\n listenerCount: 0\n };\n const capture = getCapture(options);\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n handlerForType.capture = capture;\n originalAddEventListener.call(this, type, handler, handlerForType.capture);\n }\n const listeners = handlerForType[capture ? \"captureListeners\" : \"bubbleListeners\"];\n if (!listeners.has(listener)) {\n if (typeof options === \"object\" && (options?.once || options?.signal)) {\n handlerForType.sticky = true;\n } else {\n listeners.add(listener);\n handlerForType.listenerCount++;\n }\n }\n } catch {\n }\n }\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n fill(\n proto,\n \"removeEventListener\",\n function(originalRemoveEventListener) {\n return function(type, listener, options) {\n if ((type === \"click\" || type == \"keypress\") && listener) {\n try {\n const handlers = this.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n if (handlerForType?.[getCapture(options) ? \"captureListeners\" : \"bubbleListeners\"].delete(listener)) {\n if (!--handlerForType.listenerCount && !handlerForType.sticky) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, handlerForType.capture);\n handlerForType.handler = void 0;\n delete handlers[type];\n }\n if (Object.keys(handlers).length === 0) {\n delete this.__sentry_instrumentation_handlers__;\n }\n }\n } catch {\n }\n }\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n }\n );\n });\n}\nfunction isSimilarToLastCapturedEvent(event) {\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n try {\n if (!event.target || event.target._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch {\n }\n return true;\n}\nfunction shouldSkipDOMEvent(eventType, target) {\n if (eventType !== \"keypress\") {\n return false;\n }\n if (!target?.tagName) {\n return true;\n }\n if (target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable) {\n return false;\n }\n return true;\n}\nfunction makeDOMEventHandler(handler, globalListener = false) {\n return (event) => {\n if (!event || event[\"_sentryCaptured\"]) {\n return;\n }\n const target = getEventTarget(event);\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n addNonEnumerableProperty(event, \"_sentryCaptured\", true);\n if (target && !target._sentryId) {\n addNonEnumerableProperty(target, \"_sentryId\", uuid4());\n }\n const name = event.type === \"keypress\" ? \"input\" : event.type;\n if (!isSimilarToLastCapturedEvent(event)) {\n const handlerData = { event, name, global: globalListener };\n handler(handlerData);\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : void 0;\n }\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = void 0;\n lastCapturedEventType = void 0;\n }, DEBOUNCE_DURATION);\n };\n}\nfunction getEventTarget(event) {\n try {\n return event.target;\n } catch {\n return null;\n }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nlet lastHref;\nfunction supportsHistory() {\n return \"history\" in WINDOW && !!WINDOW.history;\n}\nfunction addHistoryInstrumentationHandler(handler) {\n const type = \"history\";\n addHandler(type, handler);\n maybeInstrument(type, instrumentHistory);\n}\nfunction instrumentHistory() {\n WINDOW.addEventListener(\"popstate\", () => {\n const to = WINDOW.location.href;\n const from = lastHref;\n lastHref = to;\n if (from === to) {\n return;\n }\n const handlerData = { from, to };\n triggerHandlers(\"history\", handlerData);\n });\n if (!supportsHistory()) {\n return;\n }\n function historyReplacementFunction(originalHistoryFunction) {\n return function(...args) {\n const url = args.length > 2 ? args[2] : void 0;\n if (url) {\n const from = lastHref;\n const to = getAbsoluteUrl(String(url));\n lastHref = to;\n if (from === to) {\n return originalHistoryFunction.apply(this, args);\n }\n const handlerData = { from, to };\n triggerHandlers(\"history\", handlerData);\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n fill(WINDOW.history, \"pushState\", historyReplacementFunction);\n fill(WINDOW.history, \"replaceState\", historyReplacementFunction);\n}\nfunction getAbsoluteUrl(urlOrPath) {\n try {\n const url = new URL(urlOrPath, WINDOW.location.origin);\n return url.toString();\n } catch {\n return urlOrPath;\n }\n}\n\nexport { addHistoryInstrumentationHandler, instrumentHistory, supportsHistory };\n//# sourceMappingURL=history.js.map\n","import { isNativeFunction, debug } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\nconst cachedImplementations = {};\nfunction getNativeImplementation(name) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n let impl = WINDOW[name];\n if (isNativeFunction(impl)) {\n return cachedImplementations[name] = impl.bind(WINDOW);\n }\n const document = WINDOW.document;\n if (document && typeof document.createElement === \"function\") {\n try {\n const sandbox = document.createElement(\"iframe\");\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow?.[name]) {\n impl = contentWindow[name];\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n DEBUG_BUILD && debug.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n }\n }\n if (!impl) {\n return impl;\n }\n return cachedImplementations[name] = impl.bind(WINDOW);\n}\nfunction clearCachedImplementation(name) {\n cachedImplementations[name] = void 0;\n}\nfunction fetch(...rest) {\n return getNativeImplementation(\"fetch\")(...rest);\n}\nfunction setTimeout(...rest) {\n try {\n return getNativeImplementation(\"setTimeout\")(...rest);\n } catch (e) {\n DEBUG_BUILD && debug.warn(\"Could not use native setTimeout implementation, falling back to window.setTimeout: \", e);\n const fallback = WINDOW.setTimeout.bind(WINDOW);\n cachedImplementations.setTimeout = fallback;\n return fallback(...rest);\n }\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { addHandler, maybeInstrument, timestampInSeconds, isString, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst SENTRY_XHR_DATA_KEY = \"__sentry_xhr_v3__\";\nfunction addXhrInstrumentationHandler(handler) {\n const type = \"xhr\";\n addHandler(type, handler);\n maybeInstrument(type, instrumentXHR);\n}\nfunction instrumentXHR() {\n if (!WINDOW.XMLHttpRequest) {\n return;\n }\n const xhrproto = XMLHttpRequest.prototype;\n xhrproto.open = new Proxy(xhrproto.open, {\n apply(originalOpen, xhrOpenThisArg, xhrOpenArgArray) {\n let virtualError = new Error();\n const startTimestamp = timestampInSeconds() * 1e3;\n const method = isString(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : void 0;\n const url = parseXhrUrlArg(xhrOpenArgArray[1]);\n if (!method || !url) {\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n }\n xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {\n method,\n url,\n request_headers: {}\n };\n if (method === \"POST\" && url.match(/sentry_key/)) {\n xhrOpenThisArg.__sentry_own_request__ = true;\n }\n const onreadystatechangeHandler = () => {\n const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n if (!xhrInfo) {\n return;\n }\n if (xhrOpenThisArg.readyState === 4) {\n try {\n xhrInfo.status_code = xhrOpenThisArg.status;\n } catch {\n }\n const handlerData = {\n endTimestamp: timestampInSeconds() * 1e3,\n startTimestamp,\n xhr: xhrOpenThisArg,\n virtualError\n };\n triggerHandlers(\"xhr\", handlerData);\n virtualError = void 0;\n xhrOpenThisArg.removeEventListener(\"readystatechange\", onreadystatechangeHandler);\n }\n };\n if (\"onreadystatechange\" in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === \"function\") {\n xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {\n onreadystatechangeHandler();\n return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n }\n });\n } else {\n xhrOpenThisArg.addEventListener(\"readystatechange\", onreadystatechangeHandler);\n }\n xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n apply(originalSetRequestHeader, setRequestHeaderThisArg, setRequestHeaderArgArray) {\n const [header, value] = setRequestHeaderArgArray;\n const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n if (xhrInfo && isString(header) && isString(value)) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n }\n });\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n }\n });\n xhrproto.send = new Proxy(xhrproto.send, {\n apply(originalSend, sendThisArg, sendArgArray) {\n const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n if (!sentryXhrData) {\n return originalSend.apply(sendThisArg, sendArgArray);\n }\n if (sendArgArray[0] !== void 0) {\n sentryXhrData.body = sendArgArray[0];\n }\n const handlerData = {\n startTimestamp: timestampInSeconds() * 1e3,\n xhr: sendThisArg\n };\n triggerHandlers(\"xhr\", handlerData);\n return originalSend.apply(sendThisArg, sendArgArray);\n }\n });\n}\nfunction parseXhrUrlArg(url) {\n if (isString(url)) {\n return url;\n }\n try {\n return url.toString();\n } catch {\n }\n return void 0;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","function isElement(wat) {\n if (typeof Element === \"undefined\") {\n return false;\n }\n try {\n return wat instanceof Element;\n } catch {\n return false;\n }\n}\n\nexport { isElement };\n//# sourceMappingURL=is.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException } from '@sentry/core';\nimport { getLocationHref } from '@sentry/browser-utils';\n\nconst WINDOW = GLOBAL_OBJ;\nlet ignoreOnError = 0;\nconst ignoredErrorReports = [];\nfunction shouldIgnoreOnError(data) {\n if (ignoreOnError > 0) {\n return true;\n }\n const index = data ? ignoredErrorReports.findIndex((report) => isSameErrorReport(report, data)) : -1;\n if (index === -1) {\n return false;\n }\n ignoredErrorReports.splice(index, 1);\n return true;\n}\nfunction ignoreNextOnErrorMatching(report) {\n ignoredErrorReports.push(report);\n setTimeout(() => {\n const index = ignoredErrorReports.indexOf(report);\n if (index !== -1) {\n ignoredErrorReports.splice(index, 1);\n }\n });\n}\nfunction isSameErrorReport(a, b) {\n return a.msg === b.msg && a.url === b.url && a.line === b.line && a.column === b.column;\n}\nfunction ignoreNextOnError() {\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\nfunction wrap(fn, options = {}) {\n function isFunction(fn2) {\n return typeof fn2 === \"function\";\n }\n if (!isFunction(fn)) {\n return fn;\n }\n try {\n const hasOwnWrapper = Object.prototype.hasOwnProperty.call(fn, \"__sentry_wrapped__\");\n if (hasOwnWrapper) {\n const wrapper = fn.__sentry_wrapped__;\n if (typeof wrapper === \"function\") {\n return wrapper;\n } else {\n return fn;\n }\n }\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch {\n return fn;\n }\n const sentryWrapped = function(...args) {\n GLOBAL_OBJ._sentryWrappedDepth = (GLOBAL_OBJ._sentryWrappedDepth || 0) + 1;\n try {\n const wrappedArguments = args.map((arg) => wrap(arg, options));\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n withScope((scope) => {\n scope.addEventProcessor((event) => {\n if (options.mechanism) {\n addExceptionTypeValue(event, void 0, void 0);\n addExceptionMechanism(event, options.mechanism);\n }\n event.extra = {\n ...event.extra,\n arguments: args\n };\n return event;\n });\n captureException(ex);\n });\n throw ex;\n } finally {\n GLOBAL_OBJ._sentryWrappedDepth = (GLOBAL_OBJ._sentryWrappedDepth || 0) - 1;\n }\n };\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch {\n }\n markFunctionWrapped(sentryWrapped, fn);\n addNonEnumerableProperty(fn, \"__sentry_wrapped__\", sentryWrapped);\n try {\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, \"name\");\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, \"name\", {\n get() {\n return fn.name;\n }\n });\n }\n } catch {\n }\n return sentryWrapped;\n}\nfunction getHttpRequestData() {\n const url = getLocationHref();\n const { referrer } = WINDOW.document || {};\n const { userAgent } = WINDOW.navigator || {};\n const headers = {\n ...referrer && { Referer: referrer },\n ...userAgent && { \"User-Agent\": userAgent }\n };\n const request = {\n url,\n headers\n };\n return request;\n}\n\nexport { WINDOW, getHttpRequestData, ignoreNextOnError, ignoreNextOnErrorMatching, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","import { isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, addExceptionMechanism, isParameterizedString, getClient, normalizeToSize, extractExceptionKeysForMessage, _INTERNAL_enhanceErrorWithSentryInfo, resolvedSyncPromise } from '@sentry/core';\n\nfunction exceptionFromError(stackParser, ex) {\n const frames = parseStackFrames(stackParser, ex);\n const exception = {\n type: extractType(ex),\n value: extractMessage(ex)\n };\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n if (exception.type === void 0 && exception.value === \"\") {\n exception.value = \"Unrecoverable error caught\";\n }\n return exception;\n}\nfunction eventFromPlainObject(stackParser, exception, syntheticException, isUnhandledRejection) {\n const client = getClient();\n const normalizeDepth = client?.getOptions().normalizeDepth;\n const errorFromProp = getErrorPropertyFromObject(exception);\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth)\n };\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)]\n },\n extra\n };\n }\n const exceptionValue = {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? \"UnhandledRejection\" : \"Error\",\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection })\n };\n const event = {\n exception: {\n values: [exceptionValue]\n },\n extra\n };\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception.values[0].stacktrace = { frames };\n }\n }\n return event;\n}\nfunction eventFromError(stackParser, ex) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)]\n }\n };\n}\nfunction parseStackFrames(stackParser, ex) {\n const stacktrace = ex.stacktrace || ex.stack || \"\";\n const skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch {\n }\n return [];\n}\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\nfunction getSkipFirstStackStringLines(ex) {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n return 0;\n}\nfunction getPopFirstTopFrames(ex) {\n if (typeof ex.framesToPop === \"number\") {\n return ex.framesToPop;\n }\n return 0;\n}\nfunction isWebAssemblyException(exception) {\n if (typeof WebAssembly !== \"undefined\" && typeof WebAssembly.Exception !== \"undefined\") {\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\nfunction extractType(ex) {\n const name = ex?.name;\n if (!name && isWebAssemblyException(ex)) {\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : \"WebAssembly.Exception\";\n }\n return name;\n}\nfunction extractMessage(ex) {\n const message = ex?.message;\n if (isWebAssemblyException(ex)) {\n if (Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n return \"wasm exception\";\n }\n if (!message) {\n return \"No error message\";\n }\n if (message.error && typeof message.error.message === \"string\") {\n return _INTERNAL_enhanceErrorWithSentryInfo(message.error);\n }\n return _INTERNAL_enhanceErrorWithSentryInfo(ex);\n}\nfunction eventFromException(stackParser, exception, hint, attachStacktrace) {\n const syntheticException = hint?.syntheticException || void 0;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event);\n event.level = \"error\";\n if (hint?.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\nfunction eventFromMessage(stackParser, message, level = \"info\", hint, attachStacktrace) {\n const syntheticException = hint?.syntheticException || void 0;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint?.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\nfunction eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace, isUnhandledRejection) {\n let event;\n if (isErrorEvent(exception) && exception.error) {\n const errorEvent = exception;\n return eventFromError(stackParser, errorEvent.error);\n }\n if (isDOMError(exception) || isDOMException(exception)) {\n const domException = exception;\n if (\"stack\" in exception) {\n event = eventFromError(stackParser, exception);\n const firstException = event.exception?.values?.[0];\n if (attachStacktrace && syntheticException && firstException && !firstException.stacktrace) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n firstException.stacktrace = { frames };\n addExceptionMechanism(event, { synthetic: true });\n }\n }\n } else {\n const name = domException.name || (isDOMError(domException) ? \"DOMError\" : \"DOMException\");\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n return event;\n }\n if (isError(exception)) {\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n const objectException = exception;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true\n });\n return event;\n }\n const stringifiedException = String(exception);\n event = eventFromString(stackParser, stringifiedException, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, stringifiedException, void 0);\n addExceptionMechanism(event, {\n synthetic: true\n });\n return event;\n}\nfunction eventFromString(stackParser, message, syntheticException, attachStacktrace) {\n const event = {};\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }]\n };\n }\n addExceptionMechanism(event, { synthetic: true });\n }\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__\n };\n return event;\n }\n event.message = message;\n return event;\n}\nfunction getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }) {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? \"promise rejection\" : \"exception\";\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\nfunction getObjectClassName(obj) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : void 0;\n } catch {\n }\n}\nfunction getErrorPropertyFromObject(obj) {\n return Object.values(obj).find(isError);\n}\n\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError, extractMessage, extractType };\n//# sourceMappingURL=eventbuilder.js.map\n","import { setRouteProvider } from '@sentry/browser-utils';\nimport { Client, getSDKSource, applySdkMetadata, addAutoIpAddressToSession, timestampInSeconds } from '@sentry/core';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\n\nclass BrowserClient extends Client {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n const opts = applyDefaultOptions(options);\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n applySdkMetadata(opts, \"browser\", [\"browser\"], sdkSource);\n super(opts);\n if (opts.routeProvider) {\n setRouteProvider(opts.routeProvider, this);\n }\n this._unhandledSessionStatus = \"unhandled\";\n const { userInfo } = this.getDataCollectionOptions();\n if (opts._metadata?.sdk) {\n opts._metadata.sdk.settings = {\n // Only allow IP inferral by Relay if the user opted in via dataCollection\n infer_ip: userInfo ? \"auto\" : \"never\",\n // purposefully allowing already passed settings to override the default\n ...opts._metadata.sdk.settings\n };\n }\n const { sendClientReports } = this._options;\n const checkDrift = () => {\n timestampInSeconds();\n };\n const listeners = [\n // Flush buffered data when the page becomes hidden (e.g. tab switch, navigation, or the page\n // being discarded). `flush()` emits the `flush` hook, which drains the span (streaming), log and\n // metric buffers and hands the resulting envelopes to the transport (which uses `keepalive`).\n // Client report outcomes don't listen to the `flush` hook, so we flush them separately.\n [\n WINDOW.document,\n \"visibilitychange\",\n () => {\n checkDrift();\n if (WINDOW.document.visibilityState === \"hidden\") {\n if (sendClientReports) {\n this._flushOutcomes();\n }\n queueMicrotask(() => {\n void this.flush();\n });\n }\n }\n ],\n // `freeze` and `resume` are only fired by Chromium browsers. Other browsers never fire them, so these listeners\n // are no-ops there.\n [WINDOW.document, \"freeze\", checkDrift],\n [WINDOW.document, \"resume\", checkDrift],\n // Pages restored from the back/forward cache were paused while they were cached.\n [WINDOW, \"pagehide\", checkDrift],\n [WINDOW, \"pageshow\", checkDrift]\n ];\n listeners.forEach(([target, name, listener]) => target?.addEventListener?.(name, listener));\n this.on(\n \"close\",\n () => listeners.forEach(([target, name, listener]) => target?.removeEventListener?.(name, listener))\n );\n if (userInfo) {\n this.on(\"beforeSendSession\", addAutoIpAddressToSession);\n }\n }\n /**\n * @inheritDoc\n */\n eventFromException(exception, hint) {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n /**\n * @inheritDoc\n */\n eventFromMessage(message, level = \"info\", hint) {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n /**\n * @inheritDoc\n */\n _prepareEvent(event, hint, currentScope, isolationScope) {\n event.platform = event.platform || \"javascript\";\n return super._prepareEvent(event, hint, currentScope, isolationScope);\n }\n}\nfunction applyDefaultOptions(optionsArg) {\n return {\n release: typeof __SENTRY_RELEASE__ === \"string\" ? __SENTRY_RELEASE__ : WINDOW.SENTRY_RELEASE?.id,\n // This supports the variable that sentry-webpack-plugin injects\n sendClientReports: true,\n // We default this to true, as it is the safer scenario\n parentSpanIsAlwaysRootSpan: true,\n ...optionsArg\n };\n}\n\nexport { BrowserClient, applyDefaultOptions };\n//# sourceMappingURL=client.js.map\n","import { createTransport, makePromiseBuffer } from '@sentry/core';\nimport { getNativeImplementation, clearCachedImplementation } from '@sentry/browser-utils';\n\nconst DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE = 40;\nfunction makeFetchTransport(options, nativeFetch = getNativeImplementation(\"fetch\")) {\n let pendingBodySize = 0;\n let pendingCount = 0;\n async function makeRequest(request) {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n const requestOptions = {\n body: request.body,\n method: \"POST\",\n referrerPolicy: \"strict-origin\",\n headers: options.headers,\n // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).\n // Gotchas:\n // - `keepalive` isn't supported by Firefox\n // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n // We will therefore only activate the flag when we're below that limit.\n // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n keepalive: pendingBodySize <= 6e4 && pendingCount < 15,\n ...options.fetchOptions\n };\n try {\n const response = await nativeFetch(options.url, requestOptions);\n return {\n statusCode: response.status,\n headers: {\n \"x-sentry-rate-limits\": response.headers.get(\"X-Sentry-Rate-Limits\"),\n \"retry-after\": response.headers.get(\"Retry-After\")\n }\n };\n } catch (e) {\n clearCachedImplementation(\"fetch\");\n throw e;\n } finally {\n pendingBodySize -= requestSize;\n pendingCount--;\n }\n }\n return createTransport(\n options,\n makeRequest,\n makePromiseBuffer(options.bufferSize || DEFAULT_BROWSER_TRANSPORT_BUFFER_SIZE)\n );\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","const DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\nfunction createFrame(filename, func, lineno, colno) {\n const frame = {\n filename,\n function: func === \"<anonymous>\" ? UNKNOWN_FUNCTION : func,\n in_app: true\n // All browser frames are considered in_app\n };\n if (lineno !== void 0) {\n frame.lineno = lineno;\n }\n if (colno !== void 0) {\n frame.colno = colno;\n }\n return frame;\n}\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\nconst chromeRegex = /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nconst chromeDataUriRegex = /at (.+?) ?\\(data:(.+?),/;\nconst chromeStackParserFn = (line) => {\n const dataUriMatch = line.match(chromeDataUriRegex);\n if (dataUriMatch) {\n return {\n filename: `<data:${dataUriMatch[2]}>`,\n function: dataUriMatch[1]\n };\n }\n const noFnParts = chromeRegexNoFnName.exec(line);\n if (noFnParts) {\n const [, filename, line2, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line2, +col);\n }\n const parts = chromeRegex.exec(line);\n if (parts) {\n const isEval = parts[2]?.indexOf(\"eval\") === 0;\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]);\n if (subMatch) {\n parts[2] = subMatch[1];\n parts[3] = subMatch[2];\n parts[4] = subMatch[3];\n }\n }\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n return createFrame(filename, func, parts[3] ? +parts[3] : void 0, parts[4] ? +parts[4] : void 0);\n }\n return;\n};\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\nconst geckoREgex = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nconst gecko = (line) => {\n const parts = geckoREgex.exec(line);\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(\" > eval\") > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]);\n if (subMatch) {\n parts[1] = parts[1] || \"eval\";\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = \"\";\n }\n }\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n return createFrame(filename, func, parts[4] ? +parts[4] : void 0, parts[5] ? +parts[5] : void 0);\n }\n return;\n};\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nconst winjs = (line) => {\n const parts = winjsRegex.exec(line);\n return parts ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : void 0) : void 0;\n};\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\nconst opera10 = (line) => {\n const parts = opera10Regex.exec(line);\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : void 0;\n};\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\nconst opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\nconst opera11 = (line) => {\n const parts = opera11Regex.exec(line);\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : void 0;\n};\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\nconst extractSafariExtensionDetails = (func, filename) => {\n const isSafariExtension = func.indexOf(\"safari-extension\") !== -1;\n const isSafariWebExtension = func.indexOf(\"safari-web-extension\") !== -1;\n return isSafariExtension || isSafariWebExtension ? [\n func.indexOf(\"@\") !== -1 ? func.split(\"@\")[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`\n ] : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { defineIntegration, addFetchInstrumentationHandler, getClient, debug, addBreadcrumb, filterCollectedUrl, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl, getEventDescription } from '@sentry/core';\nimport { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, htmlTreeAsString, getComponentName, SENTRY_XHR_DATA_KEY } from '@sentry/browser-utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\nconst INTEGRATION_NAME = \"Breadcrumbs\";\nconst _breadcrumbsIntegration = ((options = {}) => {\n const _options = {\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options\n };\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry) {\n client.on(\"beforeSendEvent\", _getSentryBreadcrumbHandler(client));\n }\n }\n };\n});\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\nfunction _getSentryBreadcrumbHandler(client) {\n return function addSentryBreadcrumb(event) {\n if (getClient() !== client) {\n return;\n }\n addBreadcrumb(\n {\n category: `sentry.${event.type === \"transaction\" ? \"transaction\" : \"event\"}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event)\n },\n {\n event\n }\n );\n };\n}\nfunction _getDomBreadcrumbHandler(client, dom) {\n return function _innerDomBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n let target;\n let componentName;\n let keyAttrs = typeof dom === \"object\" ? dom.serializeAttribute : void 0;\n let maxStringLength = typeof dom === \"object\" && typeof dom.maxStringLength === \"number\" ? dom.maxStringLength : void 0;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD && debug.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n if (typeof keyAttrs === \"string\") {\n keyAttrs = [keyAttrs];\n }\n try {\n const event = handlerData.event;\n const element = _isEvent(event) ? event.target : event;\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch {\n target = \"<unknown>\";\n }\n if (target.length === 0) {\n return;\n }\n const breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target\n };\n if (componentName) {\n breadcrumb.data = { \"ui.component_name\": componentName };\n }\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global\n });\n };\n}\nfunction _getXhrBreadcrumbHandler(client) {\n return function _xhrBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n const { startTimestamp, endTimestamp } = handlerData;\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n const { method, url, status_code, body } = sentryXhrData;\n const data = {\n method,\n url: filterCollectedUrl(url),\n status_code\n };\n const hint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp\n };\n const breadcrumb = {\n category: \"xhr\",\n data,\n type: \"http\",\n level: getBreadcrumbLogLevelFromHttpStatusCode(status_code)\n };\n client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n addBreadcrumb(breadcrumb, hint);\n };\n}\nfunction _getFetchBreadcrumbHandler(client) {\n return function _fetchBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n const { startTimestamp, endTimestamp } = handlerData;\n if (!endTimestamp) {\n return;\n }\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === \"POST\") {\n return;\n }\n if (handlerData.error) {\n const hint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp\n };\n const breadcrumb = {\n category: \"fetch\",\n data: { ...handlerData.fetchData, url: filterCollectedUrl(handlerData.fetchData.url) },\n level: \"error\",\n type: \"http\"\n };\n client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n addBreadcrumb(breadcrumb, hint);\n } else {\n const response = handlerData.response;\n const data = {\n ...handlerData.fetchData,\n url: filterCollectedUrl(handlerData.fetchData.url),\n status_code: response?.status\n };\n const hint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp\n };\n const breadcrumb = {\n category: \"fetch\",\n data,\n type: \"http\",\n level: getBreadcrumbLogLevelFromHttpStatusCode(data.status_code)\n };\n client.emit(\"beforeOutgoingRequestBreadcrumb\", breadcrumb, hint);\n addBreadcrumb(breadcrumb, hint);\n }\n };\n}\nfunction _getHistoryBreadcrumbHandler(client) {\n return function _historyBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : void 0;\n const parsedTo = parseUrl(to);\n if (!parsedFrom?.path) {\n parsedFrom = parsedLoc;\n }\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n addBreadcrumb({\n category: \"navigation\",\n data: {\n from: filterCollectedUrl(from),\n to: filterCollectedUrl(to)\n }\n });\n };\n}\nfunction _isEvent(event) {\n return !!event && !!event.target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = \"EventTarget,Window,Node,ApplicationCache,AudioTrackList,BroadcastChannel,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload\".split(\n \",\"\n);\nconst INTEGRATION_NAME = \"BrowserApiErrors\";\nconst _browserApiErrorsIntegration = ((options = {}) => {\n const _options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n unregisterOriginalCallbacks: false,\n ...options\n };\n return {\n name: INTEGRATION_NAME,\n // TODO: This currently only works for the first client this is setup\n // We may want to adjust this to check for client etc.\n setupOnce() {\n if (_options.setTimeout) {\n fill(WINDOW, \"setTimeout\", _wrapTimeFunction);\n }\n if (_options.setInterval) {\n fill(WINDOW, \"setInterval\", _wrapTimeFunction);\n }\n if (_options.requestAnimationFrame) {\n fill(WINDOW, \"requestAnimationFrame\", _wrapRAF);\n }\n if (_options.XMLHttpRequest && \"XMLHttpRequest\" in WINDOW) {\n fill(XMLHttpRequest.prototype, \"send\", _wrapXHR);\n }\n const eventTargetOption = _options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach((target) => _wrapEventTarget(target, _options));\n }\n }\n };\n});\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\nfunction _wrapTimeFunction(original) {\n return function(...args) {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n handled: false,\n type: `auto.browser.browserapierrors.${getFunctionName(original)}`\n }\n });\n return original.apply(this, args);\n };\n}\nfunction _wrapRAF(original) {\n return function(callback) {\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n handler: getFunctionName(original)\n },\n handled: false,\n type: \"auto.browser.browserapierrors.requestAnimationFrame\"\n }\n })\n ]);\n };\n}\nfunction _wrapXHR(originalSend) {\n return function(...args) {\n const xhr = this;\n const xmlHttpRequestProps = [\"onload\", \"onerror\", \"onprogress\", \"onreadystatechange\"];\n xmlHttpRequestProps.forEach((prop) => {\n if (prop in xhr && typeof xhr[prop] === \"function\") {\n fill(xhr, prop, function(original) {\n const wrapOptions = {\n mechanism: {\n data: {\n handler: getFunctionName(original)\n },\n handled: false,\n type: `auto.browser.browserapierrors.xhr.${prop}`\n }\n };\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n return wrap(original, wrapOptions);\n });\n }\n });\n return originalSend.apply(this, args);\n };\n}\nfunction _wrapEventTarget(target, integrationOptions) {\n const globalObject = WINDOW;\n const proto = globalObject[target]?.prototype;\n if (!proto?.hasOwnProperty?.(\"addEventListener\")) {\n return;\n }\n fill(proto, \"addEventListener\", function(original) {\n return function(eventName, fn, options) {\n try {\n if (isEventListenerObject(fn)) {\n fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n handler: getFunctionName(fn),\n target\n },\n handled: false,\n type: \"auto.browser.browserapierrors.handleEvent\"\n }\n });\n }\n } catch {\n }\n if (integrationOptions.unregisterOriginalCallbacks) {\n unregisterOriginalCallback(this, eventName, fn);\n }\n return original.apply(this, [\n eventName,\n wrap(fn, {\n mechanism: {\n data: {\n handler: getFunctionName(fn),\n target\n },\n handled: false,\n type: \"auto.browser.browserapierrors.addEventListener\"\n }\n }),\n options\n ]);\n };\n });\n fill(proto, \"removeEventListener\", function(originalRemoveEventListener) {\n return function(eventName, fn, options) {\n try {\n if (Object.prototype.hasOwnProperty.call(fn, \"__sentry_wrapped__\")) {\n const originalEventHandler = fn.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n }\n } catch {\n }\n return originalRemoveEventListener.call(this, eventName, fn, options);\n };\n });\n}\nfunction isEventListenerObject(obj) {\n return typeof obj.handleEvent === \"function\";\n}\nfunction unregisterOriginalCallback(target, eventName, fn) {\n if (target && typeof target === \"object\" && \"removeEventListener\" in target && typeof target.removeEventListener === \"function\") {\n target.removeEventListener(eventName, fn);\n }\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { defineIntegration, debug, startSession, captureSession, getIsolationScope } from '@sentry/core';\nimport { whenIdleOrHidden, addHistoryInstrumentationHandler } from '@sentry/browser-utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nconst browserSessionIntegration = defineIntegration((options = {}) => {\n const lifecycle = options.lifecycle ?? \"page\";\n return {\n name: \"BrowserSession\",\n setupOnce() {\n if (typeof WINDOW.document === \"undefined\") {\n DEBUG_BUILD && debug.warn(\"Using the `browserSessionIntegration` in non-browser environments is not supported.\");\n return;\n }\n startSession({ ignoreDuration: true });\n let initialSessionSent = false;\n whenIdleOrHidden(() => {\n if (!initialSessionSent) {\n captureSession();\n initialSessionSent = true;\n }\n });\n const isolationScope = getIsolationScope();\n let previousUser = isolationScope.getUser();\n isolationScope.addScopeListener((scope) => {\n const maybeNewUser = scope.getUser();\n if (previousUser?.id !== maybeNewUser?.id || previousUser?.ip_address !== maybeNewUser?.ip_address) {\n previousUser = maybeNewUser;\n if (initialSessionSent) {\n captureSession();\n }\n }\n });\n if (lifecycle === \"route\") {\n addHistoryInstrumentationHandler(({ from, to }) => {\n if (from !== to) {\n startSession({ ignoreDuration: true });\n captureSession();\n initialSessionSent = true;\n }\n });\n }\n }\n };\n});\n\nexport { browserSessionIntegration };\n//# sourceMappingURL=browsersession.js.map\n","import { defineIntegration, safeSetSpanJSONAttributes } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\nconst INTEGRATION_NAME = \"CultureContext\";\nconst _cultureContextIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event) {\n const culture = getCultureContext();\n if (culture) {\n event.contexts = {\n ...event.contexts,\n culture: { ...culture, ...event.contexts?.culture }\n };\n }\n },\n processSegmentSpan(span) {\n const culture = getCultureContext();\n if (culture) {\n safeSetSpanJSONAttributes(span, {\n \"culture.locale\": culture.locale,\n \"culture.timezone\": culture.timezone,\n \"culture.calendar\": culture.calendar\n });\n }\n }\n };\n});\nconst cultureContextIntegration = defineIntegration(_cultureContextIntegration);\nfunction getCultureContext() {\n try {\n const intl = WINDOW.Intl;\n if (!intl) {\n return void 0;\n }\n const options = intl.DateTimeFormat().resolvedOptions();\n return {\n locale: options.locale,\n timezone: options.timeZone,\n calendar: options.calendar\n };\n } catch {\n return void 0;\n }\n}\n\nexport { cultureContextIntegration };\n//# sourceMappingURL=culturecontext.js.map\n","import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, debug, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, UNKNOWN_FUNCTION, isString, stripDataUrlContent } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { getLocationHref } from '@sentry/browser-utils';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = \"GlobalHandlers\";\nconst _globalHandlersIntegration = ((options = {}) => {\n const _options = {\n onerror: true,\n onunhandledrejection: true,\n ...options\n };\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n Error.stackTraceLimit = 50;\n },\n setup(client) {\n if (_options.onerror) {\n _installGlobalOnErrorHandler(client);\n globalHandlerLog(\"onerror\");\n }\n if (_options.onunhandledrejection) {\n _installGlobalOnUnhandledRejectionHandler(client);\n globalHandlerLog(\"onunhandledrejection\");\n }\n }\n };\n});\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\nfunction _installGlobalOnErrorHandler(client) {\n addGlobalErrorInstrumentationHandler((data) => {\n const { stackParser, attachStacktrace } = getOptions();\n if (getClient() !== client || shouldIgnoreOnError(data)) {\n return;\n }\n const { msg, url, line, column, error } = data;\n const event = _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, void 0, attachStacktrace, false),\n url,\n line,\n column\n );\n event.level = \"error\";\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: \"auto.browser.global_handlers.onerror\"\n }\n });\n });\n}\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n addGlobalUnhandledRejectionInstrumentationHandler((e) => {\n const { stackParser, attachStacktrace } = getOptions();\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n const error = _getUnhandledRejectionError(e);\n const event = isPrimitive(error) ? _eventFromRejectionWithPrimitive(error) : eventFromUnknownInput(stackParser, error, void 0, attachStacktrace, true);\n event.level = \"error\";\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: \"auto.browser.global_handlers.onunhandledrejection\"\n }\n });\n });\n}\nfunction _getUnhandledRejectionError(error) {\n if (isPrimitive(error)) {\n return error;\n }\n try {\n if (\"reason\" in error) {\n return error.reason;\n }\n if (\"detail\" in error && \"reason\" in error.detail) {\n return error.detail.reason;\n }\n } catch {\n }\n return error;\n}\nfunction _eventFromRejectionWithPrimitive(reason) {\n return {\n exception: {\n values: [\n {\n type: \"UnhandledRejection\",\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`\n }\n ]\n }\n };\n}\nfunction _enhanceEventWithInitialFrame(event, url, lineno, colno) {\n const e = event.exception = event.exception || {};\n const ev = e.values = e.values || [];\n const ev0 = ev[0] = ev[0] || {};\n const ev0s = ev0.stacktrace = ev0.stacktrace || {};\n const ev0sf = ev0s.frames = ev0s.frames || [];\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n lineno,\n filename: getFilenameFromUrl(url) ?? getLocationHref(),\n function: UNKNOWN_FUNCTION,\n in_app: true\n });\n }\n return event;\n}\nfunction globalHandlerLog(type) {\n DEBUG_BUILD && debug.log(`Global Handler attached: ${type}`);\n}\nfunction getOptions() {\n const client = getClient();\n const options = client?.getOptions() || {\n stackParser: () => [],\n attachStacktrace: false\n };\n return options;\n}\nfunction getFilenameFromUrl(url) {\n if (!isString(url) || url.length === 0) {\n return void 0;\n }\n if (url.startsWith(\"data:\")) {\n return `<${stripDataUrlContent(url, false)}>`;\n }\n return url;\n}\n\nexport { _enhanceEventWithInitialFrame, _eventFromRejectionWithPrimitive, _getUnhandledRejectionError, globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration, _INTERNAL_filterKeyValueData, safeSetSpanJSONAttributes, filterCollectedUrl } from '@sentry/core';\nimport { WINDOW, getHttpRequestData } from '../helpers.js';\nimport { HTTP_REQUEST_HEADER_KEY_BASE, URL_FULL, SENTRY_OP, SENTRY_IS_LOCALHOST, USER_AGENT_ORIGINAL } from '@sentry/conventions/attributes';\n\nconst httpContextIntegration = defineIntegration(() => {\n return {\n name: \"HttpContext\",\n preprocessEvent(event, _hint, client) {\n if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n return;\n }\n const { url, headers: collectedHeaders } = getHttpRequestData();\n const behavior = client.getDataCollectionOptions().httpHeaders.request;\n const userHeaders = Object.entries(event.request?.headers ?? {}).filter(([key]) => !(key in collectedHeaders));\n const headers = {\n ..._INTERNAL_filterKeyValueData(collectedHeaders, behavior),\n ...Object.fromEntries(userHeaders)\n };\n event.request = {\n url: filterCollectedUrl(url, client),\n ...event.request,\n ...Object.keys(headers).length > 0 ? { headers } : { headers: void 0 }\n };\n },\n processSpan(span, client) {\n if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n return;\n }\n const reqData = getHttpRequestData();\n const headers = _INTERNAL_filterKeyValueData(\n reqData.headers,\n client.getDataCollectionOptions().httpHeaders.request\n );\n const referer = headers[\"Referer\"];\n const { hostname, protocol } = WINDOW.location || {};\n safeSetSpanJSONAttributes(span, {\n // This attribute is used by the \"Filter out events from legacy browsers and crawlers\" features on the Sentry backend.\n // Therefore, it's set on every span.\n [USER_AGENT_ORIGINAL]: headers[\"User-Agent\"],\n // Likewise for the \"Filter out localhost events\" feature. Deliberately inlined rather than\n // sharing the server-side helper, which costs bundle size for request headers and IPs that\n // don't exist here. Mirrors Relay's localhost filter (relay-filter/src/localhost.rs).\n [SENTRY_IS_LOCALHOST]: protocol === \"file:\" || hostname === \"localhost\" || hostname === \"127.0.0.1\" || // `location.hostname` keeps the brackets for IPv6 hosts, so this is `[::1]`, not `::1`.\n hostname === \"[::1]\" || !!hostname?.endsWith(\".localhost\"),\n // These attributes, we only need on the segment span (analogous to the `request` context for events)\n ...span.is_segment && {\n // Coerce empty string to undefined so the helper's nullish check drops it,\n // rather than writing an empty `url.full` attribute onto the span.\n [URL_FULL]: span.attributes?.[SENTRY_OP] !== \"http.client\" ? filterCollectedUrl(reqData.url) : void 0,\n [`${HTTP_REQUEST_HEADER_KEY_BASE}.referer`]: referer ? [referer] : void 0\n }\n });\n }\n };\n});\n\nexport { httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, applyAggregateErrorsToEvent } from '@sentry/core';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = \"cause\";\nconst DEFAULT_LIMIT = 5;\nconst INTEGRATION_NAME = \"LinkedErrors\";\nconst _linkedErrorsIntegration = ((options = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event, hint, client) {\n const options2 = client.getOptions();\n applyAggregateErrorsToEvent(\n // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n exceptionFromError,\n options2.stackParser,\n key,\n limit,\n event,\n hint\n );\n }\n };\n});\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { isElement, htmlTreeAsString } from '@sentry/browser-utils';\n\nconst HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX = /^HTML(\\w*)Element$/;\nfunction normalizeStringifyValue(value) {\n if (typeof window !== \"undefined\" && value === window) {\n return \"[Window]\";\n }\n if (typeof document !== \"undefined\" && value === document) {\n return \"[Document]\";\n }\n if (isElement(value)) {\n const objName = getConstructorName(value);\n if (HTML_ELEMENT_CONSTRUCTOR_NAME_REGEX.test(objName)) {\n return `[HTMLElement: ${htmlTreeAsString(value)}]`;\n }\n }\n return void 0;\n}\nfunction getConstructorName(value) {\n const prototype = Object.getPrototypeOf(value);\n return prototype?.constructor ? prototype.constructor.name : \"null prototype\";\n}\n\nexport { normalizeStringifyValue };\n//# sourceMappingURL=normalizeStringifyValue.js.map\n","import { getLocationHref } from '@sentry/browser-utils';\nimport { consoleSandbox } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nfunction checkAndWarnIfIsEmbeddedBrowserExtension() {\n if (_isEmbeddedBrowserExtension()) {\n if (DEBUG_BUILD) {\n consoleSandbox(() => {\n console.error(\n \"[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/\"\n );\n });\n }\n return true;\n }\n return false;\n}\nfunction _isEmbeddedBrowserExtension() {\n if (typeof WINDOW.window === \"undefined\") {\n return false;\n }\n const _window = WINDOW;\n if (_window.nw) {\n return false;\n }\n const extensionObject = _window[\"chrome\"] || _window[\"browser\"];\n if (!extensionObject?.runtime?.id) {\n return false;\n }\n const href = getLocationHref();\n const isDedicatedExtensionPage = WINDOW === WINDOW.top && /^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\\/\\//.test(href);\n return !isDedicatedExtensionPage;\n}\n\nexport { checkAndWarnIfIsEmbeddedBrowserExtension };\n//# sourceMappingURL=detectBrowserExtension.js.map\n","import { eventFiltersIntegration, functionToStringIntegration, conversationIdIntegration, consoleIntegration, dedupeIntegration, getIntegrationsToSetup, stackParserFromStackParserOptions, setNormalizeStringifier, initAndBind } from '@sentry/core';\nimport { BrowserClient } from './client.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { browserSessionIntegration } from './integrations/browsersession.js';\nimport { cultureContextIntegration } from './integrations/culturecontext.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\nimport { normalizeStringifyValue } from './normalizeStringifyValue.js';\nimport { checkAndWarnIfIsEmbeddedBrowserExtension } from './utils/detectBrowserExtension.js';\n\nfunction getDefaultIntegrations(_options) {\n return [\n eventFiltersIntegration(),\n functionToStringIntegration(),\n conversationIdIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n consoleIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n cultureContextIntegration(),\n browserSessionIntegration()\n ];\n}\nfunction init(options = {}) {\n const shouldDisableBecauseIsBrowserExtenstion = !options.skipBrowserExtensionCheck && checkAndWarnIfIsEmbeddedBrowserExtension();\n let defaultIntegrations = options.defaultIntegrations == null ? getDefaultIntegrations() : options.defaultIntegrations;\n const integrations = getIntegrationsToSetup({\n integrations: options.integrations,\n defaultIntegrations\n });\n const clientOptions = {\n ...options,\n enabled: shouldDisableBecauseIsBrowserExtenstion ? false : options.enabled,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations,\n transport: options.transport || makeFetchTransport\n };\n setNormalizeStringifier(normalizeStringifyValue);\n return initAndBind(BrowserClient, clientOptions);\n}\nfunction forceLoad() {\n}\nfunction onLoad(callback) {\n callback();\n}\n\nexport { forceLoad, getDefaultIntegrations, init, onLoad };\n//# sourceMappingURL=sdk.js.map\n"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128],"mappings":"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","debugId":"1867d64c-1b53-43ae-80eb-44025912365c"}
|